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