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)换掉这套逻辑,并开放串口/ADC/遥控等控制接口,让你自己重写这块 STM32F103 主控的电机控制。
⚡ 这份 FOC 固件能改什么、谁不该碰
先说结论:它是完整替换原厂固件的方案,给你算法、输入、保护阈值三层自定义空间。固件支持换相/正弦/FOC 三种控制类型,其中 FOC 又分电压(VLT_MODE)、速度(SPD_MODE)、扭矩(TRQ_MODE)三种模式;输入端提供电位器 ADC、串口、RC 遥控(PPM/PWM/iBUS)、Wii 键鼠手柄、踏板等 10 个 variant。
- 适合:有原装平衡车主控板(主控一般为 STM32F103RCT6,部分 GD32F103RCT6 也支持)+ ST-Link,想把两个电机改造成电动滑板车、hovercar、机械臂或恒速平台的人
- 不适合:split 分体板(本仓库不支持,需换用对应分支)、想要原厂两轮自平衡功能的人(平衡控制器在本固件中尚未实现,config.h 里标注为 TODO)、没有 ST-Link 且不想学 SWD 烧录的人
🔧 从克隆到烧录:三步走,每步都有成功标准
准备:主板、ST-Link V2、3.3V USB-UART(仅调试用)。原厂主板的 MCU 通常处于 RDP 锁定状态,必须先解锁——docs 里有逐步解锁截图,Makefile 内置 unlock 目标(openocd 执行stm32f1x unlock 0)。判断标准:openocd 或 stlink 能识别到目标芯片并读回器件信息。
执行:克隆仓库:
git clone https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC
在 platformio.ini 里取消注释一个 variant(一次只选一个),或走 make 用 VARIANT 环境变量选择。编译并烧录:
make -e VARIANT=VARIANT_ADC生成固件后,make flash会把 build/hover.bin 通过 st-flash 写入 0x8000000。
判断标准:build/hover.bin 生成且终端打印 Flash/RAM 占用大小;st-flash 报 "Memory programmed" 后自动复位。
验证:在 Inc/config.h 打开 DEBUG_SERIAL_USART3(右排线 5V 容忍),把 3.3V 串口只接 GND 和 RX 到传感器线,终端设 115200。判断标准:每 5ms 收到一行in1:345 in2:1337 cmdL:0 cmdR:0 BatADC:0 BatV:0 TempADC:0 Temp:0,且 BatV 除以 100 与万用表实测电压一致。
FOC 到底怎么控制电机:一个类比讲明白
推门最省力的方向是垂直于门面的切向;朝门体方向推只是"锁紧"它,不会打开。FOC 干的就是这个分解:靠霍尔传感器角度,把三相绕组电流实时拆成切向的 q 轴(产生转矩)和径向的 d 轴(只改变磁场强弱),任何转角下电流都全花在转矩上,所以烧录 FOC 固件后电机比原厂换相更安静、更顺滑。采样与分解逻辑在 Src/BLDC_controller.c,参数以定点数存在 Src/BLDC_controller_data.c,PWM 频率 16 kHz(config.h 中 PWM_FREQ)。
想跑得更快还有场弱:主动注入 d 轴电流"削弱"反电动势,突破原速度上限。固件用三个参数控制——FIELD_WEAK_LO(默认 750)开始介入,到 FIELD_WEAK_HI(默认 1000)达到最大值 FIELD_WEAK_MAX(默认 5A):
config.h 里哪几个参数最值得调
Inc/config.h 参数很多,真正会改变体感的只有这四个:
- I_MOT_MAX(默认 15A):单轮电机电流限。调大加速更猛,但掉电更快、有触发 BMS 过流的隐患;调小则"安全但发肉"
- N_MOT_MAX(默认 1000 rpm):超速保护。换小轮径要调大(小轮需要更高转速达到同速);调小是最直接的速度上限保险
- FIELD_WEAK_MAX(默认 5A,仓库注明 10 寸轮测到 10A):决定提顶多高。调大功耗明显上升,可能触发 BMS 过压保护;调小则接近禁用,需配合 FIELD_WEAK_ENA=1 才生效
- CTRL_MOD_REQ:选驾驶性格。VLT_MODE 响应最快(机械臂)、SPD_MODE 保持恒速(巡航)、TRQ_MODE 按扭矩请求且输入为 0 时自由滑行(人骑最自然)
电机电感、电阻等参数不用自己标定,仓库已附带校准好的控制器,可参考 VESC 风格的参数标定界面:
🛡️ 烧不进去或乱转:常见故障速查
- 现象:st-flash 找不到目标 / 解锁失败。原因:SWD 没接好,或 RDP 锁定禁用了调试口。处理:对照引脚分布图核对 SWD 引脚,跑
make unlock后重新上电 - 现象:上电后电机无反应或只转一边。原因:variant 与输入接线不匹配,或 MOTOR_LEFT_ENA/MOTOR_RIGHT_ENA 被注释、转向反了(INVERT_*_DIRECTION)。处理:看调试串口 cmdL/cmdR 有没有值
- 现象:碰油门电机乱跳。原因:输入上下限未校准。处理:长按电源键 5 秒至蜂鸣,反复把电位器打到最小和最大,回中后按电源键确认,数值会存入 flash
- 现象:开场弱后电机突然疯转。原因:FIELD_WEAK_MAX 过高或 FIELD_WEAK_HI 过低。处理:立即恢复 FIELD_WEAK_ENA=0,README 明确警告电机可能极速旋转,后续标定必须悬空测试
- 现象:插上 USB-UART 后端口锁死。原因:左线(USART2)不耐 5V,且线上有 15V 红线。处理:改用右线(USART3)或 3.3V 适配器,红线永不接入
内置保护兜底:连续 TIMEOUT(默认 20)次错误/丢失命令即紧急停机;换相/正弦控制另有母线限流 I_DC_MAX(默认 17A,建议设为 I_MOT_MAX+2A)超限斩波;电池分级报警(3.60V/cell 轻鸣、3.37V/cell 欠压断电);过温断电需先校准温度传感器才能启用。调试转向或霍尔问题时,看一眼电机内部霍尔排布会更容易理解 FOC 的角度采样:
能继续延伸的方向
- 踏板 hovercar:VARIANT_HOVERCAR,刹车踏板双击倒车,开机三档速度可选
- 电动滑板车 / TranspOtter:VARIANT_TRANSPOTTER,GameTrak 转向 + I2C LCD
- 恒速平台 / 机械臂 / AGV:SPD_MODE + 串口控制,仓库自带 Arduino 控制示例
- 智能轮椅 / 电动搬运车:TRQ_MODE + iBUS 遥控
最快路径:先用 VARIANT_ADC 烧录验证电机,再换回你自己的输入方式。从 Inc/config.h 的参数注释和 platformio.ini 的 variant 列表开始读。
【免费下载链接】hoverboard-firmware-hack-FOCWith Field Oriented Control (FOC)项目地址: https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考