手把手教你STM32加SimpleFOC實現雙電機驅動
0前言
最近再做一個從零製作自穩雲臺的系列教程,第一步就是要搞定無刷電機驅動,我選擇了開源的SimpleFOC,但是網上的教程大多是在Arduino UNO上實現的,考慮到整個自穩雲臺的運算效能和介面需求,我決定在STM32實現SimpleFOC,在實現中遇到了很多坑,也借鑑了網上幾位大神的方法,最終在我設計的雙路無刷電機驅動板(下圖所示)上實現了功能,在此把我積累的經驗分享給大家,希望能幫助更多的同學少走彎路。
1配置安裝環境
首先安裝simplefoc庫,我這裡用的是2。1。0版本,本教程也是針對這個版本來寫的,使用其他版本可能會出現不同的問題。
要想透過Arduino IDE給STM32晶片編譯程式,我們需要下載Arduino_STM32,
https://
github。com/rogerclarkme
lbourne
下載完成後解壓,修改檔名為Arduino_STM32,複製到Arduino IDE安裝目錄/hardware資料夾下
此時再重新開啟Arduino IDE軟體,我們就可以選擇STM32F103C系列晶片了
下載方式我使用的是STLink,這種下載器可以輕易買到,也不貴
最後一步,我們安裝編譯器,在安裝管理器搜尋SAM安裝即可,我這裡使用的1。6。12版本
2測試Arduino IDE給STM32下載程式
配置完環境之後我們需要先用開發板測試一下有沒有問題,這裡我們使用最簡單的點亮LED來測試,開啟示例程式碼後根據我們手裡開發板的實際情況選擇引腳
提示:程式碼中畫紅線處為以前的程式碼,紅框內為新修改的程式碼,下同
如果程式燒錄成功並且STM32開發板上的LED開始閃爍,說明我們之前的工作全部成功,接下來可以開始進行simplefoc部分的工作了
3透過I2C讀取磁編碼器角度
我們首先透過I2C來讀取角度,測試磁編碼器與STM32通訊的情況,此時將I2C與PB6和PB7相連
然後執行示例程式並編譯
編譯之後出現了第一個錯誤,這時候我們開啟路徑C:\Users\lenovo\Documents\Arduino\libraries\Simple_FOC\src\sensors下的MagneticSensorI2C。h檔案進行修改,再編譯就可以通過了,然後就可以讀取到磁編碼器角度值了。
4單電機閉環控制
在進行單電機閉環控制時我們就需要用到simplefoc提供的驅動板了,連線方式如圖。
提示:如果只按圖連線四條線是不能成功的,當時我浪費了一天時間也沒有想清楚為什麼電機不轉,後來才發現沒有共地。。。。。
首先我們開啟路徑C:\Users\lenovo\Documents\Arduino\libraries\Simple_FOC\src\drivers\hardware_specific下的generic_mcu。cpp檔案進行修改,共兩處修改
然後開啟示例程式碼進行修改
編譯透過之後就可以直接透過串列埠監視器控制電機轉速了
5雙電機閉環控制
雙電機控制與單電機大同小異,大家按下圖接線
然後我們還需要對路徑C:\Users\lenovo\Documents\Arduino\libraries\Simple_FOC\src\drivers\hardware_specific下的generic_mcu。cpp檔案進行進一步修改
最後大家按我提供的示例程式碼編譯執行就可以實現雙電機閉環控制了
6總結
以上就是我將SimpleFOC一直到STM32的全部過程,在實際使用中我設計了一塊以stm32f103vet6為核心的雙路電機驅動板,在接下來的雲臺製作中我會直接用它作為主控制電路。希望以上內容能夠幫助到你
上一篇:SolidWorks模版的建立
下一篇:忠於睡感之福氣多玉石床評測