项目简介
本项目旨在解决当前低成本、低功耗场定向控制(FOC)支持板稀缺,以及适用于Arduino设备的稳定、简单的无刷直流(BLDC)和步进电机FOC算法代码难寻的问题。项目有两大核心部分,一是开发了用于实现电机FOC控制的Arduino SimpleFOClibrary库,二是设计了模块化硬件驱动板,包括Arduino SimpleFOCShield和新推出的Arduino StepperFOCShield,方便用户进行电机控制开发。
项目的主要特性和功能
库的特性
- 具备Arduino兼容性,以Arduino库代码形式存在,可通过Arduino Library Manager集成。
- 易于设置和配置,硬件配置与控制环调优都很便捷。
- 模块化设计,支持多种传感器、BLDC电机和驱动板,兼容Arduino UNO、MEGA、STM32 Nucleo、ESP32、Teensy等多种MCU架构。
- 即插即用,能与Arduino SimpleFOCShield完美配合。
硬件驱动板特性
- 即插即用,与Arduino SimpleFOClibrary无缝结合。
- 成本低,价格仅15欧元。
- 高功率支持,最大功率达100W,最大电流5A,电源电压范围为12 - 24V,适用于内阻大于10Ω的云台电机。
- 可堆叠,能同时运行两个电机。
- 接口丰富,集成编码器/霍尔传感器接口(带可配置的3.3kΩ上拉电阻)和I2C接口(带可配置的4.7kΩ上拉电阻)。
- 引脚可配置,可通过焊接连接进行硬件配置。
- 多板兼容,支持Arduino UNO、Arduino MEGA、STM32 Nucleo等多种开发板。
- 开源设计,提供完整的制造文件,用户可自行制作。
安装使用步骤
安装库
通过Arduino Library Manager
- 打开Arduino IDE,点击
Tools > Manage Libraries...
启动库管理器。 - 搜索
Simple FOC
库并安装最新版本。 - 重新打开Arduino IDE,在
File > Examples > Simple FOC
中可找到库的示例代码。
通过下载ZIP包
- 点击
Clone or Download > Download ZIP
下载代码压缩包。 - 解压文件并将其放置在
Arduino Libraries
文件夹中(Windows系统路径为Documents > Arduino > libraries
)。 - 重新打开Arduino IDE,在
File > Examples > Simple FOC
中可找到库的示例代码。
通过终端
- 打开终端,进入Arduino库文件夹。
- 执行相应命令复制代码库。
- 重新打开Arduino IDE,在
File > Examples > Simple FOC
中可找到库的示例代码。
最小项目构建器
按照README文件中的教程,选择应用所需的库文件。
硬件连接与代码编写
- 根据电机类型和使用的传感器,连接相应的硬件引脚。
- 在代码中包含必要的头文件,并配置库参数。
- 使用库提供的函数和类编写电机控制代码,示例如下: ```cpp
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 = ControlType::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); } ``` 4. 将代码上传到Arduino板,并进行测试。
更多详细信息可查看项目文档。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】