从起步一顿一顿到平顺安静: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 固件,讲清一次完整的平衡车固件改装要做哪几件事:看懂三种控制方式的差别、辨认主板上的刷写口与传感器线缆、解除芯片读保护后烧录、选择匹配的输入变体、微调电流与转速参数,最后用串口输出定位故障。
平衡车电机为何一顿一顿:三种控制方式对比
为什么先讲这个?因为它决定了你刷完固件后"到底换掉了什么"。理解这一点,后面所有参数调整才有依据。
原厂固件的换相(Commutation)控制,是按固定顺序依次给三相绕组通电,相当于让电机"跳格子"式运行:电流波形毛糙,换相瞬间扭矩突变,于是起步发顿、噪声大、效率也一般。正弦波(Sinusoidal)控制改为向绕组注入平滑的正弦电流,过渡更柔和,但本质上仍是开环的电流跟随。FOC(磁场定向控制)走得更远:它把流经电机的电流分解为"建立磁力"和"产生扭矩"两个分量,分别做闭环调节,让每一安培电流都用在出力上。
三者的差异可以浓缩成这样一张对照:
| 控制方式 | 工作方式 | 表现特点 | 定位 |
|---|---|---|---|
| 换相 Commutation | 固定顺序通断三相 | 电流粗糙、噪声大、效率一般 | 原厂默认 |
| 正弦波 Sinusoidal | 正弦电流开环跟随 | 比换相平顺安静一档 | 初步升级 |
| FOC | d/q 两轴电流独立闭环 | 扭矩平滑、效率更高、上限可再拓展 | 追求体验 |
切换开关在Inc/config.h里的CTRL_TYP_SEL,可选COM_CTRL/SIN_CTRL/FOC_CTRL;选定 FOC 之后,还能通过CTRL_MOD_REQ在电压、转速、扭矩三种细分模式里再挑一种。
认识平衡车主板:STM32 SWD 刷写口与两条传感器线缆
刷写之前必须先看清板子接在哪,这一步做错会直接烧外设。绝大多数平衡车主板的核心是 STM32F103RCT6(部分批次为 GD32F103RCT6),刷写走的是 SWD 调试口,位于板边的小排针上:
ST-Link V2 与主板的对接关系如下,四根线里三根必接、一根可选:
- SWDIO → PA14
- SWCLK → PA13
- GND → GND
- 3.3V → 3.3V(仅调试器供电不足时接入,可省)
主板左右各引出一根 4 针传感器线缆,里面除 GND 和 12/15V 外,还藏着 USART2(左线)和 USART3(右线)——后续接遥控器、电位器、串口调试都要从这两根线上走。
⚠️ 线缆中的红色导线是 15V 电源。接 USB 转 TTL 模块或任何 3.3V/5V 外设时绝不能碰它,一次误接就足以烧毁串口模块甚至主控。
STM32 读保护解锁与 FOC 固件烧录三步流程
原厂板子几乎都开着读保护(RDP),不解掉它,任何写入都会被芯片拒绝。拿到代码前先克隆仓库:
git clone https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC固件 .bin 文件有两个来源:项目 Actions 构建页下载的现成产物,或本地用 PlatformIO / Keil 自行编译(MDK-ARM/下的 Keil 工程默认按 STM32F103xE 配置,不同 Flash 容量芯片的起始地址会略有差异)。
在 STM32 ST-Link Utility 中按顺序走三步,缺一不可:
- 解除读保护:菜单
Target → Option Bytes...,把 Read Out Protection 改为 Level 0,Apply。此步会触发全片擦除; - 擦除芯片:
Target → Erase Chip,把原厂程序彻底清掉,给新固件腾出干净空间; - 写入固件:
Program & Verify选择 .bin 文件,起始地址保持0x08000000,等到 "Verification OK" 提示才算成功。
刷完第一次通电前,请务必把车轮架离地面——这是整个改装过程中最重要的一条安全纪律。
平衡车 FOC 固件输入变体怎么选:8 种宏定义覆盖常见操控硬件
这一步的目的是让固件"听懂"你的输入设备:选错变体,电机就会对油门毫无反应。变体在platformio.ini(PlatformIO 编译)或Inc/config.h(Keil / make)里以宏的形式二选一,同一时刻只能启用一个:
- VARIANT_ADC:两个电位器,适合自制遥控或电动小车;
- VARIANT_USART:串口指令控制,配合
Arduino/hoverserial/目录下的 串口控制示例 可直接用 Arduino 或任何单片机组网; - VARIANT_NUNCHUK:Wii 手柄,常见于电动轮椅、搬运车改造;
- VARIANT_PPM / VARIANT_PWM / VARIANT_IBUS:RC 遥控器的三种信号协议,对应遥控滑板、卡丁车场景;
- VARIANT_HOVERCAR:刹车/油门踏板驱动,踏板改造车的标准选择;
- VARIANT_HOVERBOARD:保留侧板通信以维持原车姿态控制,平衡控制器部分仍在完善中。
选完变体重编、刷录、转动输入设备,电机应能平滑加减速。如果左右轮方向反了,在配置中打开INVERT_L_DIRECTION/INVERT_R_DIRECTION即可纠正,不必动接线。
FOC 参数微调:电流、转速与弱磁参数怎么调
做完这一步,你得到的是一台按自己场景设定好"力气"和"极速"的机器。所有参数集中在Inc/config.h,其中三个是核心:
CTRL_MOD_REQ:FOC 的细分模式。机器人、小车一类需要精准力矩的场合用VLT_MODE(电压模式);追求稳定巡航用SPD_MODE(转速模式);人坐在上面代步用TRQ_MODE(扭矩模式)。注意转速与扭矩模式仅在 FOC 下可用;I_MOT_MAX:单电机最大电流(A),直接封顶扭矩。取值以电机与电池的承受能力为上限,不要为了"猛"而盲目拉高;N_MOT_MAX:最大转速(rpm),是超速保护的最后防线。
想突破现有极速上限,可以启用弱磁控制(Field Weakening):向电机注入反向的 d 轴磁通分量,用少量效率换取更高的转速天花板,涉及FIELD_WEAK_ENA、FIELD_WEAK_MAX以及起作用的输入阈值FIELD_WEAK_LO/FIELD_WEAK_HI,参数关系如图所示:
⚠️ 弱磁调节后电机可能瞬间冲到远超预期的高速,同时功耗骤增、电池可能触发过压保护。任何一次改动都应在车轮架起、人员远离的环境里验证。
如果怀疑电机本身参数与默认值不符,去 电机参数集 查看极对数、电感等标定值;想弄清每个参数如何起作用,则从 FOC 核心实现 读起,配合注释逐步跟进控制环即可。
刷录 FOC 固件后的故障排查与进阶玩法
遇到异常时不要急着拆板,按下面四种典型现象对号入座:
- ST-Link 报"Can not read memory":读保护没解干净,回到上一步重做 RDP Level 0 + 全片擦除;
- 电机抖动或尖啸:控制方式或参数与电机不匹配。核对极对数与电流设定,必要时参照
Src/BLDC_controller_data.c中的校准值; - 输入完全无响应:多半是变体选错或线缆接错,逐一核对所选变体对应的 USART2/USART3 线缆定义;
- 开机后自动关机:电池电压校准不准。按
Inc/config.h中 BATTERY 段注释的标定流程,实测电压写入BAT_CALIB_REAL_VOLTAGE、把调试输出中第 5 项 ADC 值写入BAT_CALIB_ADC,重刷后核对第 6 项是否吻合。
💡 定位多数问题的捷径是打开调试串口:在
Inc/config.h启用DEBUG_SERIAL_USART2或DEBUG_SERIAL_USART3,接上 3.3V USB 转 TTL 模块(记住,只用 GND 和 RX),终端按 115200 波特率即可实时看到输入值、左右轮指令和电池电压。
进阶方向有三条:开启CRUISE_CONTROL_SUPPORT获得巡航定速,松手后自动维持当前车速;在扭矩模式下启用ELECTRIC_BRAKE_ENABLE,松油门时自动缓刹代替自由滑行;选 HOVERCAR 变体玩"双击刹车倒车"的卡丁车式驾驶。若计划接入 ROS 等上位系统,Arduino/hoverserial/里的示例工程就是现成的协议参考,照着改成目标平台的客户端即可。
【免费下载链接】hoverboard-firmware-hack-FOCWith Field Oriented Control (FOC)项目地址: https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考