EFeru/hoverboard-firmware-hack-FOC
GitHub: EFeru/hoverboard-firmware-hack-FOC
一个针对悬浮板的FOC固件破解项目,通过磁场定向控制优化电机性能,降低噪音并提高效率。
Stars: 1617 | Forks: 1278
# hoverboard 固件破解 FOC
[](https://github.com/EFeru/hoverboard-firmware-hack-FOC/actions/workflows/build_on_commit.yml)
[](https://www.gnu.org/licenses/gpl-3.0)
[](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=CU2SWN2XV9SCY¤cy_code=EUR&source=url)
本仓库为原厂悬浮板实现了磁场定向控制。与换向方法相比,这种新的 FOC 控制方法提供了更优越的性能,其特点包括:
- 降低噪音和振动
- 平滑的扭矩输出和改进的电机效率。因此,能耗更低
- 弱磁以增加最大速度范围
# 目录
* **Wiki:** 请查看 [快速入门](https://github.com/EFeru/hoverboard-firmware-hack-FOC/wiki#getting-started) 和 [故障排除](https://github.com/EFeru/hoverboard-firmware-hack-FOC/wiki#troubleshooting) 的 wiki 页面
* [硬件](#hardware)
* [FOC 固件](#foc-firmware)
* [示例变体](#example-variants)
* [项目与链接](#projects-and-links)
* [贡献](#contributions)
#### 带有主板的悬浮板也附带 2 个侧边板(非 [分体板](https://github.com/EFeru/hoverboard-firmware-hack-FOC/wiki/Firmware-Compatibility#split-boards)),请查看以下关于此固件的 [wiki](https://github.com/EFeru/hoverboard-firmware-hack-FOC/wiki/Sideboards)
#### 关于 FOC 控制器设计,请参阅以下仓库:
- [bldc-motor-control-FOC](https://github.com/EFeru/bldc-motor-control-FOC)
#### 视频:
## 硬件

原始硬件支持两条最初连接到两个侧边板的 4 针电缆。它们引出了悬浮板主板的 GND、12/15V 和 USART2&3。USART2 和 USART3 都支持 UART、PWM、PPM 和 iBUS 输入。此外,USART2 可用作 12 位 ADC,而 USART3 可用于 I2C。请注意,虽然 USART3(右侧边板电缆)可承受 5V 电压,但 USART2(左侧边板电缆)**不**耐受 5V。
通常,主板主控芯片是 [STM32F103RCT6](/docs/literature/[10]_STM32F103xC_datasheet.pdf),但有些主板使用 [GD32F103RCT6](/docs/literature/[11]_GD32F103xx-Datasheet-Rev-2.7.pdf),此固件也支持后者。
关于主板的逆向工程原理图,请参阅 [20150722_hoverboard_sch.pdf](/docs/20150722_hoverboard_sch.pdf)
## FOC 固件
在此固件中,有 3 种控制类型可用,可以在 config.h 文件中通过 CTRL_TYP_SEL 参数设置:
- 换向 (COM_CTRL)
- 正弦波 (SIN_CTRL)
- 磁场定向控制 (FOC_CTRL),具有以下 3 种控制模式,可在 config.h 文件中使用参数 CTRL_MOD_REQ 设置:
- **电压模式 (VLT_MODE):** 在此模式下,控制器向电机施加恒定电压。推荐用于机器人应用或需要快速电机响应的应用。
- **速度模式 (SPD_MODE):** 在此模式下,闭环控制器通过抑制施加在电机上的任何干扰(阻性负载)来实现输入的速度目标(RPM)。推荐用于机器人应用或恒速应用。
- **扭矩模式 (TRQ_MODE):** 在此模式下实现输入的扭矩目标。当扭矩目标为 `0` 时,此模式允许电机"自由滑行"。推荐用于大多数有坐姿人类驾驶员的应用。
#### 不同控制方法的比较
| 控制方法 | 复杂性 | 效率 | 平顺性 | 弱磁 | 自由滑行 | 静止保持 |
|--|--|--|--|--|--|--|
| 换向 | - | - | ++ | 不适用 | 不适用 | + |
| 正弦波 | + | ++ | ++ | +++ | 不适用 | + |
| FOC 电压 | ++ | +++ | ++ | ++ | 不适用 | +(2) |
| FOC 速度 | +++ | +++ | + | ++ | 不适用 | +++ |
| FOC 扭矩 | +++ | +++ | +++ | ++ | +++(1) | 不适用(2) |
(1) 通过在 `config.h` 中启用 `ELECTRIC_BRAKE_ENABLE`,可以使用 `ELECTRIC_BRAKE_MAX` 参数调整自由滑行量。
(2) 静止保持功能可以通过在 `config.h` 中启用 `STANDSTILL_HOLD_ENABLE` 来强制实现。 在所有 FOC 控制模式下,控制器都具有最大电机速度和最大电机电流保护功能。这为满足许多机器人应用的需求同时保持安全操作带来了巨大优势。 ### 弱磁 / 相位超前 - 默认情况下,弱磁是禁用的。您可以在 config.h 文件中通过设置 FIELD_WEAK_ENA = 1 来启用它 - 弱磁是从 0 到 FIELD_WEAK_MAX 或 PHASE_ADV_MAX(取决于选择的是 FOC 还是 SIN)的线性插值 - 弱磁在 FIELD_WEAK_LO 时开始介入,在 FIELD_WEAK_HI 时达到最大值 - 下图显示了弱磁/相位超前的不同可能校准  ⚠️ 如果您重新校准弱磁,请采取所有安全措施!电机可能高速旋转! 功耗将大幅增加,并且可能触发 BMS 的过压保护 ⚠️ ### 参数 - 所有可校准的电机参数都可以在 'BLDC_controller_data.c' 中找到。我为您提供了一个已经校准过的控制器,但如果您想进行微调,请随意操作 - 参数以定点数据类型表示,以实现更高效的代码执行 - 要校准定点参数,请使用 [定点查看器](https://github.com/EFeru/FixedPointViewer) 工具 - 控制器参数在 [此表](https://github.com/EFeru/bldc-motor-control-FOC/blob/master/02_Figures/paramTable.png) 中给出 ### FOC Webview 要在不安装 Matlab/Simulink 的情况下探索控制器,请点击下方链接: [https://eferu.github.io/bldc-motor-control-FOC/](https://eferu.github.io/bldc-motor-control-FOC/) ## 示例变体 - **VARIANT_ADC:** 电机由连接到左侧传感器电缆(长线)的两个电位器控制 - **VARIANT_USART:** 电机通过串行协议控制(例如,通过 USART3 右侧传感器电缆,即短线)。命令可以从 Arduino 发送。请查看 [hoverserial.ino](/Arduino/hoverserial) 作为示例草图。 - **VARIANT_NUNCHUK:** Wii Nunchuk 提供单手控制油门、刹车和转向。这是用于电动轮椅或货箱车的首批输入设备之一。 - **VARIANT_PPM:** 带有 PPM 合成信号的 RC 遥控器。 - **VARIANT_PWM:** 带有 PWM 信号的 RC 遥控器。 - **VARIANT_IBUS:** 使用 Flysky iBUS 协议连接到左侧传感器电缆的 RC 遥控器。 - **VARIANT_HOVERCAR:** 电机由刹车和油门两个踏板控制。在静止状态下双击刹车踏板可挂入倒挡。请参阅 [HOVERCAR wiki](https://github.com/EFeru/hoverboard-firmware-hack-FOC/wiki/Variant-HOVERCAR)。 - **VARIANT_HOVERBOARD:** 主板读取两个侧边板的数据。侧边板需要刷入破解版本。平衡控制器**尚未**实现。 - **VARIANT_TRANSPOTTER:** 用于 transpotter 构建,这是一种基于悬浮板的运输系统。有关如何构建它的更多详情,请查看 [此处](https://github.com/NiklasFauth/hoverboard-firmware-hack/wiki/Build-Instruction:-TranspOtter) 和 [此处](https://hackaday.io/project/161891-transpotter-ng)。 - **VARIANT_SKATEBOARD:** 用于滑板构建,使用连接到右侧传感器电缆的 PWM 信号 RC 遥控器进行控制。 当然,固件可以进一步定制以满足其他需求或项目。 ## 项目与链接 - **原始固件:** [https://github.com/lucysrausch/hoverboard-firmware-hack](https://github.com/lucysrausch/hoverboard-firmware-hack) - **[Candas](https://github.com/Candas1/) 悬浮板网页串行控制:** [https://github.com/Candas1/Hoverboard-Web-Serial-Control](https://github.com/Candas1/Hoverboard-Web-Serial-Control) - **[RoboDurden's](https://github.com/RoboDurden) 在线编译器:** [https://pionierland.de/hoverhack/](https://pionierland.de/hoverhack/) - **适用于 AT32F403RCT6 主板的悬浮板破解:** [https://github.com/cloidnerux/hoverboard-firmware-hack](https://github.com/cloidnerux/hoverboard-firmware-hack) - **适用于分体主板的悬浮板破解:** [https://github.com/flo199213/Hoverboard-Firmware-Hack-Gen2](https://github.com/flo199213/Hoverboard-Firmware-Hack-Gen2) - **来自 BiPropellant 的悬浮板破解:** [https://github.com/bipropellant](https://github.com/bipropellant) - **悬浮板分线板:** [https://github.com/Jana-Marie/hoverboard-breakout](https://github.com/Jana-Marie/hoverboard-breakout) - **Bobbycar** [https://github.com/larsmm/hoverboard-firmware-hack-FOC-bbcar](https://github.com/larsmm/hoverboard-firmware-hack-FOC-bbcar) - **轮椅:** [https://github.com/Lahorde/steer_speed_ctrl](https://github.com/Lahorde/steer_speed_ctrl) - **TranspOtterNG:** [https://github.com/Jan--Henrik/transpOtterNG](https://github.com/Jan--Henrik/transpOtterNG) - **适用于 ROS 的悬浮板驱动:** [https://github.com/alex-makarov/hoverboard-driver](https://github.com/alex-makarov/hoverboard-driver) - **进行中的 OneWheel 项目:** [https://forum.esk8.news/t/yet-another-hoverboard-to-onewheel-project/60979/14](https://forum.esk8.news/t/yet-another-hoverboard-to-onewheel-project/60979/14) - **ST 社区:** [自定义 FOC 电机控制](https://community.st.com/s/question/0D50X0000B28qTDSQY/custom-foc-control-current-measurement-dma-timer-interrupt-needs-review) - **适用于刷机悬浮板的 Android 应用程序,支持遥控和界面** [需要 USB 连接](https://github.com/elioscordo/hoverdroid) - **Telegram 社区:** Telegram 群组已被群主关闭,但没关系,我们已经在 Matrix 上启动了一个副本,它无论如何都比 Telegram 更好 :) - **Matrix 社区:** [点击此处加入新的 Matrix 群组](https://matrix.to/#/#hooover:brunner.ninja)(我们导入了过去 5 年多来所有旧的 Telegram 消息,包括图片) ## 贡献 对本仓库的任何贡献都深表感谢!欢迎创建 Pull 请求来改进此固件,因为最终您将帮助到每个人。 如果您想捐款以保持此固件更新,请使用以下链接: [](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=CU2SWN2XV9SCY¤cy_code=EUR&source=url)
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
(2) 静止保持功能可以通过在 `config.h` 中启用 `STANDSTILL_HOLD_ENABLE` 来强制实现。 在所有 FOC 控制模式下,控制器都具有最大电机速度和最大电机电流保护功能。这为满足许多机器人应用的需求同时保持安全操作带来了巨大优势。 ### 弱磁 / 相位超前 - 默认情况下,弱磁是禁用的。您可以在 config.h 文件中通过设置 FIELD_WEAK_ENA = 1 来启用它 - 弱磁是从 0 到 FIELD_WEAK_MAX 或 PHASE_ADV_MAX(取决于选择的是 FOC 还是 SIN)的线性插值 - 弱磁在 FIELD_WEAK_LO 时开始介入,在 FIELD_WEAK_HI 时达到最大值 - 下图显示了弱磁/相位超前的不同可能校准  ⚠️ 如果您重新校准弱磁,请采取所有安全措施!电机可能高速旋转! 功耗将大幅增加,并且可能触发 BMS 的过压保护 ⚠️ ### 参数 - 所有可校准的电机参数都可以在 'BLDC_controller_data.c' 中找到。我为您提供了一个已经校准过的控制器,但如果您想进行微调,请随意操作 - 参数以定点数据类型表示,以实现更高效的代码执行 - 要校准定点参数,请使用 [定点查看器](https://github.com/EFeru/FixedPointViewer) 工具 - 控制器参数在 [此表](https://github.com/EFeru/bldc-motor-control-FOC/blob/master/02_Figures/paramTable.png) 中给出 ### FOC Webview 要在不安装 Matlab/Simulink 的情况下探索控制器,请点击下方链接: [https://eferu.github.io/bldc-motor-control-FOC/](https://eferu.github.io/bldc-motor-control-FOC/) ## 示例变体 - **VARIANT_ADC:** 电机由连接到左侧传感器电缆(长线)的两个电位器控制 - **VARIANT_USART:** 电机通过串行协议控制(例如,通过 USART3 右侧传感器电缆,即短线)。命令可以从 Arduino 发送。请查看 [hoverserial.ino](/Arduino/hoverserial) 作为示例草图。 - **VARIANT_NUNCHUK:** Wii Nunchuk 提供单手控制油门、刹车和转向。这是用于电动轮椅或货箱车的首批输入设备之一。 - **VARIANT_PPM:** 带有 PPM 合成信号的 RC 遥控器。 - **VARIANT_PWM:** 带有 PWM 信号的 RC 遥控器。 - **VARIANT_IBUS:** 使用 Flysky iBUS 协议连接到左侧传感器电缆的 RC 遥控器。 - **VARIANT_HOVERCAR:** 电机由刹车和油门两个踏板控制。在静止状态下双击刹车踏板可挂入倒挡。请参阅 [HOVERCAR wiki](https://github.com/EFeru/hoverboard-firmware-hack-FOC/wiki/Variant-HOVERCAR)。 - **VARIANT_HOVERBOARD:** 主板读取两个侧边板的数据。侧边板需要刷入破解版本。平衡控制器**尚未**实现。 - **VARIANT_TRANSPOTTER:** 用于 transpotter 构建,这是一种基于悬浮板的运输系统。有关如何构建它的更多详情,请查看 [此处](https://github.com/NiklasFauth/hoverboard-firmware-hack/wiki/Build-Instruction:-TranspOtter) 和 [此处](https://hackaday.io/project/161891-transpotter-ng)。 - **VARIANT_SKATEBOARD:** 用于滑板构建,使用连接到右侧传感器电缆的 PWM 信号 RC 遥控器进行控制。 当然,固件可以进一步定制以满足其他需求或项目。 ## 项目与链接 - **原始固件:** [https://github.com/lucysrausch/hoverboard-firmware-hack](https://github.com/lucysrausch/hoverboard-firmware-hack) - **[Candas](https://github.com/Candas1/) 悬浮板网页串行控制:** [https://github.com/Candas1/Hoverboard-Web-Serial-Control](https://github.com/Candas1/Hoverboard-Web-Serial-Control) - **[RoboDurden's](https://github.com/RoboDurden) 在线编译器:** [https://pionierland.de/hoverhack/](https://pionierland.de/hoverhack/) - **适用于 AT32F403RCT6 主板的悬浮板破解:** [https://github.com/cloidnerux/hoverboard-firmware-hack](https://github.com/cloidnerux/hoverboard-firmware-hack) - **适用于分体主板的悬浮板破解:** [https://github.com/flo199213/Hoverboard-Firmware-Hack-Gen2](https://github.com/flo199213/Hoverboard-Firmware-Hack-Gen2) - **来自 BiPropellant 的悬浮板破解:** [https://github.com/bipropellant](https://github.com/bipropellant) - **悬浮板分线板:** [https://github.com/Jana-Marie/hoverboard-breakout](https://github.com/Jana-Marie/hoverboard-breakout) - **Bobbycar** [https://github.com/larsmm/hoverboard-firmware-hack-FOC-bbcar](https://github.com/larsmm/hoverboard-firmware-hack-FOC-bbcar) - **轮椅:** [https://github.com/Lahorde/steer_speed_ctrl](https://github.com/Lahorde/steer_speed_ctrl) - **TranspOtterNG:** [https://github.com/Jan--Henrik/transpOtterNG](https://github.com/Jan--Henrik/transpOtterNG) - **适用于 ROS 的悬浮板驱动:** [https://github.com/alex-makarov/hoverboard-driver](https://github.com/alex-makarov/hoverboard-driver) - **进行中的 OneWheel 项目:** [https://forum.esk8.news/t/yet-another-hoverboard-to-onewheel-project/60979/14](https://forum.esk8.news/t/yet-another-hoverboard-to-onewheel-project/60979/14) - **ST 社区:** [自定义 FOC 电机控制](https://community.st.com/s/question/0D50X0000B28qTDSQY/custom-foc-control-current-measurement-dma-timer-interrupt-needs-review) - **适用于刷机悬浮板的 Android 应用程序,支持遥控和界面** [需要 USB 连接](https://github.com/elioscordo/hoverdroid) - **Telegram 社区:** Telegram 群组已被群主关闭,但没关系,我们已经在 Matrix 上启动了一个副本,它无论如何都比 Telegram 更好 :) - **Matrix 社区:** [点击此处加入新的 Matrix 群组](https://matrix.to/#/#hooover:brunner.ninja)(我们导入了过去 5 年多来所有旧的 Telegram 消息,包括图片) ## 贡献 对本仓库的任何贡献都深表感谢!欢迎创建 Pull 请求来改进此固件,因为最终您将帮助到每个人。 如果您想捐款以保持此固件更新,请使用以下链接: [](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=CU2SWN2XV9SCY¤cy_code=EUR&source=url)
标签:BLDC, STM32, 噪音减少, 固件开发, 固件黑客, 场定向控制, 客户端加密, 嵌入式系统, 平衡车, 开源硬件, 弱磁控制, 性能优化, 悬浮板, 扭矩输出, 振动控制, 无刷电机, 机器人技术, 检测绕过, 电子工程, 电机控制, 电机效率, 电机驱动, 硬件修改, 网络调试, 能源效率, 能耗降低, 自动化, 速度提升





