从零开始给平衡车刷FOC固件:4步完成hoverboard-firmware-hack-FOC刷写实战教程
【免费下载链接】hoverboard-firmware-hack-FOCWith Field Oriented Control (FOC)项目地址: https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC
刚买的平衡车一通电就嗡嗡响,起步一顿一顿的,骑起来跟抱着台电动剃须刀似的?先别怀疑车坏了。这种噪音和震动的根源,往往不是硬件老化,而是原厂固件还在用最粗糙的换相控制。hoverboard-firmware-hack-FOC 就是冲着这个问题来的开源固件,它把电机控制升级成磁场定向控制(FOC)。读完这篇教程,你可以亲手完成从接线、解锁到刷写的全过程,让轮子真正"听话"。
从换相到FOC:这套平衡车FOC固件能带来什么
先说结论:刷完之后,同样的硬件,骑行质感会明显不一样。
打个比方,原厂的换相控制像老式三档变速箱,靠"咔咔"换挡推着转子走,换挡瞬间就是你听到的噪音和顿挫;而 FOC 更像自动挡的无级变速,实时调节三相电流的大小和方向,让磁场始终"咬"住转子,换挡动作彻底消失。
刷上 FOC 固件,你能拿到 4 个实打实的好处:
- 噪音和震动明显下降,起步不再一冲一冲
- 扭矩输出平滑,电机效率提升,同电量跑得更远
- 支持弱磁控制(Field Weakening),不加大电流也能抬高极速上限
- 控制方式由 Inc/config.h 里的 CTRL_TYP_SEL 参数决定,FOC、正弦、换相三种随时可切
图1:国外玩家基于这套固件改的 hovercar 卡丁车,刹车油门各占一个踏板,双击刹车挂倒挡——都建立在 FOC 之上。
图2:拆开平衡车轮子能看到三相绕组和转子,FOC 要控制的就是这套绕组里的电流方向与大小。
刷写FOC固件前的工具准备:4样必备加1样替代
开工前把东西摆齐,全程只需要 4 样必备件,外加 1 样可以二选一的替代工具:
- 必备:一台能正常开机的平衡车,主板为 STM32F103RCT6 或兼容的 GD32F103RCT6 均可
- 必备:ST-Link V2 编程器 + 4 根杜邦线
- 必备:一台电脑,装好 STM32 ST-Link Utility(或者用 openocd 替代,功能等价)和任意串口助手
- 必备:一份编译好的固件文件——克隆仓库后本地编译最省事:
git clone https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC编译有三条路,挑一条你顺手的:PlatformIO 一键编译(最推荐)、仓库自带的 MDK-ARM/ 工程(Keil 用户)、或者根目录的 Makefile(命令行党)。
刷之前还要定一个"玩法变体",它决定电机听谁的指令:VARIANT_USART 适合接 Arduino 二次开发,VARIANT_PPM / VARIANT_PWM / VARIANT_IBUS 适配航模遥控器,VARIANT_HOVERCAR 和 VARIANT_SKATEBOARD 分别对应踏板卡丁车和遥控滑板。变体在 platformio.ini 里取消注释对应那一行即可,一次只留一个。
图3:主板引脚分布图,SWD 编程口(PA13/PA14)和左右两根侧板线的位置都标得清清楚楚,接线前先看这张图。
SWD接线、解锁读保护、烧录固件:分3个阶段完成首刷
整个刷机流程压缩成 3 个阶段,每个阶段动作都不多,但顺序不能乱。
阶段一:断电接好SWD四根线
要点:先断电池,再对照引脚图接线。断电后找到主板上的 SWD 编程接口,把 ST-Link 与主板一一对应:SWCLK 接 PA13,SWDIO 接 PA14,GND 接 GND,3.3V 按需连接。
⚠️ 避坑:接线前务必先断开电池电源。正确动作是:拔掉或断开电池开关,对照图3确认线序,每根线接前先比划两遍再落下。带电插线轻则芯片锁死,重则直接烧板。
阶段二:两步解除读保护
要点:看到"Can not read memory"别慌,那是芯片在正常"挡门"。绝大多数原厂主板出厂就开了读保护(Read Out Protection),ST-Link Utility 连上后读内存会被拒绝。在 Target → Option Bytes 里把 Read Out Protection 降到 Level 0,再对芯片做一次整片擦除,门就开了。
图4:ST-Link Utility 弹出 "Can not read memory" 警告,出现这行字说明离解锁只差一步。
⚠️ 避坑:擦除会清掉板内所有数据,包括原厂固件。正确动作是:确认你已经拿到可刷的 FOC 固件文件再动手,别指望刷坏了还能"恢复出厂"。
阶段三:烧录固件并等待校验通过
要点:起始地址保持 0x08000000,等"Verification OK"才算完。解锁擦除完成后点 Program & Verify,选中编译好的固件文件,地址不用改,点 Start。等日志刷完、屏幕上出现 "Verification OK",首刷就完成了。
⚠️ 避坑:烧之前先核对固件文件和你的变体(VARIANT)是否一致,别刷了 HOVERCAR 版却拿遥控器当踏板用。正确动作是:对照 platformio.ini 里你取消注释的那一行,确认手里的固件就是这个变体编译出来的。
刷完FOC固件怎么验证和进阶:先验证,再挑方向
验证很简单:给车通电,短按电源键开机,用手转动电机——FOC 模式下你会感到一股均匀、持续的阻力,这就是"锁定"效果;接着用遥控器或串口发一条速度指令,车轮应平滑跟随转动,没有换相时的"咔哒"顿挫。验证通过后,有 3 个进阶方向可以挑:
- 串口在线调参。启用 DEBUG_SERIAL_PROTOCOL 后,用 115200 波特率连上串口,GET 查看参数、SET 修改、SAVE 写入 EEPROM。感觉响应太冲就调低 RATE、调大 FILTER 让输出柔和;守安全底线就把 I_MOT_MAX(单电机最大电流)和 N_MOT_MAX(最高转速)限制在合理范围。
- 弱磁冲极速。config.h 里 FIELD_WEAK_ENA 默认是关的,打开后由 FIELD_WEAK_LO / FIELD_WEAK_HI 两个点决定弱磁从哪开始、到哪拉满,不加大电流就能把极速再顶一截。
图5:弱磁/提前角的几种典型校准曲线,LO 是起点、HI 是拉满点,调参时对照这张图理解参数含义。
- 换控制变体造新玩法。切到 VARIANT_HOVERCAR 就是踏板卡丁车,油门刹车各一踏板、双击刹车倒车;想拿航模遥控器玩就选 VARIANT_PPM / VARIANT_PWM,摇杆上能直接切换 FOC/正弦/换相三种控制类型;想代码级开发,仓库自带 Arduino/hoverserial 例程,协议带帧头、校验和与重同步,接块 Arduino Nano 就能发指令并实时读回转速、电压与板温,做机器人底盘刚刚好。
图6:Flysky 遥控器的通道配置示意:CH1 转向、CH2 速度,摇杆开关可切控制类型与弱磁开关——这是 VARIANT_PPM/PWM 玩法的参考接法。
常见翻车点:3个高频故障的排查路径
- 现象:ST-Link Utility 弹出 "Can not read memory"。原因:原厂芯片开启了读保护,软件被拒之门外。解法:Option Bytes 里把 Read Out Protection 降到 Level 0,整片擦除后再读,正常能扫出 32K 字节的 Flash。
- 现象:电机能转但方向反了,左右轮对调后好转。原因:固件默认的电机相序与你的实物绕组接法不一致。解法:在 Inc/config.h 里交换任一电机的两个相序宏重新编译刷写,只换一对,换两对等于没换。
- 现象:刷完能开机,但遥控器/串口指令完全没反应。原因:要么变体选错,要么信号线接错路——左边侧板线(USART2)不耐 5V 电平,接错来源会收不到正确信号。解法:确认变体与输入源匹配,串口调试优先用右侧(USART3)5V 容忍的线,并把波特率设成 115200 再试。
从"嫌车吵"到"车听话",一共四步:备齐工具、接线解锁、烧录固件、调参验证。车就在那儿嗡嗡等着,动手吧 🚀
【免费下载链接】hoverboard-firmware-hack-FOCWith Field Oriented Control (FOC)项目地址: https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考