最近在學習AM32電調的2.18版本的源碼,我用的硬件是AT32F421,整理了部分流程處理,內容的顆粒度是按自己的需要整理的,發出來給有需要的人參考。按自己的理解整理的,技術能力有限,可能理解有誤,歡迎糾正。
?
注:lida2003博主是個大牛。寫的無刷電調的理論和AM32相關知識點介紹的比較系統,介紹的很詳細,有需要的同學可以去參考。我對電調這塊是外行,只是剛入門學習。這里重點是代碼理解的整理分析,他哪里寫了很多原理性的知識。
https://blog.csdn.net/lida2003/category_12753961.html?spm=1001.2014.3001.5482
? ? ? ? 這是第六篇,前面分析的部分已經覆蓋了電調控制的大部分路徑,接下來是剩余代碼的理解。簡單介紹main.c文件函數的作用,部分函數前面的文章介紹,這里是個總結整理,為后面穿起來理解運行做準備。
1、doPidCalculations
pid計算函數,用于恒速、失速、限流的PID計算
2、loadEEpromSettings
配置參數讀取換算。早期版本參數是一個一個賦值的,使用聯合體數據結構,這只需要換算的處理了。個人認為這個函數挺重要,配置不同參數,是為了適應不同的應用場景,每個參數的作用是啥?對電調的運行理解有很大幫助。
3、saveEEpromSettings
保存配置參數
4、getSmoothedCurrent
計算平滑的電流值,這個算法可以減少計算量而且電流是最近100次的平均值
5、getBemfState
獲取反電動勢狀態
6、commutate
相位計算、上下沿計算、同步檢查標志位處理、換相、比較器管腳切換、比較器功率切換、比較器上下延中斷切換
7、PeriodElapsedCallback
定時回調函數,檢測到過零點后等待waitTime換相
8、interruptRoutine
比較器中斷處理。
剔除無效過零點
main函數卡死判斷保護
連續讀取比較器輸出符合預期filter_level次則判斷為過零點
連續讀取正確次數不符合預期,不是過零點,跳過
關閉比較器中斷
更新本次換相時間
換相時間計數器清零
設置換相定時器等待時間并且使能定時器
9、startMotor
執行一次換相,設置平均換相時間,然后切換為運轉狀態
10、setInput
根據newinput應用油門數據
11、tenKhzRoutine
20khz 定時任務函數。
油門置低解鎖
串口上報標志
啟動階段反電動勢判斷換相
PID調速
加速度處理
adjusted_duty_cycle生效
油門超時計數
12、processDshot
計算dshot,調用setInput生效油門數據
13、advanceincrement
正弦驅動3個相位duty值計算
14、zcfoundroutine
找到過零點例程,電機轉動后才能在比較器的輸出波形判斷出過零點,所以這個函數的作用是找到過零點后推一下,為下次找過零點
15、runBrushedLoop
包含特定于有刷電機的循環
16、checkDeviceInfo
Uboot的尾部預留信息,用于指示配置參數信息存儲位置,APP根據這個信息確認配置信息地址