出 FOC 電機(jī)控制)
hoverboard-firmware-hack-FOC 新手完整指南從燒錄固件到調(diào)出 FOC 電機(jī)控制【免費(fèi)下載鏈接】hoverboard-firmware-hack-FOCWith Field Oriented Control (FOC)項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOChoverboard-firmware-hack-FOC 用 FOCField Oriented Control即場定向控制一種按磁場方向精確驅(qū)動(dòng)無刷電機(jī)的算法替換平衡車原廠固件的換相控制降低噪音、提升效率還能通過弱磁控制提高極速。本文按一次完整刷機(jī)流程走一遍拆機(jī)、接 ST-Link、編譯、燒錄、調(diào)參、試跑并標(biāo)注每個(gè)環(huán)節(jié)的坑位。為什么要換原廠換相控制的天花板平衡車原廠固件用換相Commutation方式驅(qū)動(dòng)電機(jī)按霍爾傳感器給出的位置信號每隔 60 電角度切換一次通電相序。這種方式實(shí)現(xiàn)簡單但扭矩有周期性波動(dòng)表現(xiàn)為電機(jī)嗡嗡的噪音和抖動(dòng)感效率也不高。FOC 的思路不同它在數(shù)學(xué)上建立一個(gè)隨轉(zhuǎn)子旋轉(zhuǎn)的坐標(biāo)系把電流分解為產(chǎn)生扭矩的軸和產(chǎn)生磁場的軸通過高速 PWM 合成近似正弦的電流。帶來的實(shí)際好處噪音和振動(dòng)明顯降低扭矩輸出平滑電機(jī)效率提升同等速度下功耗更低支持弱磁控制Field Weakening即主動(dòng)抵消一部分電機(jī)反電動(dòng)勢突破電機(jī)原有轉(zhuǎn)速上限。固件默認(rèn)就是 FOC。在Inc/config.h里也可以切回其他方案三選一| 控制類型 | 宏定義 | 特點(diǎn) | | -- | -- | -- | | 換相 |COM_CTRL| 與原廠一致效率和平順性最差 | | 正弦 |SIN_CTRL| 介于兩者之間不支持弱磁閉環(huán) | | FOC |FOC_CTRL| 默認(rèn)支持弱磁、速度環(huán)和扭矩環(huán) |FOC 下的三種運(yùn)行模式電壓、速度、扭矩選定FOC_CTRL后還有一層模式選擇由CTRL_MOD_REQ參數(shù)決定默認(rèn)是VLT_MODEVOLTAGE MODEVLT_MODE給電機(jī)施加恒定電壓響應(yīng)快適合機(jī)器人或需要快速動(dòng)態(tài)的應(yīng)用SPEED MODESPD_MODE閉環(huán)控制PID 算法抵消負(fù)載擾動(dòng)讓電機(jī)穩(wěn)定在目標(biāo)轉(zhuǎn)速適合恒速場景TORQUE MODETRQ_MODE以扭矩為目標(biāo)值。把目標(biāo)設(shè)為 0 時(shí)電機(jī)空轉(zhuǎn)滑行適合有乘客上車的車輛。每種模式的能力差異可以從下表快速判斷源自 README.md 的對比表| 控制方式 | 效率 | 平順性 | 弱磁 | 滑行 | 靜止駐車 | | -- | -- | -- | -- | -- | -- | | Commutation | 一般 | 一般 | 不支持 | 不支持 | 支持 | | FOC VOLTAGE | 高 | 較好 | 支持 | 不支持 | 需手動(dòng)開啟 | | FOC SPEED | 高 | 一般 | 支持 | 不支持 | 支持 | | FOC TORQUE | 高 | 最好 | 支持 | 支持 | 需手動(dòng)開啟 |兩個(gè)可選項(xiàng)STANDSTILL_HOLD_ENABLE讓電壓/扭矩模式也能駐車ELECTRIC_BRAKE_ENABLE把扭矩模式的滑行換成可調(diào)的電機(jī)制動(dòng)。所有 FOC 模式下都內(nèi)置了最大轉(zhuǎn)速和最大電流保護(hù)。燒錄前的硬件檢查清單動(dòng)手之前把下面幾樣?xùn)|西核對一遍可以避免絕大多數(shù)翻車確認(rèn)主控芯片主流平衡車主控板使用 STM32F103RCT6少數(shù)板子是 GD32F103RCT6引腳兼容兩者都受支持。ST-Link 仿真器 杜邦線接主控板上的 SWDIO、SWCLK、GND、NRST 四個(gè)測試點(diǎn)。主控板引腳分布見下圖SWD 測試點(diǎn)在板邊位置。電池先拆掉拆機(jī)斷開電池后再操作避免短路。留意兩條 4 針傳感器線主控板原本靠兩條 4 針線連接左右副板破引出 GND、12/15V 和 USART2/USART3。右側(cè)短線USART3支持 5V 電平左側(cè)長線USART2不耐 5V外接 Arduino 等 5V 設(shè)備時(shí)務(wù)必走右側(cè)線或用 3.3V 設(shè)備。備查資料倉庫 docs/ 目錄里有逆向出的主控板原理圖 20150722_hoverboard_sch.pdf 和芯片手冊接錯(cuò)線之前先翻一翻。編譯與燒錄三種環(huán)境任選其一先把代碼拉到本地git clone https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC然后按自己順手的工具鏈走三條路產(chǎn)物相同都針對STM32F103RCPlatformIO最省事打開 platformio.ini在default_envs里取消你需要的 variant 的注釋比如VARIANT_HOVERCAR然后執(zhí)行pio run -t upload。調(diào)試串口波特率是 115200記得把monitor_port改成你系統(tǒng)的 COM 口。Keil MDK-ARM打開 MDK-ARM/mainboard-hack.uvprojx在 Target 下拉菜單選 variant編譯后用 On-Chip Debugger 燒錄。make ARM GCCLinux安裝arm-none-eabi-gcc工具鏈后make -e VARIANTVARIANT_HOVERBOARD # 編譯可選任意 variant make flash # st-flash 寫入 0x08000000 并復(fù)位 make unlock # openocd 解鎖芯片被鎖定時(shí)variant 決定了電機(jī)輸入信號從哪來編譯時(shí)只能選一個(gè)詳見下一節(jié)。調(diào)參config.h 里的關(guān)鍵數(shù)字編譯通過后真正決定騎感的參數(shù)在Inc/config.h和Src/BLDC_controller_data.c里。新手優(yōu)先關(guān)注這幾個(gè)| 參數(shù) | 默認(rèn)值 | 含義 | | -- | -- | -- | |I_MOT_MAX| 15 A | 單個(gè)電機(jī)的最大電流限制越大扭矩越強(qiáng)注意線路發(fā)熱 | |I_DC_MAX| 17 A | 母線電流兜底保護(hù)建議 I_MOT_MAX 2A | |N_MOT_MAX| 1000 rpm | 電機(jī)最大轉(zhuǎn)速限制 | |FIELD_WEAK_ENA| 0 | 弱磁總開關(guān)默認(rèn)關(guān)閉 |弱磁的調(diào)法把FIELD_WEAK_ENA設(shè)為 1 后FIELD_WEAK_LO到FIELD_WEAK_HI之間線性起效FIELD_WEAK_MAX是最大 D 軸電流作者用 10 寸輪實(shí)測到過 10A。不同標(biāo)定曲線如下圖所示?? 重新標(biāo)定弱磁時(shí)務(wù)必做好安全準(zhǔn)備電機(jī)可能轉(zhuǎn)得很快且功耗激增可能觸發(fā) BMS 過壓保護(hù)。調(diào)參建議在臺(tái)架輪子離地上進(jìn)行。電機(jī)級參數(shù)電感、極對數(shù)等以定點(diǎn)數(shù)形式存放在Src/BLDC_controller_data.c倉庫已提供標(biāo)定好的默認(rèn)值一般不需要?jiǎng)?。如果你的電機(jī)不是原廠規(guī)格需要參考 VESC 里的對應(yīng)參數(shù)逐項(xiàng)換算另外兩個(gè)容易忽略的校準(zhǔn)電池電壓BAT_CALIB_ADC/BAT_CALIB_REAL_VOLTAGE配多用電表實(shí)測值和芯片溫度傳感器TEMP_CAL_*未校準(zhǔn)前不要開啟TEMP_POWEROFF_ENABLE誤差可達(dá) 45°C。選一個(gè)輸入 variant你想怎么驅(qū)動(dòng)這臺(tái)車variant 在編譯期二選一或十選一直接決定輸入通道VARIANT_HOVERBOARD保留原廠雙副板輸入最接近刷個(gè)新固件繼續(xù)當(dāng)平衡車用的體驗(yàn)。注意平衡控制算法尚未實(shí)現(xiàn)目前只是換上了 FOC 電機(jī)驅(qū)動(dòng)。VARIANT_HOVERCAR雙踏板油門/剎車靜止時(shí)雙擊剎車可反轉(zhuǎn)適合改造 Hovercar見下方原理圖。VARIANT_USART串口協(xié)議控制倉庫自帶 Arduino 示例 Arduino/hoverserial/hoverserial.ino115200 波特率幀含起始幀和校驗(yàn)適合用單片機(jī)做上位機(jī)。VARIANT_ADC/VARIANT_NUNCHUK電位器或 Wii 搖桿控制適合輪椅、代步小車類項(xiàng)目。VARIANT_PPM/VARIANT_PWM/VARIANT_IBUS接收機(jī)信號輸入VARIANT_SKATEBOARD滑滑板用的就是右側(cè)線的 PWM。VARIANT_TRANSPOTTER面向 TranspOtter 類搬運(yùn)車的專門配置。常見坑位與試跑建議燒錄后電機(jī)立刻亂轉(zhuǎn)先別急著上電騎行。輪子架離地面緩慢給輸入確認(rèn)轉(zhuǎn)向與預(yù)期一致再試跑。串口無反饋先確認(rèn)走的是 USART3右側(cè)線左側(cè)線接 5V 設(shè)備可能直接燒引腳。make unlock才需要 openocd只有芯片被原廠固件鎖定時(shí)才執(zhí)行普通燒錄用make flash即可。variant 混編config.h里若手動(dòng)定義了 variant又通過-D傳入會(huì)沖突按編譯環(huán)境選一種方式定義。試跑通過之后建議按這個(gè)順序深入讀 Src/BLDC_controller.c看電流采樣和 FOC 閉環(huán)的 C 實(shí)現(xiàn)打開 Src/comms.c 對照hoverserial.ino理解串口幀格式方便接自己的上位機(jī)翻 docs/literature/ 里的 STM32 和 GD32 手冊解決引腳級問題。倉庫采用 GPLv3 協(xié)議見 LICENSE修改后自用或再分發(fā)都自由動(dòng)手前先把電池拆下來——這是全流程里最重要的一步?!久赓M(fèi)下載鏈接】hoverboard-firmware-hack-FOCWith Field Oriented Control (FOC)項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考