手頭上有乙個差分驅動的小車,使用兩個直流電機驅動,要實現小車的在給定速度下運動,完成直線行駛,轉向,加速,剎車等複雜運動。
使用的電機是12v供電的直流電機,帶編碼器反饋,這樣就可以採用閉環速度控制,這裡電機使用pwm驅動,速度控制框圖如下:
由以上框圖可知,stm32通過定時器模組輸出pwm波來控制兩個直流電機的轉動,通過改變pwm占空比的大小可以改變電機的轉速,由於我們的控制目標是實現電機執行在速度範圍內任意給定的速度,這裡就需要採用閉環控制的思想,通過編碼器獲取電機的實時轉速,通過與給定速度做差,將偏差作為pid控制器的輸入,通過pid控制改變pwm占空比的大小,從而使電機的速度執行在給定的速度上。
這裡使用的電機驅動晶元為tb6612,該晶元可以十分方便的驅動兩個直流電機的執行,其驅動邏輯表如下:
ain1,ain2的不同組合可以實現電機的正反轉和停車,pwma為pwm的輸入引腳,通過輸入不同的占空比可以改變電機轉速的快慢。bin1,bin2,pwmb是控制另一路電機的引腳。
首先我們需要利用stm32的定時器模組輸出兩路pwm波,這是使電機轉起來的第一步。初始化pwm:
//然後初始化電機控制引腳,程式如下:初始化pwm引腳
void motorpwmpin_init(void)
//初始化pwm
void motorpwm_init(void
)
//需要注意的是設定pwm輸出引腳時要講引腳復用到定時器tim1,而電機控制引腳只需要設定成簡單的推挽輸出模式即可。初始化電機控制引腳
void motorctrlpin_init(void
)
接著我們需要使用兩個定時器的編碼器功能用於讀取電機的實時轉動速度,這裡我使用的是定時器3和定時器4.
這裡的編碼器是精度較低的霍爾感應式編碼器,但是基本滿足控制精度的要求,驅動**如下:
void encodera_init(void(stm32直流電機驅動))
(stm32 usart串列埠應用)
pwm脈寬調變技術
stm32電機控制之控制兩路直流電機!看完你會了嗎
小車使用的電機是12v供電的直流電機,帶編碼器反饋,這樣就可以採用閉環速度控制,這裡電機使用pwm驅動,速度控制框圖如下 由以上框圖可知,stm32通過定時器模組輸出pwm波來控制兩個直流電機的轉動,通過改變pwm占空比的大小可以改變電機的轉速,由於我們的控制目標是實現電機執行在速度範圍內任意給定的...
stm32控制電機
使用埠gpioa來連線電機,所以給gpioa程式設計就可以控制電機。使用系統時鐘systick來週期性的給電機傳送脈衝。用四個按鈕來控制需要傳送脈衝的個數,每個按鈕被按下就設定給電機傳送脈衝的個數,如果上一次給電機傳送的脈衝沒有傳送完成,這次按鈕傳送的脈衝將不被響應。由於需要控制兩個電機,所以將gp...
STM32 電機PWM控制
2.1.1 實現工具 stm32微控制器 直流減速電機 tb6612雙路電機驅動器 keil5 2.1.2 電機實物接線 具體到我們的電機,我們可以看看電機後面的 中間的四根線 紅綠白黑 是編碼器的線,只是用於測速,和直流電機本身沒有聯絡。綜上所述,我們只需控制施加在黃線和棕色線兩端的直流電壓大小和...