☰
平衡车 FOC 固件入门:用 hoverboard-firmware-hack-FOC 重写电机控制
2026/10/23 2:06:29 网站建设 项目流程

平衡车 FOC 固件入门:用 hoverboard-firmware-hack-FOC 重写电机控制

【免费下载链接】hoverboard-firmware-hack-FOCWith Field Oriented Control (FOC)项目地址: https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC

给平衡车换底盘做卡丁车、电动滑板或机器人底盘,原厂六步换向电机噪声大、振动明显,电流利用也不高。hoverboard-firmware-hack-FOC 这个开源项目把电机控制换成场定向控制(FOC),固件直接烧进平衡车主板,转向更顺、转速上限更高,还能接各种输入设备。

先判断:你的平衡车能不能刷

先确认硬件,不匹配就别往下读了。这份固件面向"主板 + 两条侧板"的传统平衡车结构:

  • 主控芯片是STM32F103RCT6或GD32F103RCT6(两种都被支持)
  • 主板带两条 4 针侧板排线,引出 GND、12/15V 和 USART2、USART3
  • 不是分体主板(splitboard),那种要另用专门的固件
  • 手上有 ST-Link,能从 SWD 口(PA13/PA14/GND/3.3V)烧录

主板引脚和线序在 docs/ 的引脚图里标得很清楚:

侧板排线是输入设备的主要接口,两点要记牢:右侧(USART3)排线耐 5V,左侧(USART2)排线不耐 5V,接错会烧口。两条排线都能跑 UART / PWM / PPM / iBUS,左侧还能当 12bit ADC 用,右侧能挂 I2C。

它到底改变了什么:FOC、三种模式与场削弱

先把 FOC 说清楚。原厂的六步换向(commutation)是按固定六步顺序切换三相电流,简单但粗糙:电流角度对不准转子,转矩有脉动,就表现为噪声和抖动。场定向控制(FOC, Field Oriented Control)把三相电流分解成两个互相垂直的分量——一个专管转矩(q 轴),一个管磁场(d 轴),分别闭环,让电机在任何转速都尽量用最小的电流做出最大的转矩。

平衡车电机拆开后能看到三相铜绕组和定子磁钢,FOC 就是围绕这套结构做精确控制:

在 FOC 之下,固件提供三种控制模式,都在 Inc/config.h 里用CTRL_MOD_REQ切换:

  • 电压模式VLT_MODE:恒定电压输出,响应最快,机器人或需要电机立刻跟手的场景
  • 速度模式SPD_MODE:闭环跟踪转速目标、抗负载扰动,适合恒速应用
  • 扭矩模式TRQ_MODE:闭环跟踪扭矩,目标为 0 时可自由滑行,载人驾驶首选

再往上是场削弱(field weakening)。电机转到接近最高转速时,反电动势(转速越高、反向电压越大)会顶住电源电压,再想加速就得让磁场"让路"——d 轴注入反向电流削弱磁场,就能往上再挤一段转速。它默认是关的,开启后按FIELD_WEAK_LO到FIELD_WEAK_HI之间线性过渡,到FIELD_WEAK_HI达到最大削弱:

这三层其实是一条线:FOC 提供电流分解的基础,控制模式决定"控制什么量",场削弱决定"转速上限能多高"。改其中一处,另外两处都会受影响,所以调参要连着看。

从克隆到烧录:最短可跑通路径

最短的一条路:克隆 → 选变体 → 编译 → ST-Link 烧录。

  1. 克隆仓库:
git clone https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC
  1. 选变体。在 platformio.ini 的default_envs里打开一行,比如电位器控制:
default_envs = VARIANT_ADC

变体对应不同输入方式:VARIANT_ADC(电位器)、VARIANT_USART(串口)、VARIANT_NUNCHUK(Wii 手柄)、VARIANT_PPM/VARIANT_PWM/VARIANT_IBUS(遥控器)、VARIANT_HOVERCAR(踏板)等,细节配置在 Inc/config.h。

  1. 编译 + 烧录。用 PlatformIO 的话:
pio run -e VARIANT_ADC # 编译 pio run -t upload -e VARIANT_ADC # ST-Link 烧录

仓库里也带了 Makefile 和 MDK-ARM/(Keil 工程),可以改用make或 Keil 编译,产物是一个可直接烧录的固件包:

首次烧录前通常要先解锁 MCU 出厂的"读保护",这个坑见下一节。

把它变成你要的样子:变体、用途与调参

