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(Field Oriented Control,场定向控制)无刷电机控制搬进平衡车原装 STM32/GD32 主控板,替代原厂换向方案。本文拆解它的能力边界、一次跑通的最小路径与参数调优实战,供打算做平衡车固件升级的读者参考。
一、一句话看懂它能做什么
这套固件针对平衡车主控板原生硬件工作:主控芯片支持 STM32F103RCT6 与 GD32F103RCT6 两种,无需更换板卡即可刷入。刷入后,电机控制策略可在三类之间切换——换向 COM_CTRL、正弦 SIN_CTRL、场定向 FOC_CTRL(默认)。相对于换向方案,FOC 的收益在项目文档中归纳为三点:
- 电机噪音与振动降低;
- 扭矩输出更平滑,电机效率提升,能耗相应下降;
- 支持弱磁(Field Weakening)以扩大最高转速范围。
输入侧同样有基础:USART2/USART3 可复用为 UART、PWM、PPM、iBUS,USART2 还能作为 12bit ADC,USART3 可作 I2C。这是同一套固件底座能衍生出十余种输入变体的前提。
二、三种控制能力如何分工
2.1 FOC 的三个工作模式
FOC_CTRL之下由CTRL_MOD_REQ决定工作模式:
| 模式 | 行为 | 适配场景 |
|---|---|---|
| VLT_MODE(电压) | 对电机施加恒定电压,响应快 | 机器人等需要快速响应的应用 |
| SPD_MODE(速度) | 闭环控制器跟踪输入 RPM 目标,抵抗负载扰动 | 恒速应用 |
| TRQ_MODE(扭矩) | 直接跟踪输入扭矩目标,目标为 0 时电机自由滑行 | 有人乘坐的骑行类设备 |
其中 SPD_MODE 与 TRQ_MODE 仅在 FOC_CTRL 下可用,正弦模式没有这两个闭环。
2.2 各控制方式的能力对照
项目 README 给出的横向对比(评级为项目方相对评价,非实测数值):
| 能力 | 换向 | 正弦 | FOC 电压 | FOC 速度 | FOC 扭矩 |
|---|---|---|---|---|---|
| 复杂度 | – | + | ++ | +++ | +++ |
| 效率 | – | ++ | +++ | +++ | +++ |
| 平滑度 | – | ++ | ++ | + | +++ |
| 弱磁 | 不支持 | 支持(相位提前) | 支持 | 支持 | 支持 |
| 自由滑行 | 不支持 | 不支持 | 不支持 | 不支持 | 支持 (1) |
| 静止保持 | + | + | + (2) | +++ | 需开启 (2) |
(1) 开启ELECTRIC_BRAKE_ENABLE后,可将自由滑行替换为恒定电制动,强度由ELECTRIC_BRAKE_MAX调节;(2) 静止保持(standstill hold)通过开启STANDSTILL_HOLD_ENABLE强制获得,仅对电压/扭矩模式有意义。
2.3 弱磁:抬高转速上限
弱磁默认关闭,在Inc/config.h中设FIELD_WEAK_ENA = 1启用。其作用方式是线性插值:输入从FIELD_WEAK_LO(默认 750)开始起效,到FIELD_WEAK_HI(默认 1000)达到最大值FIELD_WEAK_MAX(默认 5 A,config.h 注释称 10 寸轮组上测试过 10 A)。
图中三种校准形态对应FIELD_WEAK_LO/FIELD_WEAK_HI的不同取法。项目方同时给出明确警示:重新校准弱磁后电机可能转得极快,功耗显著上升,并可能触发电池保护板(BMS)的过压保护——操作前必须先固定设备、清空周围环境。
三、从选型到落地:一次跑通的最小路径
3.1 硬件与接线
需要:一块平衡车主控板(STM32F103RCT6 或 GD32F103RCT6)、ST-Link 调试器、一台电脑。通过板上的 SWD 接口(PA13/SWDIO、PA14/SWCLK)连接即可刷写,板级引脚定义见下图:
3.2 变体选择:platformio.ini 里的一次注释
输入方式由「变体」决定,构建目标在 platformio.ini 中通过取消default_envs对应行的注释来选择,共 10 种:
| 变体 | 输入来源 |
|---|---|
| VARIANT_ADC | 两个电位器(左侧传感线) |
| VARIANT_USART | 串口协议(右侧线缆 USART3,可接 Arduino) |
| VARIANT_NUNCHUK | Wii Nunchuk,单手油门/制动/转向 |
| VARIANT_PPM | 遥控 PPM 和信号 |
| VARIANT_PWM | 遥控 PWM 信号 |
| VARIANT_IBUS | Flysky iBUS(左侧线缆) |
| VARIANT_HOVERCAR | 油门/制动双踏板,静止时双击制动踏板倒车 |
| VARIANT_HOVERBOARD | 读取两块侧板数据(需侧板同刷固件) |
| VARIANT_TRANSPOTTER | TranspOtter 运载系统构建 |
| VARIANT_SKATEBOARD | PWM 遥控信号(右侧线缆) |
若选 USART 变体做串口控制,仓库内的 Arduino/hoverserial/hoverserial.ino 是一份现成的上位机示例,可作为接入自研控制器的起点。
3.3 编译与烧录
获取源码:git clone https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC
仓库提供三条构建路线,可按工具链习惯任选其一:
- PlatformIO:各 env 已配好
platform = ststm32、framework = stm32cube、board = genericSTM32F103RC,烧录协议为 stlink,执行pio run -t upload即完成构建加烧录; - MDK-ARM:工程文件 MDK-ARM/mainboard-hack.uvprojx 随仓库提供;
- GCC + Makefile:Makefile,目标名
hover。
刷写后如需查看日志,把配置里的monitor_port(默认COM5,Windows 示例)改为本地实际串口,波特率为monitor_speed指定的 115200。
3.4 参数基线
仓库附带一份已校准的电机参数(定点数格式),刷入后即可直接运行,不需要先标定;调优方式见下一节。
四、参数调优实战
参数调整集中在两个文件:
Inc/config.h——控制策略层,逐项对应上文的能力:CTRL_TYP_SEL:控制类型,COM_CTRL / SIN_CTRL / FOC_CTRL(默认 FOC_CTRL);CTRL_MOD_REQ:控制模式,OPEN_MODE / VLT_MODE / SPD_MODE / TRQ_MODE(默认 VLT_MODE);FIELD_WEAK_ENA、FIELD_WEAK_MAX、FIELD_WEAK_LO、FIELD_WEAK_HI:弱磁开关与校准区间;STANDSTILL_HOLD_ENABLE:强制静止保持(电压/扭矩模式);ELECTRIC_BRAKE_ENABLE/ELECTRIC_BRAKE_MAX/ELECTRIC_BRAKE_THRES:扭矩模式电制动,默认最大制动 100、起始阈值 120。- 各变体有各自的模式默认值:HOVERCAR 段默认 VLT_MODE(config.h 注释说明 HOVERCAR 更适合扭矩模式,选电压模式是为避免松油门时自由滑行);SKATEBOARD 段默认 TRQ_MODE。
Src/BLDC_controller_data.c——电机参数层: 该文件由 Simulink 控制器模型生成,参数以定点数存放(文件开头即是正弦/余弦查表数据)。README 建议用 Fixed-Point Viewer 工具换算定点参数。调参对应的是电机真实物理量,下图是一份 FOC 参数检测结果的参照样例:
图中检测结果显示:14 对极、绕组电阻 380.60 mΩ、电感 292.36 μH、磁通 1.00 mWb——校准 BLDC_controller_data.c 时可以此为量级对照。
调参顺序建议:先确认模式与用途匹配(骑行类选扭矩模式,恒速选速度模式);确有必要提高最高转速时,小步上调FIELD_WEAK_MAX并同步关注功耗与温度;最后再按实机电机微调 BLDC_controller_data.c 中的电机参数。
五、哪些设备都能受益
变体体系本质是「同一 FOC 电机底座 + 任意输入源」的组合,README 与衍生项目覆盖的设备形态包括:
- 踏板 Hovercar:油门/制动双踏板,静止时双击制动踏板倒车(VARIANT_HOVERCAR);
- 电动滑板:PWM 遥控信号接入(VARIANT_SKATEBOARD);
- 运载小车:TranspOtter 类平衡车底盘运输系统(VARIANT_TRANSPOTTER);
- 机器人:电压模式快响应适合伺服类任务,速度模式适合恒速输送;
- 座椅类车辆:Wii Nunchuk 单手操作,是最早用于电动座椅/轮椅类构建的输入方式(VARIANT_NUNCHUK);
- 遥控类设备:PPM / PWM / iBUS 遥控直接兼容常见遥控器材。
六、先避坑再上路
刷写与调参过程中的高频问题,按出现频率排列:
- MCU 未解锁:主控 SWD 被锁定时 ST-Link 无法直接烧录,需先完成解锁。仓库内置了分步操作截图(
docs/pictures/wiki_unlock/目录):
- VARIANT_HOVERBOARD 的平衡控制尚未实现:该变体读取两块侧板数据,且侧板必须同样刷入 hacked 版本固件;主控板必须是整板方案,不支持 splitboard。若目标是「可站立骑行的平衡车」,当前版本不建议以此为终点。
- 5V 耐压在两侧线缆上不对称:左侧线缆(USART2)不耐 5V,右侧线缆(USART3)耐 5V。外接信号源前先确认电平标准,左侧接 5V 信号有损坏风险。
- 弱磁的安全边界:电机转速可能远超预期,功耗明显上升,可能触发 BMS 过压保护;重新校准弱磁必须做好物理防护。
- 串口配置:
monitor_port默认值是COM5,非 Windows 系统下需改成对应端口,否则看不到任何日志。
若刷入后设备无响应,建议按此顺序排查:供电与 ST-Link 连接 → 变体与模式是否和实际接线一致 → 串口(115200)是否有日志输出 → 查阅项目 wiki 的 Getting Started 与 Troubleshooting 章节。
小结:hoverboard-firmware-hack-FOC的价值,是把一套完整的 FOC 无刷电机控制栈(含电压/速度/扭矩三模式与弱磁)落在量产平衡车的主控板上,并用变体机制覆盖了从电位器到遥控器的输入需求;代价是相对陡峭的调参门槛——定点参数、非对称 5V 耐压、MCU 解锁都需要逐一处理。项目以 GPLv3 协议开源,社区讨论主要在 Matrix 群组进行,ROS 驱动、Web 串口控制、Android 遥控等衍生项目也都建立在这一固件底座上。
【免费下载链接】hoverboard-firmware-hack-FOCWith Field Oriented Control (FOC)项目地址: https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考