☰
hoverboard-firmware-hack-FOC:开源平衡车FOC固件深度拆解
2026/10/23 4:08:56 网站建设 项目流程

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 波特率看调试信息
  • 单轮测试台:电机真的会转,轮子架起来测,别用手扶

编译

  1. 克隆代码:
git clone https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC.git cd hoverboard-firmware-hack-FOC
  1. 选一个变体编译。以电位器变体 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),仅供参考

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

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

立即咨询