平衡车FOC固件刷写上手指引: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 固件后 |
|---|---|---|
| 骑行体验 | 噪声大、震动明显、起步发冲 | 安静顺滑,扭矩输出连续 |
| 效率 | "踢式"供电,能耗偏高 | 同功率下更省电,续航拉长 |
| 控制能力 | 仅换相一种模式 | 电压/速度/扭矩三种模式可选 |
| 速度上限 | 受换相逻辑限制 | 支持弱磁(Field Weakening)继续上探 |
图1:社区玩家用平衡车FOC固件改装的hovercar卡丁车,踏板控制油门与刹车
准备清单:硬件、电脑、软件三类备齐
硬件
- 一台能正常开机的平衡车(主板为 STM32F103RCT6 或兼容的 GD32F103 均可)
- ST-Link V2 编程器一个
- 杜邦线 4 根(接 SWD 用)
- 3.3V USB 转串口模块(调参调试用,可选)
电脑
- 一台 Windows 或 Linux 电脑
软件
- STM32 ST-Link Utility 或 openocd(解锁与烧录)
- 任意串口助手(115200 波特率)
- PlatformIO 编译环境(仓库也自带 MDK-ARM 工程与 Makefile,任选其一)
固件不需要到处找,克隆项目仓库后本地编译即可:
git clone https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC刷写主线:从接线到写入固件
第 1 步 | 接好 SWD 编程口
在主板边缘找到 SWD 测试点:PA13(SWCLK)与 PA14(SWDIO)。把 ST-Link 的 SWCLK 对 PA13、SWDIO 对 PA14、GND 对 GND、3.3V 对 3.3V 逐根接好。SWD 是芯片自带的标准编程通道,两根信号线加地线就够建立连接,这也是整条主线里唯一"动硬件"的一步。
⚠️ 接线前务必拔掉电池!另外主板两条侧板线里,左侧 USART2 不耐 5V,接串口调试优先用右侧线;任何情况下都别碰那根红色 15V 线。
图2:平衡车主板引脚分布图,SWD 编程口(PA13/PA14)与侧板线位置一目了然
第 2 步 | 选控制变体并编译固件
打开 platformio.ini,把目标变体设为default_envs(或在 Inc/config.h 中定义),然后执行编译:
pio run -e VARIANT_USART产物是.pio/build/下对应环境的.bin文件,下一步直接烧它。变体决定"谁来给车下指令":VARIANT_USART走串口(适合接 Arduino),VARIANT_PPM/VARIANT_PWM/VARIANT_IBUS接航模遥控器,VARIANT_HOVERCAR是踏板卡丁车。不确定的话先选VARIANT_USART,后面随时可换。
第 3 步 | 解锁主板读保护
打开 STM32 ST-Link Utility,Target → Connect Under Reset。多数原厂主板开了读保护,软件会弹出 "Can not read memory! Disable Read Out Protection and retry" 的警告——别慌,这是芯片在"挡门",属正常现象。进 Target → Option Bytes,把 Read Out Protection 降到 Level 0 并 Apply,再做一次 Full Chip Erase 整片擦除,门锁才算真正打开。
⚠️ 擦除会清掉原厂固件(本来就是要换掉的东西),但跳过这一步会导致后续烧录校验失败,务必做完再走下一步。
图3:刷写平衡车FOC固件时的读保护提示窗口,出现这行字说明只差解锁一步
第 4 步 | 烧录固件并验证
在 ST-Link Utility 的 Memory Programmer 里加载上一步的.bin文件,起始地址保持默认0x08000000,点 Program & Verify。看到 "Verification OK" 后合上盖子、插回电池,首刷完成。固件从 Flash 起始地址执行,烧完即可用,无需任何额外初始化。
调参速查:按你的手感来调
想起步柔顺、不再一冲一冲?把 Inc/config.h 里的DEFAULT_RATE调小(默认 480,越小爬升越慢),DEFAULT_FILTER也调小(数值越低滤波越软),输出会明显"收着劲"。
想把安全底线锁死?I_MOT_MAX限制单电机最大电流(默认 15A),N_MOT_MAX限制最高转速(默认 1000rpm)。启用DEBUG_SERIAL_PROTOCOL后,还能用串口 115200 在线操作:GET查参数、SET改参数、SAVE写入 EEPROM,协议细节见 Src/comms.c。
想换一种"握把"方式(输入设备)?重新选一个 VARIANT 再编译:航模遥控器选VARIANT_PPM/VARIANT_PWM/VARIANT_IBUS,踏板车选VARIANT_HOVERCAR,Wii 双节棍油门选VARIANT_NUNCHUK,串口二开选VARIANT_USART。
想把极速再往上顶一截?把FIELD_WEAK_ENA置 1,再按工况调FIELD_WEAK_MAX(最大弱磁电流)与FIELD_WEAK_LO/FIELD_WEAK_HI(起调区间)。用 VESC Tool 跑一次电机检测,能先确认极对数、电阻、漏感等数据与固件假设一致,省去手动估值。
⚠️ 弱磁一旦调过头,电机可能转得远超预期。测试前垫高车轮、去空旷场地,并且每次只改一个参数。
图4:VESC Tool 检测平衡车FOC电机参数的结果界面,极对数、电流、漏感等数据清晰列出
验收与拓展
验收清单:确认刷对了
- 短按电源键开机,主板正常上电、蜂鸣器有响应
- 断电状态手动转动电机:FOC 下能感到均匀持续的磁阻,像被"咬住",而不是松垮的空转
- 串口或遥控器发指令,两个车轮按指令方向转动
GET回读一遍参数,数值与你的设置一致
想玩得更远:从卡丁车到机器人底盘
切到VARIANT_HOVERCAR,两个踏板一刹一油,原地双击刹车还能挂倒挡,就是一台能开的卡丁车。想走代码路线,Arduino/hoverserial 示例 已实现带帧头、校验和与重同步的串口协议,接块 Arduino Nano 就能发转向/速度指令并回读转速、电压、板温,做机器人底盘正合适。社区里还有电动轮椅、ROS 小车、遥控滑板等改法,配置里也有CRUISE_CONTROL_SUPPORT巡航控制可以直接解锁。
写在最后
回头看,整套流程就像给老车换了一次"行车电脑":轮子、电机、电池一概没动,只是把大脑里的程序换掉,骑行质感就从"被踢着走"变成"被搓着走"。平衡车FOC固件刷写并没有想象中那么高门槛,剩下的就只差动手这一步了。车就在桌上,今晚把 ST-Link 插上试试 🚀
【免费下载链接】hoverboard-firmware-hack-FOCWith Field Oriented Control (FOC)项目地址: https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考