SimpleFOC的教學比較多,總連結方便查詢閱讀:SimpleFOC教學連結匯總
雙電機控制,主要是在上一章程式碼的基礎上(SimpleFOC移植STM32(五)—— 電流取樣及其變換),把一個電機的控制修改了對兩個電機的控制。你的第一感覺會怎麼做,把程式碼複製一遍,一個電機變兩個電機,這樣程式碼量就太大了。SimpleFOC的官方程式碼採用C++編寫,定義了類,C語言中的結構體與類相似,通過結構體及其指標的應用,程式碼同樣可以達到高效強悍的效果。
新建標頭檔案 user.h ,定義電機的結構體,並宣告M1,M2。下圖
在 main.c 中呼叫標頭檔案,下圖
程式碼結構與單個電機控制沒有變化,下圖
編譯後的程式碼稍微比單個電機控制大一點,下圖
本章的工作,主要是從上到下從裡到外,逐一修改函數,增加結構體指標,下圖
序號 | 名稱 | 數量 |
---|---|---|
1 | SimpleMotor | 1 |
2 | 帶編碼器雲臺電機 | 2 |
3 | USB轉串列埠 | 1 |
4 | 12V電源 | 1 |
當前程式碼支援AS5600、AS5047P、TLE5012B和MA730編碼器。
AS5600電機 購買連結:某寶購買
TLE5012B電機 購買連結:某寶購買
SimpleMotor 購買連結:某寶購買
部分PID引數設定放在了main函數中,設定其它PID引數請進入PID_init()函數。
可以串列埠下載或者SWDIO下載;
如果是串列埠下載,Boot加上跳線帽,下載完畢後拿掉跳線帽,按復位鍵重新啟動或者斷電重新啟動。
注意:復位重新啟動只能重新啟動微控制器,編碼器沒有重新啟動,如果I2C介面編碼器不能正確讀出,請斷電重新啟動。SPI介面編碼器不受此影響。
兩個電機的引數和控制完全獨立,可設定為不同的控制模式,具體操作請看之前的教學,此處不再贅述。
雙電機控制在操作和控制技術上與之前保持一致,主要是結構體及其指標的應用;
當前程式碼理論上很容易擴充套件為三個電機、四個電機或者更多電機的控制,只要微控制器有足夠資源;
結構體(structure)再往前一步就是類(class),C和C++的區別主要是程式設計思維的區別,結構體已經是C語言在微控制器程式設計中的極限了。
把兩個電機的角度差做為力矩模式的目標值,使角度差趨向於0。當一個電機轉動時,另一個電機因為角度差而產生力矩跟隨轉動;同樣當一個電機堵轉時,另一個電機也會因為角度差趨向於堵轉電機的角度。
程式碼是比較簡單的,在雙電機控制偵錯通過的情況下,只需要加入角度差計算就可以。
力矩反饋要實現以下目標:
1、兩個電機一個轉動,另一個跟隨,停止轉動,另一個也停止,能夠自穩。
2、拆掉一個電機,只接入任一個電機能夠自穩。
先以相同的兩個電機為例
程式碼簡單,但是偵錯頗費功夫,讓我想起了空調行業的一句諺語「三分裝置,七分安裝」,具體過程原因就不多說了,直接說結果。
如上圖相同的兩個電機,首先三相線不能接的一樣,要讓一個電機為CW另一個CCW,然後根據檢測到的方向,調整程式碼中減數和被減數的位置。
同樣,不同型號的電機也可以按照上面的方法偵錯,
偵錯的結果一定要符合以下兩個目標:
1、兩個電機一個轉動,另一個跟隨,停止轉動,另一個也停止,能夠自穩。
2、拆掉一個電機,只接入任一個電機能夠自穩。
(完)
本節原始碼不再提供免費下載。
請繼續閱讀相關文章:
SimpleFOC移植STM32(一)—— 簡介
SimpleFOC移植STM32(二)—— 開環控制
SimpleFOC移植STM32(三)—— 角度讀取
SimpleFOC移植STM32(四)—— 閉環控制
SimpleFOC移植STM32(五)—— 電流取樣及其變換