[步進電機控制器]stm32F4定時器中斷 + 步進電機控制器 控制四線兩相步進電機
發布時間:2020-09-12 17:39:28
閱讀次數:143
文章來源:深圳博智達機器人
導讀: 今天給大家分享一個初級版本的步進電機的控制方法,用到的步進電機是4線兩相的42步進電機如下圖: 步進電機驅動選用的是這款TB6600 供電選用了12V的穩壓電源最小系統板供電是從J...
stm32F4定時器中斷 + 步進電機控制器 控制四線兩相步進電機
今天給大家分享一個初級版本的步進電機的控制方法,用到的步進電機是4線兩相的42步進電機如下圖:
![[步進電機控制器]stm32F4定時器中斷 + 步進電機控制器 控制四線兩相步進電機](/uploads/allimg/200708/1-200FQ50G55H.jpg)
步進電機驅動選用的是這款TB6600
供電選用了12V的穩壓電源最小系統板供電是從Jlink上直接引出
MCU是stm32F407ZGT6最小系統板
根據步進電機控制器的資料可以知道步進電機的速度和轉過的角度都是通過PUL+和PUL-來控制的
(這里插一段關于步進電機驅動上的六個控制接線端子的使用,將其中的四個+或者是四根-接在一起做成共陽接法或者共陰接法,如果電平是3.3V或者5V可以不串接電阻,如果電壓大于5V需要在每一根線上串接相應阻值的電阻)
這里我選擇的是共陽接法也就是將所有的正極接線接到了一起
EN-引腳懸空(我的程序里面暫時沒有用到,實際使用需要讀者自行考慮)
DIR-接單片機PE12口
PUL-接單片機PE13口
接下來就說一下我程序的基本思路:
要想控制步進電機我們一般是控制兩個東西:1是轉過的角度值(位置)2是速度(為了防止丟步和平穩的啟動機器預防啟動極限和轉子振蕩我們的速度不能變化太快)
歸結到程序上也就是我們需要控制PE13IO口輸出一定的方波信號。這個信號一方面有數量的限定,另一方面這個信號的頻率不能是一個固定的數值(除非你的控制對時間沒有要求,可以允許設備一直以一個較低的速度運行),這里我們選用了定時器中斷作為脈沖的時間基準,在定時器的中斷函數里面我們對IO口的電平進行翻轉一次獲得一個方波的邊緣(一半的方波)通過對中斷次數的統計我們可以實現對位置的控制(理想情況下),另一個需求就是控制速度,我的解決方案是控制中斷的頻率以此來實現控制方波的頻率,具體的操作就是修改定時器的預分頻器PSC,通過改變最終進入定時器CNT的脈沖頻率來實現修改定時頻率的目的(這里用到的是定時器的更新中斷)
以上是初始化代碼,需要注意的請看備注,這份代碼我會上傳到CSDN需要的朋友可以自行下載也可以私信我
主要是一個定時器的初始化以及中斷的配置、兩個通用IO的初始化
以上是中斷函數部分通過這噶函數我們可以實現對運行狀態的粗略控制:我們可以控制脈沖的數量,進而控制步進電機轉過的角度。我們可以控制定時器的中斷頻率,進而控制脈沖的頻率以此實現對步進電機速度的控制。
說明:此代碼只適合新手來看看,并不適用于實際生產!步進電機的速度控制算法有比這個優秀很多的,這只是我初步寫的一個初級版本,后續會補上其他版本的步進電機控制方案。
另外有一點需要注意的就是步進電機的細分選擇:我這邊選擇的是8細分電流是根據電機特性選擇的1.5A細分方面不建議細分太多,這樣會導致初級版本的程序頻繁的進入中斷函數,占用的CPU時間可能會影響程序的運行效率。細分的如果太少也會導致一些其他問題,比如電機的噪音增大。電流大小會直接影響到電機的力矩,如果電流過小可能會導致大電機啟動不起來。電流過大則會導致小電機的發熱嚴重。EN引腳一般是控制釋放電機的,這里有一個概念叫做保持力矩,也就是步進電機再點擊驅動器的電流影響下會保持當前的位置難以轉動,這個力矩的大小是由電流決定的也就是保持力矩。
另外分享一個快速區分步進電機的兩根相線的方法:將步進電機的任意兩條相線短接,轉動轉子,如果有卡頓的感覺那就說明短接的兩根是同一相!另外的兩根自然就是另一相。
以上就是關于"[步進電機控制器]stm32F4定時器中斷 + 步進電機控制器 控制四線兩相步進電機"的詳細介紹了,更多內容關注博智達直線電機官網其他資訊!