近日寫了一篇關于直流電機正反轉反饋控制的小文章。從硬件設計到軟件設計到實際驗證。花了很多心血,感覺論壇氛圍還不錯打算放出來。大概內容寫的是利用STM32的編碼器模式實現了簡易的反饋調節。由于用到了從其他CSDN博主里的代碼,具體有哪些人不太記得了,沒法一一聯系授權,所以就不把源碼放出來以教程的形式呈現出來,記得的參考文章以參考文獻的形式列了出來。詳細請看PDF文件(如果不想下,不介意沒有圖片可以直接看)
/********************************分割線*************************************/
2021 年5 月31 日
直流電機正反轉反饋控制
摘 要: 直流電機有著廣泛的應用,大到農業機械化、工業、自動化行業,小到各類家具、自動控制裝置都能見到它的身影。本文將采用STM32進行直流電機的控制研究,并進一步利用STM32的編碼器模式進行反饋控制,實現電機的定時正反轉以及速度控制,并加入簡易的反饋使電機具有更強的環境適應性。
一、問題回顧及簡要分析
本課題所要解決的問題在于,利用STM32實現直流電機的定時正反轉控制。為了使電機有更好的環境適應性,本文進一步提出了簡易的反饋控制,在電機轉動受到一定程度的阻礙時,會加大轉速,以模擬電機驅動的車輛在路面受阻時的加速越野功能。
若要使用單片機驅動直流電機,首先應該解決電源問題。目前,大多數單片機的電源為5V或3.3V,本課題采用的STM32電源為3.3V,所用直流電機額定電壓12V,并附帶額定電壓5V的磁感應霍爾編碼器,故考慮采用12V干電池驅動,并配合DC-DC芯片MP1584、LM1117_3.3獲取5V、3.3V電壓用于驅動編碼器和主控芯片。
同時,為了實現電機的正反轉定時控制及速度控制,本課題考慮采用STM32的定時器實現定時控制功能,并采用A4950單H橋芯片并對其輸入兩路PWM實現正反轉控制。
二、所用器件清單及簡介
本課題采用的器件有:STM32F103最小系統板*1、MP1584穩壓芯片*1、LM1117_3.3穩壓芯片*1、MG513P20_12V直流減速電機*1(帶霍爾編碼器)、A4950驅動芯片*1、SS34肖特基二極管*2、SI4435MOS管*1、LED發光二極管*1、機械開關*1、電容電阻電感若干、12V干電池*1。
STM32F103為意法半導體的中低端32位ARM微控制器,本文采用的CPU為STM32F103RCT6,具有高達72MHz的晶振頻率,256K的FLASH容量,8個定時器以及PWM輸出功能,其定時器具有編碼器模式實現編碼器輸出脈沖數的精確計算。
MP1584穩壓芯片可以實現12V轉5V穩定電壓輸出對編碼器供電,LM1117_3.3可以實現3.3V電壓穩定輸出以對主控芯片供電。
MG513P20直流電機帶有霍爾編碼器,霍爾編碼器線數為390ppr,線數代表了電機每轉動一圈編碼器輸出的脈沖數。
A4950驅動芯片是美國愛格羅公司生產的一款單H橋電擊驅動芯片,可驅動8-40V的電機,最大輸出電流3.5A。本課題用此芯片實現利用主控芯片的PWM輸出控制直流電機正反轉以及轉速控制的作用。
其余二極管、MOS管、發光管以及電阻電感電容用于組成經典電路并實現電路的保護及電源提示的功能,在此不予贅述。
三、硬件系統設計
直流電機控制的硬件設計如下:
圖3.1 直流電機控制硬件設計
電源模塊經兩級降壓得到5V、3.3V電源后驅動主控芯片及直流電機,主控芯片通過定時器控制PWM輸出實現對電機的正反轉指定轉速控制,直流電機工作時利用霍爾編碼器通過脈沖形式反饋當前轉速到主控芯片。
3.1 電源模塊
結合兩塊穩壓芯片的參考手冊附帶的經典電路[1][2],本課題提出了下述電源系統設計:
如圖3.2為電源系統部分的設計。電源系統采用了兩級降壓的方式分出5V、3.3V為系統常用硬件部分供電。使用時,于J1處插入12V干電池,K1閉合后,MOS管導通MP1584開始工作,5V電壓由SW端輸出,為了避免電壓輸出的尖峰脈沖,D11應盡可能靠近SW引腳。LM1117_3.3輸出3.3V電壓為主控芯片供電。此時,LD2被點亮,表示電源已接通。
3.2 直流電機驅動
直流電機部分,本課題采用了單H橋的A4950芯片驅動電機。根據芯片手冊的經典電路,本課題電機驅動部分設計如下:
圖3.3 電機驅動部分電路
其中,IN1、IN2為H橋邏輯輸入端,VREF為參考電壓,一般接5V,此處接6V。VBB為電機驅動電壓12V,J4處接直流電機。主控芯片對PB6、PB7進行PWM輸出,實現對電機的控制。
根據文獻[3],IN1、IN2邏輯控制表如下:
若不要求速度控制,IN1為1,IN2為0時,電機正轉;IN1為0,IN2為1時,電機反轉,此時電機處于全速工作狀態。進一步的,借助PWM可以實現對電機轉速的控制:
此時,電壓的平均值決定了電機轉速的大小,對應地,即PWM的占空比決定了電機的轉速大小,占空比越大,轉速越快。一般而言PWM頻率選擇5k-20kHz,本文以9kHz輸出為例。
在此,硬件系統實現了對編碼器、電機、主控芯片的供電,并提供了軟件控制電機正反轉的思路。
四、軟件系統設計
為了實現對直流電機的閉環控制,本文參考PID控制法的思路簡要設計了一種實時反饋的直流電機控制方法。將PA0、PA1接入電機編碼器的A、B相,利用STM32自帶的編碼器模式進行脈沖計數得出轉速。
在主函數中,芯片執行完初始化相關程序后于while(1)死循環中改變轉動方向。在轉速保持階段,利用串口向上位機發送轉速信息,此處的上位機為個人PC,通過可視化串口調試軟件Minibalance觀察轉速關于時間的波形,以便于進行相關參數的調節。
中斷程序方面,本文將TIM6作為10ms的中斷周期改變電機轉速。程序根據設定的轉速輸出相應的PWM值后,主控芯片根據編碼器反饋的差值計算出當前電機轉速,并與設定的轉速對比,實時調整PWM輸出值。
STM32定時器具有編碼器接口模式,是定時器的一種高級應用,其具體初始化配置見附錄及文獻[4],在此不予贅述,僅介紹其大致原理。在編碼器模式下,計數器依照增量編碼器的速度和方向被自動修改,計數器內容始終指示著編碼器的方向。其計數方向與編碼器信號的關系如下:
本程序將以在TI1、TI2上計數為例,該模式常被稱為編碼器模式3。霍夫編碼器在輸出時,AB相的脈沖相位差為90°,
根據表格可以計算出,編碼器每一個脈沖,編碼器計4個數。其向上向下的計數邏輯使編碼器計數對毛刺的抗干擾能力非常強:
給定上圖波形下,若某一相出現了毛刺,如第二個脈沖以后TI1處出現毛刺,此時TI2保持,可以認為此時電機處于停轉狀態,而編碼器的值基本不變,毛刺所引起的計數誤差最多僅為1。因此可以認為,STM32編碼器接口模式讀取的值相當可靠。
反饋控制方面,本文借鑒了PID控制法的思想,輸出的PWM值與當前誤差、歷史總誤差、當前誤差與上一次誤差的差值各乘以固定系數后得出。三個系數記為變量_p、_i、_d并參考文獻[5]、文獻[6]、文獻[7]所給出的方法進行調試得出。即先調_p觀察轉速輸出波形,使之在給定值的60%-70%間波動,然后適當給出_i值,所得波形有一個適度的上沖(約為給定值1/4)后迅速收斂。_d則可以適當給定,但不宜過大,否則波形容易出現高頻振蕩。
五、實際測試結果
經調試,所得的_p、_i、_d參數為9、1.1、0.1。
運行過程如圖5.1,圖5.2所示。圖5.1電機正轉,白色塑料滑片被滑到一側,圖5.2電機反轉,白色塑料滑片被滑到另一側。
圖5.1 電機正轉
圖5.2 電機反轉
使用Minibalance觀察編碼器計數計算后的轉速波形可以發現,輸出的波形為方波,最大最小值的絕對值基本一致,說明轉速比較穩定。脈寬基本一致,說明正反轉改變時間基本一致。
圖5.3 Minibalance輸出波形
六、總結
本文提出并驗證了一套切實可行的直流電機正反轉控制方案,并利用A4950芯片及STM32的PWM輸出實現了轉速可調。算法方面參考了PID算法的思路利用STM32的編碼器模式設計了簡易負反饋機制。使得該算法驅動的輪式車輛有更強的環境適應性。
參考文獻
[1] MP1584 數據手冊
[2] LM1117_3.3 數據手冊
[3] A4950 數據手冊
[4] STM32F10XX 參考手冊
[5] PID調節經驗 - zyboy2000 - CSDN
https://blog.csdn.net/zyboy2000/article/details/9418257
[6] PID調參過程詳解(包括增量式和位移式)- MrT_WANG- CSDN
https://blog.csdn.net/wangweijun ... 9770?utm_source=app
[7] 基于直流電機調速平臺的PID參數整定心得 – JOY_Tech - CSDN
https://blog.csdn.net/Tech_JOY/a ... 3116?utm_source=app
/*****************************************************************************/
以上圖文下載(不含代碼):
直流電機反饋控制 - 副本.pdf
(734.79 KB, 下載次數: 26)
2021-6-20 20:55 上傳
點擊文件名下載附件
文章下載點擊此處,未經允許嚴禁倒賣復制轉載 下載積分: 黑幣 -5
|