平衡车FOC固件上手指南:从读保护解除到平滑驾驶
【免费下载链接】hoverboard-firmware-hack-FOCWith Field Oriented Control (FOC)项目地址: https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC
如果你的平衡车起步一冲一冲、电机嗡嗡作响、爬坡没劲,大概率不是车坏了,而是原厂固件只做基础换相控制。本文带你把 hoverboard-firmware-hack-FOC 的 FOC 固件刷进主板,让电机跑得更顺、更安静。
原理 30 秒速览
原厂换相控制像开车时反复猛踩油门:车是动了,但一顿一顿、响还费电。FOC(磁场定向控制)把电机电流拆成"建立磁场"和"产生扭矩"两个分量分别闭环控制,像一个精准的电子油门,任何时候都刚好给够力,不多也不少。
| 控制方式 | 驾驶感 | 效率 | 高速表现 |
|---|---|---|---|
| 换相(原厂) | 一顿一顿、嗡嗡响 | 一般 | 速度上限低 |
| 正弦波 | 更平顺 | 更好 | 更好 |
| FOC | 平滑安静 | 高 | 支持弱磁再提速 |
本文要做的事:把 FOC 固件刷进平衡车主板,配置好输入方式,按使用场景调参,最后架轮验证。
动手前准备
| 项目 | 说明 | 是否必须 | 备注 |
|---|---|---|---|
| 平衡车主板 | 核心芯片 STM32F103RCT6(部分为 GD32F103) | 是 | 拆自平衡车的标准主板 |
| ST-Link V2 | 烧录与调试适配器 | 是 | 4 根线接 SWD 引脚 |
| STM32 ST-Link Utility | ST 官方烧录软件 | 是 | 免费获取 |
| PlatformIO 或 Keil | 编译固件 | 否 | 下载现成 .bin 可跳过 |
| 3.3V USB-TTL 串口 | 调试串口 | 否 | 仅调试输出时用 |
| 预计耗时 | 1~2 小时 | — | 首次操作建议留足余量 |
先把项目源码克隆到本地(不自己编译的话,读一读配置说明也有帮助):
git clone https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC全程路线:识别主板 → 解除读保护 → 擦除芯片 → 烧录 FOC 固件 → 配置输入 → 调参 → 架轮验证
核心操作
阶段一:认出主板与 SWD 口
完成标志:能在板子上指认 SWDIO(PA14)、SWCLK(PA13)、3.3V、GND 四个焊盘,并分清左线(USART2)和右线(USART3)。
- 断电拆下车轮盖板与主板,确认核心芯片型号(STM32F103RCT6 或 GD32F103RCT6)。
- 对照引脚图找到 SWDIO、SWCLK、3.3V、GND 四个焊盘。
- ST-Link V2 按对应关系接好 4 根线(3.3V 可不接),同时记住两根 4 针传感器线缆的左右顺序。
⚠️ 卡点:引脚找不准、ST-Link 连不上 → 逐个对照上方引脚图确认,尤其别把 SWDIO 和 SWCLK 接反,接反了就是连不上。
阶段二:解除读保护并擦除芯片
完成标志:ST-Link Utility 能正常读写芯片内存,0x08000000 起一片 0xFFFFFFFF。
- 接好 ST-Link,打开 STM32 ST-Link Utility,点击 Connect 建立连接。
- 在
Target菜单选Option Bytes...,把 Read Out Protection 改为 Level 0,点 Apply。
- 重新连接后选
Target → Erase Chip整片擦除。 - 在内存窗口查看 0x08000000 区域,确认全部为 0xFFFFFFFF。
⚠️ 卡点:提示 "Can not read memory" → 通常是读保护没解除,回到第 2 步做 Option Bytes 后再擦除。
阶段三:烧录 FOC 固件
完成标志:烧录完成显示 Verification OK,上电后蜂鸣器正常响或指示灯闪烁。
- 获取固件:从项目 Actions 构建页下载现成构建产物(.bin),或用 PlatformIO / Keil 自行编译。
- 回到 ST-Link Utility,选
Program & Verify,加载 .bin 文件,起始地址保持0x08000000。 - 等待校验通过后断开 ST-Link,重新上电确认启动正常。
⚠️ 卡点:烧录失败或校验不过 → 确认 .bin 对应 STM32F103RCT6 版本,并且芯片已擦除(阶段二没做就回阶段二)。
阶段四:选择输入变体并验证电机响应
完成标志:重新编译烧录后,缓慢转动输入设备(电位器/串口/手柄/遥控),电机平滑加减速跟随。
- 在
platformio.ini的default_envs选中一个变体(如VARIANT_ADC、VARIANT_USART、VARIANT_NUNCHUK);用 Keil 的用户直接在Inc/config.h定义对应宏,二选一即可。 - 重新编译烧录,输入设备按变体说明接好线缆,上电慢动输入,观察电机响应。
- 转向或转动方向与预期相反时,在
Inc/config.h对应变体区定义INVERT_L_DIRECTION或INVERT_R_DIRECTION,再编译烧录。
⚠️ 卡点:输入无响应 → 通常是变体选错或接错线缆,核对所选变体占用的是哪条线(左线 USART2 / 右线 USART3),并确认同一条串口没有被其它功能占用。
参数怎么调
核心参数都在Inc/config.h,先按场景选模式,再收电流和转速:
| 使用场景 | 推荐参数值 | 一句话原因 |
|---|---|---|
| 遥控小车 / 演示 | CTRL_MOD_REQ=VLT_MODE,I_MOT_MAX5~8A | 电压模式线性好预测,适合开环演示 |
| 稳定巡航 | CTRL_MOD_REQ=SPD_MODE | 闭环保持转速,不用一直盯油门 |
| 载人代步 / 卡丁车 | CTRL_MOD_REQ=TRQ_MODE | 扭矩模式脚感自然,可叠加电制动 |
| RC 遥控 | VARIANT_PPM/PWM/IBUS,N_MOT_MAX≤ 800 | 遥控没有物理限位,转速上限是底线 |
- CTRL_TYP_SEL:控制方式,默认
FOC_CTRL,也可选SIN_CTRL/COM_CTRL,FOC 是本次改造的目标。 - I_MOT_MAX:单电机最大电流(A),直接决定扭矩上限,别超过电机与电池标称。
安全提示:电流调太大会瞬时过流、电机和走线急剧发热。从低于电机标称的值起步,逐步上调观察温升。
- N_MOT_MAX:最大转速(rpm),默认 1000,是限速保护的关键防线。
- FIELD_WEAK_ENA:弱磁开关,0 为关闭;置 1 会注入最高
FIELD_WEAK_MAX(A)的反向 D 轴电流,牺牲一点效率换更高转速上限。安全提示:弱磁可能让电机转得飞快、功耗大幅上升并触发电池保护。开启前确认电机与电池余量,架轮测试并全程手扶断电开关。
跑通了?做个自检
| 症状 | 最可能原因 | 处理 |
|---|---|---|
| "Can not read memory" | 读保护未解除 | 回阶段二做 Option Bytes,擦除后再写 |
| 电机尖叫、抖动 | 参数与电机不匹配 | 核对BLDC_controller_data.c电机参数,调低电流上限 |
| 输入无响应 | 串口被其它功能占用 | 核对变体与 DEBUG/FEEDBACK 串口互斥关系,重新编译 |
| 开机后自动关机 | 电池电压校准不准 | 按Inc/config.h流程重新标定 BAT_CALIB_ADC |
排查时可在Inc/config.h解开DEBUG_SERIAL_USART2/3注释,用 3.3V USB-TTL 接对应线缆(别用红线 15V),波特率 115200,实时观察输入值与电池电压,多数问题一眼定位。
进阶方向
- 开启
CRUISE_CONTROL_SUPPORT做巡航定速,达到目标速度后松手即保持 - 扭矩模式下启用
ELECTRIC_BRAKE_ENABLE,松油门自动缓刹 - 尝试
VARIANT_HOVERCAR踏板车,双击刹车可倒车,卡丁车式驾驶 Arduino/hoverserial/里的串口控制示例,是接 Arduino 等外部平台的起点
整个改造就一条主线:解除读保护、刷入 FOC、按场景调参。当电机不再嗡嗡作响、起步丝滑跟手,你会明白为什么体验过 FOC 的人回不去换相了。架起车轮做第一次通电测试吧,记得留一份兴奋 🚀
【免费下载链接】hoverboard-firmware-hack-FOCWith Field Oriented Control (FOC)项目地址: https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考