☰
平衡车FOC固件上手指南:从读保护解除到平滑驾驶
2026/10/23 2:33:25 网站建设 项目流程

平衡车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 UtilityST 官方烧录软件是免费获取
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)。

  1. 断电拆下车轮盖板与主板,确认核心芯片型号(STM32F103RCT6 或 GD32F103RCT6)。
  2. 对照引脚图找到 SWDIO、SWCLK、3.3V、GND 四个焊盘。

  1. ST-Link V2 按对应关系接好 4 根线(3.3V 可不接),同时记住两根 4 针传感器线缆的左右顺序。

⚠️ 卡点:引脚找不准、ST-Link 连不上 → 逐个对照上方引脚图确认,尤其别把 SWDIO 和 SWCLK 接反,接反了就是连不上。

阶段二:解除读保护并擦除芯片

完成标志:ST-Link Utility 能正常读写芯片内存,0x08000000 起一片 0xFFFFFFFF。

  1. 接好 ST-Link,打开 STM32 ST-Link Utility,点击 Connect 建立连接。
  2. 在Target菜单选Option Bytes...,把 Read Out Protection 改为 Level 0,点 Apply。

  1. 重新连接后选Target → Erase Chip整片擦除。
  2. 在内存窗口查看 0x08000000 区域,确认全部为 0xFFFFFFFF。

⚠️ 卡点:提示 "Can not read memory" → 通常是读保护没解除,回到第 2 步做 Option Bytes 后再擦除。

阶段三:烧录 FOC 固件

完成标志:烧录完成显示 Verification OK,上电后蜂鸣器正常响或指示灯闪烁。

  1. 获取固件:从项目 Actions 构建页下载现成构建产物(.bin),或用 PlatformIO / Keil 自行编译。

  1. 回到 ST-Link Utility,选Program & Verify,加载 .bin 文件,起始地址保持0x08000000。
  2. 等待校验通过后断开 ST-Link,重新上电确认启动正常。

⚠️ 卡点:烧录失败或校验不过 → 确认 .bin 对应 STM32F103RCT6 版本,并且芯片已擦除(阶段二没做就回阶段二)。

阶段四:选择输入变体并验证电机响应

完成标志:重新编译烧录后,缓慢转动输入设备(电位器/串口/手柄/遥控),电机平滑加减速跟随。

  1. 在platformio.ini的default_envs选中一个变体(如VARIANT_ADC、VARIANT_USART、VARIANT_NUNCHUK);用 Keil 的用户直接在Inc/config.h定义对应宏,二选一即可。
  2. 重新编译烧录,输入设备按变体说明接好线缆,上电慢动输入,观察电机响应。
  3. 转向或转动方向与预期相反时,在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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询