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)——你可以理解成给电机装了一个智能方向盘,实时知道转子在哪里、该用多大力气。换装之后噪音和震动明显下降,扭矩输出变平滑,还能用"弱磁"突破速度上限。这是什么、怎么跑起来、还能怎么玩,一句话全讲清。
一眼看懂
| 模块 | 能干什么 |
|---|---|
| FOC 电机控制 | 驱动两只轮毂电机,换相变场导向,噪音更低、扭矩更顺、效率更高 |
| 三种控制类型 | 换相 / 正弦 / FOC 一行切换,FOC 内还有电压、速度、扭矩三种模式 |
| 十种输入变体 | 电位器、串口、Wii Nunchuk、遥控器(PPM / PWM / iBUS)、踏板、滑板等,按需选 |
| 多重保护 | 过流、超速、输入超时、电池欠压、过热、闲置断电,全部内置 |
| 参数直接可调 | 行为开关在config.h,电机参数在BLDC_controller_data.c |
🔧 平衡车固件从零编译到烧录
硬件清单
- 平衡车主控板:主控芯片是 STM32F103RCT6,部分板子用 GD32F103RCT6,固件同样支持
- ST-Link V2 编程器:通过 SWD 接口把固件写进芯片
- 3.3V USB 串口适配器:接传感器线缆,115200 波特率看调试信息
- 单轮测试台:电机真的会转,轮子架起来测,别用手扶
编译
- 克隆代码:
git clone https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC.git cd hoverboard-firmware-hack-FOC- 选一个变体编译。以电位器变体 VARIANT_ADC 为例,用 PlatformIO:
pio run -e VARIANT_ADC产物在.pio/build目录下的hover.bin。不想装 PlatformIO 的话,用 arm-none-eabi-gcc 工具链加 make 也行:
make VARIANT=VARIANT_ADC产物是build/hover.bin。
烧录
ST-Link 接到主控板的 SWD 引脚(SWDIO、SWCLK、GND),然后:
pio run -e VARIANT_ADC -t upload或者走 make 路线:make VARIANT=VARIANT_ADC flash。如果芯片被读保护锁住,先跑一次make unlock,它通过 OpenOCD 清除保护。
验证:成功长什么样
- 上电后蜂鸣器响两声短音,说明电机已使能
- 串口适配器把 GND 和 RX 接到传感器线缆(千万别碰红线,15V 会烧板子),115200 波特率打开终端,能看到
in1:345 in2:1337 cmdL:0 cmdR:0 BatADC:0 BatV:0 Temp:0这样的数据持续滚动 - VARIANT_ADC 变体:长按电源键 5 秒触发电位器自动校准,然后把旋钮来回转几遍保存;之后轻拨旋钮,轮子平滑加速,噪音和原厂的"嗡嗡"感完全两回事
- 用 ST-Link Utility 查看的话,内存地址 0x08000000 处应能看到 Device ID 0x410,这就是 STM32F103
📐 底层逻辑:FOC控制原理是怎么跑的
从"六步推"到"连续转"
FOC 做的事情一句话概括:不再一圈推六把,而是 16 kHz 地实时算出"转子在哪、该往哪推、推多大力"。
换相法像推旋转木马,一圈推六次,每次都用得上力气,所以吵、所以抖;FOC 像给转起来的小风扇持续顺着方向轻轻助推,转动就丝滑了。关键前提是每一刻都知道转子位置。
照片里轮毂内侧那块小绿板就是位置传感器,配合 ADC 实时采样的相电流,控制器在 DMA 中断里每 16 kHz 跑一个完整控制周期。
三种控制模式:电压、速度、扭矩
同一套 FOC,给三个不同的目标,由Inc/config.h里的CTRL_MOD_REQ选择:
- VOLTAGE 模式:油门踩多深就是多大力,开环、响应快,适合机器人场景
- SPEED 模式:定速巡航,死守目标 RPM,上坡、带载自动补偿
- TORQUE 模式:你出多大力,速度车自己定,目标为 0 时车轮自由滑行,载人骑行场景首选
注意:SPEED 和 TORQUE 这两种闭环模式只有 FOC 控制类型才有。
弱磁控制:速度上限怎么突破
转速越高,电机自身反电动势越大,电池电压推不动了,这就是天然速度上限。
打个比方:水流越快,管子里的顶水压力越大,水龙头再怎么拧也加不动了;把管路稍微收细一点(削弱磁场),同样的水压反而能把轮子推得更快。
固件里弱磁默认关闭,把FIELD_WEAK_ENA设为 1 后,弱磁电流会在FIELD_WEAK_LO到FIELD_WEAK_HI两个门槛之间,从 0 线性升到FIELD_WEAK_MAX。⚠️ 重新校准弱磁后电机可能转得非常快,还会触发电池过压保护,动手前先把安全做足。
🎛️ 平衡车FOC参数配置:最常调的五个参数
参数集中在两个文件:Inc/config.h管行为开关和限值,Src/BLDC_controller_data.c管电机模型参数(全部是定点数,作者配套了 Fixed-Point Viewer 工具帮忙换算)。想标定轮径、齿比、电流这些电机参数,项目文档里放了一份标定结果示例可以参考:
最常动的五个:
**I_MOT_MAX**(默认 15 A):单电机电流上限。调大扭矩更猛、加速更快,但电机发热和电池负担都上来;调小更温和。第一次上手可以从 10 A 起步。**N_MOT_MAX**(默认 1000 rpm):最高转速上限。调大更快、调小更安全。第一次试车 300 rpm 足够,HOVERCAR 的新手档甚至锁到 30。**SPEED_COEFFICIENT**(默认 16384,即 1.0):油门灵敏度。调大轻轻一点就是满速请求,调小要使劲踩才有劲。**FIELD_WEAK_MAX**(默认 5 A):弱磁电流上限,越大速度上限越高。作者用 10 寸轮测到过 10 A,没有把握先别动它。**TIMEOUT**(默认 20):连续多少帧错误或缺失输入后紧急停机。调小保护反应更快,调大容忍串口抖动。
弱磁校准就是"画三条线"的事:多快开始介入(FIELD_WEAK_LO)、多快到满值(FIELD_WEAK_HI)、满值推多狠(FIELD_WEAK_MAX)。
如果你只改一个参数:把N_MOT_MAX调低到 300。它直接封住最坏情况的速度,玩熟了再逐步加回来。
🔒 安全红线
所有 FOC 模式都内置这套保护,不是可选功能:
| 保护项 | 触发条件 | 系统响应 |
|---|---|---|
| 相电流过流 | 单机电流超过I_MOT_MAX(15 A) | 控制器限制输出,钳住电流 |
| 母线过流 | DC 母线电流超过I_DC_MAX(17 A) | 立即关断 PWM(电流斩波),切断电机供电 |
| 超速 | 转速超过N_MOT_MAX | 速度环压住输出 |
| 输入超时 | 连续 20 帧错误/缺失输入 | 紧急停机,蜂鸣器报警,哔声数量区分 ADC、串口、通用超时 |
| 电池欠压 | 单芯电压低于 3.5 V / 3.37 V | 蜂鸣器分级警告,直接断电 |
| 主板过热 | 芯片温度超阈值(需先校准才允许启用) | 警告蜂鸣或断电 |
| 闲置超时 | 8 分钟无操作 | 自动断电 |
这些保护不是可选项,是底线。母线过流保护直接跑在 16 kHz 的硬件中断里,没有任何商量余地;不要因为保护碍事就去注释掉任何一条。测试电机时,离轮子远一点,手别去碰。
💡 能玩出什么花样
- 踏板 Hovercar(VARIANT_HOVERCAR):最经典的玩法。两只踏板管加速和刹车,上电时用踏板组合选档位——新手档锁 30 rpm 和 4 A,适合第一次上车;静止时双击刹车踏板还能挂倒挡。
- 电动滑板(VARIANT_SKATEBOARD):默认 TORQUE 模式,右线缆接遥控器 PWM 信号,松开油门车轮自由滑行;再开
ELECTRIC_BRAKE_ENABLE,滑行就变成恒定电刹,停车更听话。 - 串口遥控(VARIANT_USART):115200 波特率串口发指令就能控制左右轮,仓库里带了 Arduino 示例工程(
Arduino/hoverserial/),做电动躺椅、机械臂这类自建车很合适。 - 定速巡航:打开
CRUISE_CONTROL_SUPPORT再给侧板接一个按钮,按一下锁定当前速度,松脚不减速,长途巡航省力。
📌 后续演进
- VARIANT_HOVERBOARD 的平衡控制(balance controller)在配置里还标着 TODO,两轮站立骑行是社区最期待的功能
- 霍尔里程计
ENABLE_ODOMETRY已预留开关,打开后串口会输出左右轮转数计数 ELECTRIC_BRAKE_ENABLE和STANDSTILL_HOLD_ENABLE是两个现成的扩展开关:一个把滑行换成电刹,一个让车在停稳后原地锁住
改一行 config.h,你的电机就多一种性格。
【免费下载链接】hoverboard-firmware-hack-FOCWith Field Oriented Control (FOC)项目地址: https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考