simplefoc/Arduino-FOC
GitHub: simplefoc/Arduino-FOC
一个跨平台的 Arduino 磁场定向控制库,用于简化无刷直流电机和步进电机的高精度控制开发。
Stars: 2923 | Forks: 725
# SimpleFOClibrary - **简易**磁场定向控制 (FOC) **库**
### 基于 Arduino IDE 和 PlatformIO 的跨平台 BLDC 和步进电机 FOC 实现
[](https://github.com/simplefoc/Arduino-FOC/actions/workflows/arduino.yml) [](https://github.com/simplefoc/Arduino-FOC/actions/workflows/stm32.yml) [](https://github.com/simplefoc/Arduino-FOC/actions/workflows/esp32.yml) [](https://github.com/simplefoc/Arduino-FOC/actions/workflows/rpi.yml) [](https://github.com/simplefoc/Arduino-FOC/actions/workflows/samd.yml) [](https://github.com/simplefoc/Arduino-FOC/actions/workflows/teensy.yml) [](https://github.com/simplefoc/Arduino-FOC/actions/workflows/arduino_mbed.yml)     [](https://www.ardu-badge.com/badge/Simple%20FOC.svg) [](https://registry.platformio.org/libraries/askuric/Simple%20FOC) [](https://opensource.org/licenses/MIT) [](https://joss.theoj.org/papers/4382445f249e9f0a7f6c1bb06b1d) 我们生活在一个非常激动人心的时代 😃!BLDC 电机越来越多地进入爱好者社区,并且已经涌现出许多利用其卓越的动态性能和强大功能的优秀项目。与普通的直流电机相比,这些电机具有许多优势,但它们也有一个很大的缺点:控制复杂。尽管现在设计和制造 PCB 以及创建我们自己的 BLDC 电机驱动硬件解决方案变得相对容易,但开发合适的低成本解决方案仍然具有挑战性。其原因之一在于编写驱动算法的复杂性显而易见,而磁场定向控制 (FOC) 正是目前最有效的算法之一。 网上能找到的解决方案几乎完全特定于某些硬件配置和微控制器架构。与 BLDC 类似,步进电机也能从 FOC 控制中获益良多,但针对 FOC 控制步进电机的解决方案更是少之又少。
因此,我们试图: - 🎯 揭开 FOC 算法的神秘面纱,并构建一个坚固而简单的 Arduino 库:[Arduino SimpleFOClibrary](https://docs.simplefoc.com/arduino_simplefoc_library_showcase) - 支持尽可能多的 电机 + 传感器 + 驱动器 + mcu 组合 - 让从一种硬件组合到另一种硬件组合的过渡尽可能无缝 - 🎯 开发模块化且易于使用的支持 FOC 的驱动板 - 官方驱动板请见 [SimpleFOCBoards](https://docs.simplefoc.com/boards) - 还有许多由社区成员开发的开发板,请参见 [SimpleFOC Community](https://community.simplefoc.com/) ## Arduino *SimpleFOClibrary*  这个视频虽然有点过时,但它展示了 *Simple**FOC**library* 的基本用法、电子连接并演示了它的功能。 ### 功能 - **易于安装**: - Arduino IDE:集成了 Arduino Library Manager - PlatformIO - **开源**:完整的代码和文档可在 github 上获取 - **目标**: - 支持尽可能多的[传感器](https://docs.simplefoc.com/position_sensors) + [电机](https://docs.simplefoc.com/motors) + [驱动器](https://docs.simplefoc.com/drivers) + [电流检测](https://docs.simplefoc.com/current_sense)组合 - 让从一种硬件组合到另一种硬件组合的过渡尽可能无缝 - 提供包含 API 参考和示例的最新深入文档 - **易于设置和配置**: - 简单的硬件配置 - 每个硬件组件都是一个 C++ 对象(易于理解) - 易于[调整控制环路](https://docs.simplefoc.com/motion_control) - 高级控制功能:速度和电流前馈,改进的速度计算 - [*Simple**FOC**Studio*](https://docs.simplefoc.com/studio) 配置 GUI 工具,用于实时调参和监控 - 通过 Serial、I2C 或自定义协议内置通信和监控 - **跨平台**: - 从一种微控制器系列到另一种的无缝代码迁移 - 支持多种 [MCU 架构](https://docs.simplefoc.commicrocontrollers): - Arduino:UNO R4, UNO, MEGA, DUE, Leonardo, Nano, Nano33, MKR .... - STM32 (Nucleo, Bluepill, B-G431B-ESC1, H7 family, 等.) - ESP32 (ESP32, ESP32-S2, ESP32-S3, ESP32-C3, ESP32-C6) - Teensy (3.x, 4.x) - RP2040/RP2350 (Raspberry Pi Pico) - SAMD (Arduino Zero, MKR boards) - MBED (Portenta, Nano 33 BLE) - Silabs - 更多 ... ## 文档 完整的 API 代码文档以及示例项目和分步指南可以在我们的[文档网站](https://docs.simplefoc.com/)上找到。  ## 入门指南 取决于您是想将此库作为即插即用的 Arduino 库使用,还是想深入了解算法并进行修改,有两种安装此代码的方法。 - 完整的库安装 [文档](https://docs.simplefoc.com/library_download) - PlatformIO [文档](https://docs.simplefoc.com/library_platformio) ### 将 Arduino *SimpleFOClibrary* 安装到 Arduino IDE #### Arduino Library Manager 获取该库最简单的方法是直接使用 Arduino IDE 及其集成的 Library Manager。 - 打开 Arduino IDE 并点击以下内容启动 Arduino Library Manager:`Tools > Manage Libraries...`。 - 搜索 `Simple FOC` 库并安装最新版本。 - 重新打开 Arduino IDE,您应该可以在 `File > Examples > Simple FOC` 中找到库示例。 #### 使用 Github 网站 - 进入 [github 仓库](https://github.com/simplefoc/Arduino-FOC) - 首先点击 `Clone or Download > Download ZIP`。 - 将其解压并放置在 `Arduino Libraries` 文件夹中。Windows:`Documents > Arduino > libraries`。 - 重新打开 Arduino IDE,您应该可以在 `File > Examples > Simple FOC` 中找到库示例。 #### 使用终端 - 打开终端并运行 ``` cd #Arduino libraries folder git clone https://github.com/simplefoc/Arduino-FOC.git ``` - 重新打开 Arduino IDE,您应该可以在 `File > Examples > Simple FOC` 中找到库示例。 ## Arduino 代码示例 这是一个简单的 Arduino 代码示例,实现了带有编码器的 BLDC 电机的速度控制程序。 注意:此程序使用了所有默认的控制参数。 ``` #include
// BLDCMotor( pole_pairs )
BLDCMotor motor = BLDCMotor(11);
// BLDCDriver( pin_pwmA, pin_pwmB, pin_pwmC, enable (optional) )
BLDCDriver3PWM driver = BLDCDriver3PWM(9, 10, 11, 8);
// Encoder(pin_A, pin_B, CPR)
Encoder encoder = Encoder(2, 3, 2048);
// channel A and B callbacks
void doA(){encoder.handleA();}
void doB(){encoder.handleB();}
void setup() {
// initialize encoder hardware
encoder.init();
// hardware interrupt enable
encoder.enableInterrupts(doA, doB);
// link the motor to the sensor
motor.linkSensor(&encoder);
// power supply voltage [V]
driver.voltage_power_supply = 12;
// initialise driver hardware
driver.init();
// link driver
motor.linkDriver(&driver);
// set control loop type to be used
motor.controller = MotionControlType::velocity;
// initialize motor
motor.init();
// align encoder and start FOC
motor.initFOC();
}
void loop() {
// FOC algorithm function
motor.loopFOC();
// velocity control loop function
// setting the target velocity or 2rad/s
motor.move(2);
}
```
您可以在 [SimpleFOC 文档](https://docs.simplefoc.com/)中找到更多详细信息。
## 示例项目
以下是一些 *Simple**FOC**library* 和 *Simple**FOC**Shield* 的应用示例。
## 引用 *SimpleFOC*
我们非常高兴 *Simple**FOC**library* 能被作为多个研究项目的组成部分,并出现在多篇科学论文中。我们希望随着项目的成熟和健壮性的提高,这种趋势能够继续下去!
一篇关于 *Simple**FOC*** 的简短论文已发表在《开源软件杂志》(Journal of Open Source Software) 上:
### 基于 Arduino IDE 和 PlatformIO 的跨平台 BLDC 和步进电机 FOC 实现
[](https://github.com/simplefoc/Arduino-FOC/actions/workflows/arduino.yml) [](https://github.com/simplefoc/Arduino-FOC/actions/workflows/stm32.yml) [](https://github.com/simplefoc/Arduino-FOC/actions/workflows/esp32.yml) [](https://github.com/simplefoc/Arduino-FOC/actions/workflows/rpi.yml) [](https://github.com/simplefoc/Arduino-FOC/actions/workflows/samd.yml) [](https://github.com/simplefoc/Arduino-FOC/actions/workflows/teensy.yml) [](https://github.com/simplefoc/Arduino-FOC/actions/workflows/arduino_mbed.yml)     [](https://www.ardu-badge.com/badge/Simple%20FOC.svg) [](https://registry.platformio.org/libraries/askuric/Simple%20FOC) [](https://opensource.org/licenses/MIT) [](https://joss.theoj.org/papers/4382445f249e9f0a7f6c1bb06b1d) 我们生活在一个非常激动人心的时代 😃!BLDC 电机越来越多地进入爱好者社区,并且已经涌现出许多利用其卓越的动态性能和强大功能的优秀项目。与普通的直流电机相比,这些电机具有许多优势,但它们也有一个很大的缺点:控制复杂。尽管现在设计和制造 PCB 以及创建我们自己的 BLDC 电机驱动硬件解决方案变得相对容易,但开发合适的低成本解决方案仍然具有挑战性。其原因之一在于编写驱动算法的复杂性显而易见,而磁场定向控制 (FOC) 正是目前最有效的算法之一。 网上能找到的解决方案几乎完全特定于某些硬件配置和微控制器架构。与 BLDC 类似,步进电机也能从 FOC 控制中获益良多,但针对 FOC 控制步进电机的解决方案更是少之又少。
因此,我们试图: - 🎯 揭开 FOC 算法的神秘面纱,并构建一个坚固而简单的 Arduino 库:[Arduino SimpleFOClibrary](https://docs.simplefoc.com/arduino_simplefoc_library_showcase) - 支持尽可能多的 电机 + 传感器 + 驱动器 + mcu 组合 - 让从一种硬件组合到另一种硬件组合的过渡尽可能无缝 - 🎯 开发模块化且易于使用的支持 FOC 的驱动板 - 官方驱动板请见 [SimpleFOCBoards](https://docs.simplefoc.com/boards) - 还有许多由社区成员开发的开发板,请参见 [SimpleFOC Community](https://community.simplefoc.com/) ## Arduino *SimpleFOClibrary*  这个视频虽然有点过时,但它展示了 *Simple**FOC**library* 的基本用法、电子连接并演示了它的功能。 ### 功能 - **易于安装**: - Arduino IDE:集成了 Arduino Library Manager - PlatformIO - **开源**:完整的代码和文档可在 github 上获取 - **目标**: - 支持尽可能多的[传感器](https://docs.simplefoc.com/position_sensors) + [电机](https://docs.simplefoc.com/motors) + [驱动器](https://docs.simplefoc.com/drivers) + [电流检测](https://docs.simplefoc.com/current_sense)组合 - 让从一种硬件组合到另一种硬件组合的过渡尽可能无缝 - 提供包含 API 参考和示例的最新深入文档 - **易于设置和配置**: - 简单的硬件配置 - 每个硬件组件都是一个 C++ 对象(易于理解) - 易于[调整控制环路](https://docs.simplefoc.com/motion_control) - 高级控制功能:速度和电流前馈,改进的速度计算 - [*Simple**FOC**Studio*](https://docs.simplefoc.com/studio) 配置 GUI 工具,用于实时调参和监控 - 通过 Serial、I2C 或自定义协议内置通信和监控 - **跨平台**: - 从一种微控制器系列到另一种的无缝代码迁移 - 支持多种 [MCU 架构](https://docs.simplefoc.commicrocontrollers): - Arduino:UNO R4, UNO, MEGA, DUE, Leonardo, Nano, Nano33, MKR .... - STM32 (Nucleo, Bluepill, B-G431B-ESC1, H7 family, 等.) - ESP32 (ESP32, ESP32-S2, ESP32-S3, ESP32-C3, ESP32-C6) - Teensy (3.x, 4.x) - RP2040/RP2350 (Raspberry Pi Pico) - SAMD (Arduino Zero, MKR boards) - MBED (Portenta, Nano 33 BLE) - Silabs - 更多 ... ## 文档 完整的 API 代码文档以及示例项目和分步指南可以在我们的[文档网站](https://docs.simplefoc.com/)上找到。  ## 入门指南 取决于您是想将此库作为即插即用的 Arduino 库使用,还是想深入了解算法并进行修改,有两种安装此代码的方法。 - 完整的库安装 [文档](https://docs.simplefoc.com/library_download) - PlatformIO [文档](https://docs.simplefoc.com/library_platformio) ### 将 Arduino *SimpleFOClibrary* 安装到 Arduino IDE #### Arduino Library Manager 获取该库最简单的方法是直接使用 Arduino IDE 及其集成的 Library Manager。 - 打开 Arduino IDE 并点击以下内容启动 Arduino Library Manager:`Tools > Manage Libraries...`。 - 搜索 `Simple FOC` 库并安装最新版本。 - 重新打开 Arduino IDE,您应该可以在 `File > Examples > Simple FOC` 中找到库示例。 #### 使用 Github 网站 - 进入 [github 仓库](https://github.com/simplefoc/Arduino-FOC) - 首先点击 `Clone or Download > Download ZIP`。 - 将其解压并放置在 `Arduino Libraries` 文件夹中。Windows:`Documents > Arduino > libraries`。 - 重新打开 Arduino IDE,您应该可以在 `File > Examples > Simple FOC` 中找到库示例。 #### 使用终端 - 打开终端并运行 ``` cd #Arduino libraries folder git clone https://github.com/simplefoc/Arduino-FOC.git ``` - 重新打开 Arduino IDE,您应该可以在 `File > Examples > Simple FOC` 中找到库示例。 ## Arduino 代码示例 这是一个简单的 Arduino 代码示例,实现了带有编码器的 BLDC 电机的速度控制程序。 注意:此程序使用了所有默认的控制参数。 ``` #include
SimpleFOC:用于控制无刷直流 (BLDC) 电机和步进电机的磁场定向控制 (FOC) 库。
A. Skuric, HS. Bank, R. Unger, O. Williams, D. González-Reyes
Journal of Open Source Software, 7(74), 4232, https://doi.org/10.21105/joss.04232
标签:Arduino, BLDC, FOC, 嵌入式开发, 步进电机, 电机控制