MC SDK 5.x中增加位置環 前言 在MC SDK 5.x中有兩個環路控制,分別是電流環和速度環,有些應用需要使用到位置環,比如無人機的云臺電機控制,地鐵閘機等等應用,本文將闡述如何在現有ST電機庫基礎上增加簡易的位置環。 01理論基礎 以表貼電機為例,一般的FOC電機控制是兩環控制,速度環+電流環的控制方式,速度環為外環,電流環為內環, Idref = 0(d軸電流參考為0)的控制為常見控制;參考速度環輸出參考轉矩后供后端電流環路; 如果增加位置環最簡單和直接的方式即為將速度環換為位置環,即變為位置環+電流環的方式: file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml25364\wps26.pngfile:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml25364\wps27.png 如果在有減速齒輪電機上,需要加入速度環以便更快速的到達給定位置,也就是三環控制:位置環+速度環+電流環,框圖如下: file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml25364\wps28.png 為了方便控制,以及考慮精度問題,角度單位為rad*10000,比如電機轉動10圈,也就是10圈后的位置,則該位置的設定角度為: file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml25364\wps29.png 位置環采用的是線性系數乘以系數直接輸出到速度的參考: 當前位置的角度數字量計算如下: file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml25364\wps30.png 02位置環控制改進 在三環控制中,不可避免的會涉及到加速度的計算,正?刂七^程為:加速→勻速→減速→定位過程 那么會涉及到加速度以及定位階段的控制,這邊我們可以按照加速度與速度差成反比,而定位階段可以直接設定速度為0,但 是實際使用過程中我們會發現直接直接的速度模式在定位階段力量有限,方法一:PID 需要特別設定,更能夠定位到給定位 置,方法二:拋開速度環,直接力矩控制,實際控制框圖如下: 03具體操作步驟 3.1創建編碼器可以正常運行的工程 首先要建立可以正常運行的位置傳感器為編碼器(ENCODER)的電機工程,本文所使用的是NUCLEO-F303RE(控制板) + IHM07M1(功率板) + Shinano LA052-080E3NL1(電機) file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml25364\wps31.png 3.2生成工程并調試運行 產生編碼器工程并且保證電機正常運行,為后續動作做準備,同時配置DAC的兩路User數據輸出 3.3增加以下變量或函數用于位置環控制 1) 位置環PID結構體PID_Handle_t PIDAngleHandle_M1 2) 位置控制的結構體Position_Handle_t 3) 位置角度誤差Position_GetErrorAngle 4) 位置環速度參考輸出計算Position_CalcSpeedReferrence 5) 位置環力矩參考輸出計算Position_CalcTorqueReferrence 具體參考mc_position.h以及mc_position.c 3.4 mc_task.c文件修改 3.4.1增加頭文件 mc_task.c中包含頭文件 file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml25364\wps32.jpg 3.4.2初始化位置環PID參數 MCboot()函數中增加角度PID初始化函數 file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml25364\wps33.jpg 3.4.3定位后初始測量角度清零 file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml25364\wps34.jpg 3.4.4增加DAC輸出測試程序 函數TSK_HighFrequencyTask()中增加用戶DAC輸出信號更新數據,將目標角度(位置)以及測量角度(位置)通過DAC輸出到示波器 file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml25364\wps35.jpg file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml25364\wps36.jpg 3.4.5增加位置控制程序 在mc_task.c的中頻任務函數TSK_MediumFrequencyTaskM1中增加位置環差值數據計算,根據差值計算,當差值在閾值之上的話進行速度控制,否則則進行力矩控制,在RUN下調用下面代碼: (滑動圖片瀏覽,點擊圖片放大查看) file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml25364\wps37.jpg file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml25364\wps38.jpgfile:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml25364\wps39.jpg 3.4.6修改參考電流計算 如果差值縮小到一定范圍內,則進行力矩控制,在函數FOC_CalcCurrRef中進行調用 file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml25364\wps40.jpg 3.5電機累計圈數計算 stm32f30x_mc_it.c文件的 SPD_TIM_M1_IRQHandler函數中增加編碼器位置累加程序用于計算電機轉動的圈數,用于多圈馬達轉動控制; file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml25364\wps41.jpgfile:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml25364\wps42.jpg 04增加測試代碼 在main函數中while(1)中增加測試代碼,我們先用0—90度電機一圈內的轉動來測定角度控制PID file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml25364\wps43.jpg 05測定角度PID參數 可以使用DAC將參考電角度和實際電角度輸出,觀察角度的變化,調節位置環的PID參數,從而達到快速準確的位置定位;定位實現后可以手動炫動電機,看到電機依然可以正;貧w到給定位置。數據輸出范圍限制,可以使用0到90度來回位置變動來測試; 下面幾張圖是調整不同位置PI參數得到的不同運行結果,同樣是由0度角變動為90度角的過程; Kp = 10000/4096, Ki = 0/32768, 波形震蕩狀態 file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml25364\wps44.jpg Kp = 100/4096, Ki = 0/32768,實際電機位置明顯滯后 file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml25364\wps45.jpg Kp = 3000/4096, Ki = 2/32768,波形震蕩后收斂 file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml25364\wps46.jpg Kp = 3000/4096, Ki = 10/32768,基本上當前負載下基本穩定 file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml25364\wps47.jpg 06必要時增加微分項調節 如果需要快速調節,需要增加微分項,也就是PID調節,庫中的微分項默認是屏蔽的,因此,需要修改pid_regulator.c中的代碼,打開PID函數,如下圖: file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml25364\wps48.jpg 07電機轉動多圈位置環測試 將位置設定為0—50*360度(電機轉動50圈)的位置變動 file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml25364\wps49.jpg 實際運行效果 位置偏差較大時,電機加速到最大速度,偏差小時將進入力矩控制模式,直到目標位置,在目標位置直接力矩鎖定。 設定位置角度值在0ß→3141600 (電機轉動50圈) 實際速度與參考速度曲線 file:///C:\Users\Administrator.WIN-STED6B9V5UI\AppData\Local\Temp\ksohtml25364\wps50.jpg 08擴展說明 1. 本文中使用的是相對位置編碼器,如果實際過程中所使用的是絕對位置編碼器,則需要增加讀取絕對位置編碼器的程序; 2. 如果是線性位置運動,則位置參量需要修改為角度所對應的線性位置,從而進行有效運算; 3. 對于PID調節部分本文只是根據實際波形DAC輸出進行調整,理論以及有賴于后期研究; 4. 三環控制環路,兩兩環路調整比較好些,調好后再進行三環測試。 5. 本文的位置輸出到速度的Kp值沒細致考量,這個部分可根據實際應用自行調整。 |