stm32F4 定時器中斷 + 步進電機控制器 控制四線兩相步進電機 (初級版本)

今天給大家分享一個 初級版本的步進電機的控制方法,用到的步進電機是4線兩相的42步進電機   如下圖:

步進電機驅動選用的是這款   TB6600

供電選用了12V的穩壓電源  最小系統板供電是從Jlink上直接引出

MCU是  stm32F407ZGT6 最小系統板 

根據步進電機控制器的資料可以知道 步進電機的速度和轉過的角度都是通過 PUL + 和PUL- 來控制的

(這裏插一段關於步進電機驅動上的六個控制接線端子的使用,將其中的四個+   或者是四根 - 接在一起做成共陽接法或者共陰接法,如果 電平是3.3V 或者 5V 可以不串接電阻 ,如果電壓大於5V 需要在每一根線上串接相應阻值的電阻)

這裏我選擇的是共陽接法 也就是將所有的正極接線接到了一起

EN -引腳懸空 (我的程序裏面暫時沒有用到, 實際使用需要讀者自行考慮)

DIR-  接單片機 PE12口

PUL- 接單片機 PE13口

接下來 就說一下我程序的基本思路:

要想控制步進電機  我們一般是控制兩個東西:1是轉過的角度值(位置)2是速度(爲了防止丟步和平穩的啓動機器 預防啓動極限和轉子振盪 我們的速度不能變化太快)

歸結到程序上也就是我們需要控制PE13 IO口輸出一定的方波信號 。 這個信號一方面有數量的限定,另一方面這個信號的頻率不能是一個固定的數值(除非你的控制對時間沒有要求,可以允許設備一直以一個較低的速度運行),這裏我們選用了定時器 中斷作爲脈衝的時間基準 ,在定時器的中斷函數裏面我們對IO口的電平進行翻轉一次獲得一個方波的邊緣(一半的方波) 通過對中斷次數的統計我們可以實現對位置的控制(理想情況下),另一個需求就是控制速度,我的解決方案是控制中斷的頻率 以此來實現控制方波的頻率,具體的操作就是修改 定時器的預分頻器 PSC ,通過改變最終進入定時器CNT的脈衝頻率來實現修改定時頻率的目的(這裏用到的是定時器的更新中斷)

以上是初始化代碼 ,需要注意的請看備註 , 這份代碼我會上傳到CSDN  需要的朋友可以自行下載 也可以私信我

主要是一個定時器的初始化以及中斷的配置、兩個通用IO的初始化 

以上是中斷函數部分  通過這噶函數我們可以實現對運行狀態的粗略控制: 我們可以控制脈衝的數量,進而控制步進電機轉過的角度。 我們可以控制定時器的中斷頻率,進而控制脈衝的頻率 以此實現對步進電機速度的控制。

說明: 此代碼只適合新手來看看,並不適用於實際生產!  步進電機的速度控制算法有比這個優秀很多的,這只是我初步寫的一個初級版本,後續會補上其他版本的步進電機控制方案。

 

另外有一點需要注意的就是步進電機的細分選擇: 我這邊選擇的是8細分 電流是根據電機特性選擇的1.5A  細分方面不建議細分太多,這樣會導致初級版本的程序頻繁的進入中斷函數,佔用的CPU時間可能會影響程序的運行效率。細分的如果太少也會導致一些其他問題,比如電機的噪音增大。電流大小會直接影響到電機的力矩,如果電流過小可能會導致大電機啓動不起來。電流過大則會導致小電機的發熱嚴重。 EN 引腳一般是控制釋放電機的 ,這裏有一個概念叫做 保持力矩,也就是步進電機再點擊驅動器的電流影響下會保持當前的位置難以轉動,這個力矩的大小是由電流決定的也就是保持力矩。

另外分享一個快速區分步進電機的兩根相線的方法: 將步進電機的任意兩條相線短接,轉動轉子,如果有卡頓的感覺  那就說明短接的兩根是同一相! 另外的兩根自然就是另一相。

圖片源自 淘寶, 侵刪。。。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章