选变体,就是选输入和玩法

变体(variant)本质是"一套预设的输入接线 + 控制参数"。同一块主板,只换变体就能变成完全不同的机器:

  • VARIANT_ADC:两个电位器接左侧排线,最基础的调试方式
  • VARIANT_USART:用 Arduino 等经串口发命令,适合机器人,参考 Arduino/hoverserial/ 的示例草图
  • VARIANT_NUNCHUK:Wii 手柄单手控油门、刹车、转向,常用于电动轮椅
  • VARIANT_PPM/VARIANT_PWM/VARIANT_IBUS:遥控器(PPM 和脉宽信号、飞思卡尔 iBUS 协议)
  • VARIANT_HOVERCAR:油门 + 刹车两个踏板,静止时双击刹车进入倒车
  • VARIANT_SKATEBOARD:扭矩模式的电动滑板
  • VARIANT_TRANSPOTTER:基于平衡车的载人运输车
  • VARIANT_HOVERBOARD:读两块侧板数据,平衡控制算法目前尚未实现

选用途

改造成卡丁车是最常见的玩法,两个踏板加一个转向输入:

调电机参数

真正让车"手感对"的是电机参数,它们都放在 Src/BLDC_controller_data.c 里,用定点数(fixed-point)表示以省运算。仓库给了一份已校准的默认值,想微调再动它。

调参前最好先摸清电机本身(极对数、电阻、电感、反电动势)。如果手上有 VESC 控制器,可用它的"FOC 参数检测"自动量出来再填进去,比盲调省时间:

最常动的限幅参数在 Inc/config.h:

#define I_MOT_MAX 15 // [A] 单电机最大电流 #define N_MOT_MAX 1000 // [rpm] 最大转速

从默认值起步,先跑通,再逐个小步调。

别踩的坑

保护机制都内置了,但几处参数动了就危险:

  • 电流保护:单电机限流I_MOT_MAX(默认 15A)、直流母线条限流I_DC_MAX(默认 17A),超限会做电流削波
  • 转速限:N_MOT_MAX(默认 1000 rpm),所有 FOC 模式都有效
  • 电池电压分级:从绿灯正常到红灯急促报警,再到低压自动关机,阈值在 Inc/config.h 的BAT_*里,按你的电池串数校准
  • 温度保护:芯片内温传感器,TEMP_WARNING/TEMP_POWEROFF要先校准再开,不校准不准
  • 输入超时:连续 20 帧错误/丢失的输入命令会触发紧急关机(TIMEOUT)

场削弱是最容易出事的地方:开了之后电机会转得很快,功耗大涨,可能直接触发电池 BMS 的过压保护。调它时一定做好防护,从小电流FIELD_WEAK_MAX往上调。

还有一个高频坑:出厂的 MCU 开了读保护(readout protection),第一次连 ST-Link 会报"Can not read memory! Disable Read Out Protection"。得先做一次全片擦除解锁,之后再正常烧录,docs/ 的 wiki 有专门的解锁页:

周边与延伸

这个项目的价值一半在固件本身,一半在周围攒起来的生态,多数不用装本地环境就能用:

  • 网页串口控制:用浏览器直接遥控已刷固件的平衡车
  • 在线编译器:浏览器里编译固件,省去本地工具链
  • FOC 控制器设计:底层控制器以 Simulink 模型单独成库,还有个不依赖 Matlab 的 Webview,能直接观察控制器行为
  • 定点数查看器 FixedPointViewer:看/改定点数参数的辅助工具
  • 扩展板 breakout board:把侧板排线信号引出到标准接口,方便接传感器
  • ROS 驱动:接入机器人操作系统
  • 分体主板固件:给新型 splitboard 的独立实现
  • 社区:从旧的 Telegram 群迁到 Matrix,历史消息(含图片)都搬了过去

开始

先拆下车量一下主控型号,对上前面那张"能不能刷"的清单;能刷,就克隆仓库、选个VARIANT_ADC、用 ST-Link 烧一遍,跑通后再决定要不要改成卡丁车或机器人底盘。

先从默认参数跑起来,一次只动一个参数,把 FOC 三种模式和场削弱当成三档可拨的开关,而不是一次性全开。

【免费下载链接】hoverboard-firmware-hack-FOCWith Field Oriented Control (FOC)项目地址: https://gitcode.com/GitHub_Trending/ho/hoverboard-firmware-hack-FOC

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

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

立即咨询