hoverboard-firmware-hack-FOC 新手完整指南:从烧录固件到调出 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,即"场定向控制",一种按磁场方向精确驱动无刷电机的算法)替换平衡车原厂固件的换相控制,降低噪音、提升效率,还能通过弱磁控制提高极速。本文按一次完整刷机流程走一遍:拆机、接 ST-Link、编译、烧录、调参、试跑,并标注每个环节的坑位。
为什么要换:原厂换相控制的天花板
平衡车原厂固件用"换相"(Commutation)方式驱动电机:按霍尔传感器给出的位置信号,每隔 60 电角度切换一次通电相序。这种方式实现简单,但扭矩有周期性波动,表现为电机"嗡嗡"的噪音和抖动感,效率也不高。
FOC 的思路不同:它在数学上建立一个随转子旋转的坐标系,把电流分解为"产生扭矩的轴"和"产生磁场的轴",通过高速 PWM 合成近似正弦的电流。带来的实际好处:
- 噪音和振动明显降低,扭矩输出平滑;
- 电机效率提升,同等速度下功耗更低;
- 支持弱磁控制(Field Weakening,即主动抵消一部分电机反电动势),突破电机原有转速上限。
固件默认就是 FOC。在Inc/config.h里也可以切回其他方案,三选一:
| 控制类型 | 宏定义 | 特点 | | -- | -- | -- | | 换相 |COM_CTRL| 与原厂一致,效率和平顺性最差 | | 正弦 |SIN_CTRL| 介于两者之间,不支持弱磁闭环 | | FOC |FOC_CTRL| 默认,支持弱磁、速度环和扭矩环 |
FOC 下的三种运行模式:电压、速度、扭矩
选定FOC_CTRL后,还有一层"模式"选择,由CTRL_MOD_REQ参数决定,默认是VLT_MODE:
- VOLTAGE MODE(
VLT_MODE):给电机施加恒定电压,响应快,适合机器人或需要快速动态的应用; - SPEED MODE(
SPD_MODE):闭环控制,PID 算法抵消负载扰动,让电机稳定在目标转速,适合恒速场景; - TORQUE MODE(
TRQ_MODE):以扭矩为目标值。把目标设为 0 时电机"空转滑行",适合有乘客上车的车辆。
每种模式的能力差异可以从下表快速判断(源自 README.md 的对比表):
| 控制方式 | 效率 | 平顺性 | 弱磁 | 滑行 | 静止驻车 | | -- | -- | -- | -- | -- | -- | | Commutation | 一般 | 一般 | 不支持 | 不支持 | 支持 | | FOC VOLTAGE | 高 | 较好 | 支持 | 不支持 | 需手动开启 | | FOC SPEED | 高 | 一般 | 支持 | 不支持 | 支持 | | FOC TORQUE | 高 | 最好 | 支持 | 支持 | 需手动开启 |
两个可选项:STANDSTILL_HOLD_ENABLE让电压/扭矩模式也能驻车;ELECTRIC_BRAKE_ENABLE把扭矩模式的"滑行"换成可调的电机制动。所有 FOC 模式下都内置了最大转速和最大电流保护。
烧录前的硬件检查清单
动手之前,把下面几样东西核对一遍,可以避免绝大多数翻车:
- 确认主控芯片:主流平衡车主控板使用 STM32F103RCT6,少数板子是 GD32F103RCT6(引脚兼容),两者都受支持。
- ST-Link 仿真器 + 杜邦线:接主控板上的 SWDIO、SWCLK、GND、NRST 四个测试点。主控板引脚分布见下图,SWD 测试点在板边位置。
- 电池先拆掉:拆机断开电池后再操作,避免短路。
- 留意两条 4 针传感器线:主控板原本靠两条 4 针线连接左右副板,破引出 GND、12/15V 和 USART2/USART3。右侧短线(USART3)支持 5V 电平,左侧长线(USART2)不耐 5V,外接 Arduino 等 5V 设备时务必走右侧线或用 3.3V 设备。
- 备查资料:仓库 docs/ 目录里有逆向出的主控板原理图 20150722_hoverboard_sch.pdf 和芯片手册,接错线之前先翻一翻。
编译与烧录:三种环境任选其一
先把代码拉到本地:
git clone https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC然后按自己顺手的工具链走,三条路产物相同,都针对STM32F103RC:
- PlatformIO(最省事):打开 platformio.ini,在
default_envs里取消你需要的 variant 的注释,比如VARIANT_HOVERCAR,然后执行pio run -t upload。调试串口波特率是 115200,记得把monitor_port改成你系统的 COM 口。 - Keil MDK-ARM:打开 MDK-ARM/mainboard-hack.uvprojx,在 Target 下拉菜单选 variant,编译后用 On-Chip Debugger 烧录。
- make + ARM GCC(Linux):安装
arm-none-eabi-gcc工具链后:
make -e VARIANT=VARIANT_HOVERBOARD # 编译,可选任意 variant make flash # st-flash 写入 0x08000000 并复位 make unlock # openocd 解锁(芯片被锁定时)variant 决定了电机输入信号从哪来,编译时只能选一个(详见下一节)。
调参:config.h 里的关键数字
编译通过后,真正决定"骑感"的参数在Inc/config.h和Src/BLDC_controller_data.c里。新手优先关注这几个:
| 参数 | 默认值 | 含义 | | -- | -- | -- | |I_MOT_MAX| 15 A | 单个电机的最大电流限制,越大扭矩越强,注意线路发热 | |I_DC_MAX| 17 A | 母线电流兜底保护,建议 =I_MOT_MAX+ 2A | |N_MOT_MAX| 1000 rpm | 电机最大转速限制 | |FIELD_WEAK_ENA| 0 | 弱磁总开关,默认关闭 |
弱磁的调法:把FIELD_WEAK_ENA设为 1 后,FIELD_WEAK_LO到FIELD_WEAK_HI之间线性起效,FIELD_WEAK_MAX是最大 D 轴电流(作者用 10 寸轮实测到过 10A)。不同标定曲线如下图所示:
⚠️ 重新标定弱磁时务必做好安全准备:电机可能转得很快,且功耗激增可能触发 BMS 过压保护。调参建议在台架(轮子离地)上进行。
电机级参数(电感、极对数等)以定点数形式存放在Src/BLDC_controller_data.c,仓库已提供标定好的默认值,一般不需要动。如果你的电机不是原厂规格,需要参考 VESC 里的对应参数逐项换算:
另外两个容易忽略的校准:电池电压(BAT_CALIB_ADC/BAT_CALIB_REAL_VOLTAGE,配多用电表实测值)和芯片温度传感器(TEMP_CAL_*,未校准前不要开启TEMP_POWEROFF_ENABLE,误差可达 45°C)。
选一个输入 variant:你想怎么驱动这台车
variant 在编译期二选一(或十选一),直接决定输入通道:
VARIANT_HOVERBOARD:保留原厂双副板输入,最接近"刷个新固件继续当平衡车用"的体验。注意:平衡控制算法尚未实现,目前只是换上了 FOC 电机驱动。VARIANT_HOVERCAR:双踏板(油门/刹车),静止时双击刹车可反转,适合改造 Hovercar,见下方原理图。VARIANT_USART:串口协议控制,仓库自带 Arduino 示例 Arduino/hoverserial/hoverserial.ino,115200 波特率,帧含起始帧和校验,适合用单片机做上位机。VARIANT_ADC/VARIANT_NUNCHUK:电位器或 Wii 摇杆控制,适合轮椅、代步小车类项目。VARIANT_PPM/VARIANT_PWM/VARIANT_IBUS:接收机信号输入,VARIANT_SKATEBOARD(滑滑板)用的就是右侧线的 PWM。VARIANT_TRANSPOTTER:面向 TranspOtter 类搬运车的专门配置。
常见坑位与试跑建议
- 烧录后电机立刻乱转:先别急着上电骑行。轮子架离地面,缓慢给输入,确认转向与预期一致再试跑。
- 串口无反馈:先确认走的是 USART3(右侧线);左侧线接 5V 设备可能直接烧引脚。
make unlock才需要 openocd:只有芯片被原厂固件锁定时才执行,普通烧录用make flash即可。- variant 混编:
config.h里若手动定义了 variant,又通过-D传入会冲突,按编译环境选一种方式定义。
试跑通过之后,建议按这个顺序深入:
- 读 Src/BLDC_controller.c,看电流采样和 FOC 闭环的 C 实现;
- 打开 Src/comms.c 对照
hoverserial.ino,理解串口帧格式,方便接自己的上位机; - 翻 docs/literature/ 里的 STM32 和 GD32 手册,解决引脚级问题。
仓库采用 GPLv3 协议(见 LICENSE),修改后自用或再分发都自由,动手前先把电池拆下来——这是全流程里最重要的一步。
【免费下载链接】hoverboard-firmware-hack-FOCWith Field Oriented Control (FOC)项目地址: https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考