littlebot
Published on 2025-04-17 / 0 Visits
0

【源码】基于Arduino的电机场定向控制项目

项目简介

本项目旨在解决当前低成本、低功耗场定向控制(FOC)支持板稀缺,以及适用于Arduino设备的稳定、简单的无刷直流(BLDC)和步进电机FOC算法代码难寻的问题。项目有两大核心部分,一是开发了用于实现电机FOC控制的Arduino SimpleFOClibrary库,二是设计了模块化硬件驱动板,包括Arduino SimpleFOCShield和新推出的Arduino StepperFOCShield,方便用户进行电机控制开发。

项目的主要特性和功能

库的特性

  1. 具备Arduino兼容性,以Arduino库代码形式存在,可通过Arduino Library Manager集成。
  2. 易于设置和配置,硬件配置与控制环调优都很便捷。
  3. 模块化设计,支持多种传感器、BLDC电机和驱动板,兼容Arduino UNO、MEGA、STM32 Nucleo、ESP32、Teensy等多种MCU架构。
  4. 即插即用,能与Arduino SimpleFOCShield完美配合。

硬件驱动板特性

  1. 即插即用,与Arduino SimpleFOClibrary无缝结合。
  2. 成本低,价格仅15欧元。
  3. 高功率支持,最大功率达100W,最大电流5A,电源电压范围为12 - 24V,适用于内阻大于10Ω的云台电机。
  4. 可堆叠,能同时运行两个电机。
  5. 接口丰富,集成编码器/霍尔传感器接口(带可配置的3.3kΩ上拉电阻)和I2C接口(带可配置的4.7kΩ上拉电阻)。
  6. 引脚可配置,可通过焊接连接进行硬件配置。
  7. 多板兼容,支持Arduino UNO、Arduino MEGA、STM32 Nucleo等多种开发板。
  8. 开源设计,提供完整的制造文件,用户可自行制作。

安装使用步骤

安装库

通过Arduino Library Manager

  1. 打开Arduino IDE,点击Tools > Manage Libraries...启动库管理器。
  2. 搜索Simple FOC库并安装最新版本。
  3. 重新打开Arduino IDE,在File > Examples > Simple FOC中可找到库的示例代码。

通过下载ZIP包

  1. 点击Clone or Download > Download ZIP下载代码压缩包。
  2. 解压文件并将其放置在Arduino Libraries文件夹中(Windows系统路径为Documents > Arduino > libraries)。
  3. 重新打开Arduino IDE,在File > Examples > Simple FOC中可找到库的示例代码。

通过终端

  1. 打开终端,进入Arduino库文件夹。
  2. 执行相应命令复制代码库。
  3. 重新打开Arduino IDE,在File > Examples > Simple FOC中可找到库的示例代码。

最小项目构建器

按照README文件中的教程,选择应用所需的库文件。

硬件连接与代码编写

  1. 根据电机类型和使用的传感器,连接相应的硬件引脚。
  2. 在代码中包含必要的头文件,并配置库参数。
  3. 使用库提供的函数和类编写电机控制代码,示例如下: ```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】