日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32控制启动步进电机

發布時間:2023/12/16 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32控制启动步进电机 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

正在做的項目需要用STM32控制步進電機,本篇主要講解利用STM32定時器外設輸出脈沖來控制步進電機轉動。

STM32定時器

使用STM32芯片類型:STM32c8t6。

使用外設接口:選用TIM4的CH1通道,對應輸出脈沖IO口為PB6。

步進驅動器介紹

(這里以兩相步進驅動器為例,詳細見說明書)

  • 接口
    步進驅動器可分為兩部分:環形分配器、功率放大器。
    環形分配器:接收3種信號分別為:脈沖信號(PUL),方向信號(DIR),脫機信號(ENA)。
    脈沖信號:環形分配器對脈沖信號進行分配,去控制功率放大器相應的晶體管,使步進電機的線圈得電。所以,步進電機要運轉就必須有脈沖輸入,所以需要一個驅動器來給步進電機的各項繞組依次通電。
    方向信號:控制AB通電的相序,A-B順時針,B-A逆時針
    脫機信號:步進電機停止時,AB線圈有一相得電,得電的功能使轉子鎖住,使轉子不能動,需要收去撥動轉子的時候,需要給脫機信號,使AB相繞組完全斷電,轉子處于自由轉動狀態。(也就是說控制電機停止除了不給脈沖之外,還可以控制脫機信號來鎖死電機,此處用不著脫機信號)
  • 細分
    為了提高步進電動機控制的精度,現在的步進驅動器都有細分的功能,所謂細分,就是通過驅動器中電路的方法把步距角減小。比如把步進驅動器設置成5細分,假設原來步距角1.8°那么設成5細分后,步距角就是0.36°。也就是說原來一步可以走完的,設置成細分后需要走5步。一般步進電動機的細分表在驅動器上可以直接看到。(設置合適細分能夠避免電機轉動時震動過大,但過高的細分數會導致電機輸出力矩減小)
  • 驅動電源:
    需要9-42V直流電源,需要使用變壓器將220V交流電轉為24V直流電

定時器頻率與步進電機的關系

  • 接線

    將驅動器PUL+端接入STM32輸出脈沖的IO口(PB6),PUL-端接地
    將驅動器DIR+端接入STM32的任意一個閑置IO口(這里選PB5),DIR-端接地
    驅動器ENA±端不接
    A+、A-、B+、B-接入步進電機
    電源接到變壓器

  • 頻率與速度的關系

    確定輸出脈沖頻率與電機轉速的關系,對于兩相步進電機而言:

    轉速 = 脈沖頻率 * 60 /((360/T)*x) T是步進電機步距角(1.8°),x是驅動器細分倍數(16) 脈沖頻率= 時鐘頻率(72Mhz)/ ((arr+1)*(psc+1))

    根據以上公式,可以得到:
    Speed = 15r/min時,若確定arr為199,則psc為449
    其他速度可根據需要自行設定。

代碼

編寫流程:TIM4配置 -> DIR對應IO口配置 -> main調用初始化函數并設置占空比

//TIM4配置 void TIM4_PWM_Init(u16 arr,u16 psc) //初始化arr=200,psc = 450得到電機速度為15r/min { //初始化結構體NVIC_InitTypeDef NVIC_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;TIM_OCInitTypeDef TIM_OCInitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;//使能時鐘RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE); //設置該引腳為復用輸出功能,輸出TIM4 CH1的PWM脈沖波形 GPIOB.6GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //TIM4_CH1GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);//計數模式TIM_TimeBaseStructure.TIM_Period = arr; TIM_TimeBaseStructure.TIM_Prescaler =psc; TIM_TimeBaseStructure.TIM_ClockDivision = 0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //定時中斷配置TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE ); /NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); //初始化TIM4 Channel1 PWM模式 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OC1Init(TIM4, &TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); TIM_Cmd(TIM4,ENABLE); //使能定時器 } /*PB5電機方向引腳配置*/ void DIR_Init(void) { GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); } int main() {DIR_Init();TIM4_PWM_Init(200,450);TIM_SetCompare1(TIM4,200/2); //設置占空比為50%(=arr/2),不設置的話電機啟動不了while(){;} }

對應工程文件:

CSDN:STM32c8t6啟動步進電機
GitHub: STM32-drives-step-motor

總結

以上是生活随笔為你收集整理的STM32控制启动步进电机的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。