【花雕学编程】Arduino BLDC 之通过TMCStepper库与驱动模块进行通信

在这里插入图片描述
Arduino是一个开放源码的电子原型平台,它可以让你用简单的硬件和软件来创建各种互动的项目。Arduino的核心是一个微控制器板,它可以通过一系列的引脚来连接各种传感器、执行器、显示器等外部设备。Arduino的编程是基于C/C++语言的,你可以使用Arduino IDE(集成开发环境)来编写、编译和上传代码到Arduino板上。Arduino还有一个丰富的库和社区,你可以利用它们来扩展Arduino的功能和学习Arduino的知识。

Arduino的特点是:
1、开放源码:Arduino的硬件和软件都是开放源码的,你可以自由地修改、复制和分享它们。
2、易用:Arduino的硬件和软件都是为初学者和非专业人士设计的,你可以轻松地上手和使用它们。
3、便宜:Arduino的硬件和软件都是非常经济的,你可以用很低的成本来实现你的想法。
4、多样:Arduino有多种型号和版本,你可以根据你的需要和喜好来选择合适的Arduino板。
5、创新:Arduino可以让你用电子的方式来表达你的创意和想象,你可以用Arduino来制作各种有趣和有用的项目,如机器人、智能家居、艺术装置等。

在这里插入图片描述
Arduino BLDC(无刷直流电机)是指使用Arduino平台来控制无刷直流电机(Brushless DC Motor)的一系列技术和应用。无刷直流电机是一种先进的电机技术,它利用电子换向来替代传统的碳刷和换向器,从而提供更高效、更可靠和更低维护成本的电机驱动解决方案。以下是对Arduino BLDC的全面详细科学解释:

1、主要特点:
无刷设计:BLDC电机没有碳刷和换向器,消除了电刷磨损和电磁干扰,提高了电机的寿命和效率。
电子换向:通过电子控制器实现换向,响应速度快,控制精度高。
高效率和高扭矩:BLDC电机具有高效率和高扭矩密度,适合需要快速响应和大扭矩的应用。
低维护:由于没有物理接触的电刷和换向器,维护需求低。
良好的控制性能:BLDC电机可以精确控制速度和位置,适合闭环控制系统。
Arduino平台兼容性:利用Arduino的灵活性和丰富的库支持,可以方便地实现对BLDC电机的控制。

2、应用场景:
机器人:在机器人技术中,BLDC电机用于精确控制机器人的关节和运动。
无人机:无人机(UAV)使用BLDC电机来实现稳定和高效的飞行。
电动车辆:电动汽车和电动自行车利用BLDC电机提供动力和扭矩。
工业自动化:在自动化设备中,BLDC电机用于精确控制机械臂和传送带。
家用电器:一些高性能家电,如洗衣机和空调,使用BLDC电机来提高能效和性能。
医疗设备:医疗设备中的电机驱动,如手术工具和诊断设备,也采用BLDC电机。

3、需要注意的事项:
控制算法:需要合适的控制算法,如FOC(Field Oriented Control),来实现BLDC电机的最佳性能。
驱动器选择:根据电机的电压和电流规格选择合适的驱动器。
编码器集成:为了实现精确的速度和位置控制,可能需要集成编码器。
软件工具:使用Arduino IDE或其他软件工具来编写和上传控制代码。
电源管理:确保电源供应稳定且符合电机的工作要求。
热管理:设计合适的散热方案,以防止电机和驱动器过热。
电磁兼容性:注意电磁兼容性设计,减少对其他设备的干扰。
安全考虑:设计时要考虑人员安全和设备安全的保护措施。

通过上述详细解释,我们可以看到Arduino BLDC电机控制系统是一种高效、灵活且应用广泛的技术解决方案。在设计和实施过程中,需要注意选择合适的控制算法、驱动器、编码器以及考虑电源管理、热管理和电磁兼容性等关键因素。

在这里插入图片描述
1、主要特点:
TMCStepper 是一个专用于与 Trinamic 公司 BLDC 电机驱动模块进行通信的 Arduino 库。
该库提供了一套简单易用的 API,可以方便地对 Trinamic 驱动芯片进行配置和控制。
通过 TMCStepper 库,Arduino BLDC 系统可以与 Trinamic 的驱动模块实现高速、低噪声的通信,并获取电机状态信息。
TMCStepper 库支持多种通信接口,如 SPI、UART、I2C 等,可根据实际应用选择合适的接口。
该库集成了丰富的功能,如电机驱动参数设置、电流检测、微步模式切换等,大大简化了 BLDC 电机控制的复杂性。
TMCStepper 库可以与 Arduino 的其他外设库(如 Servo、PID 等)无缝集成,实现更复杂的控制算法。

2、应用场景:
工业机器人:BLDC 电机广泛应用于工业机器人的关节驱动,TMCStepper 库可提供高性能的电机控制。
3D 打印机:BLDC 电机常用于 3D 打印机的喷头和挤出机驱动,TMCStepper 库可实现精确的位置/速度控制。
数控机床:BLDC 电机广泛应用于数控机床的各类驱动系统,TMCStepper 库可提供可靠的电机控制。
医疗设备:BLDC 电机可用于医疗机器人、康复训练设备等,TMCStepper 库可确保安全可靠的电机驱动。
航模/无人机:BLDC 电机是无人机/航模的常用动力源,TMCStepper 库可实现精准的转速控制。

3、需要注意的事项:
硬件接口配置:TMCStepper 库支持多种通信接口,需要根据实际 Trinamic 驱动模块选择合适的接口并进行正确配置。
驱动模块参数设置:TMCStepper 库提供了大量的驱动参数设置 API,需要根据电机和负载特性进行合理配置。
通信故障处理:BLDC 电机驱动系统可能会出现通信故障,TMCStepper 库应提供有效的错误处理机制。
安全保护措施:TMCStepper 库应实现过流、过温等保护机制,确保电机驱动在各种工况下的安全可靠运行。
与其他库的集成:TMCStepper 库需要与 Arduino 的其他外设库(如 Servo、PID 等)进行良好集成,实现更复杂的控制算法。
性能优化:针对不同的应用场景,需要对 TMCStepper 库的通信速率、功耗等进行优化,提高系统整体性能。

总的来说,Arduino BLDC 系统中使用 TMCStepper 库与 Trinamic 驱动模块进行通信是一种行之有效的解决方案。在实际应用中,需要重点关注硬件接口配置、驱动模块参数设置、通信故障处理、安全保护措施、与其他库的集成以及性能优化等多方面因素,充分发挥 TMCStepper 库的功能优势。

在这里插入图片描述
以下是及个使用TMCStepper库与驱动模块进行通信的Arduino BLDC实际运用程序参考代码案例:

1、旋转电机

#include <TMCStepper.h>

#define EN_PIN 8
#define DIR_PIN 9
#define STEP_PIN 10

TMC2208Stepper stepper = TMC2208Stepper(EN_PIN, DIR_PIN, STEP_PIN);

void setup() {
  stepper.begin();
  stepper.TCOOLTHRS(0xFFFFF); // 设置冷却阈值
  stepper.COOLCONF(0x0E); // 设置冷却配置
  stepper.microsteps(16); // 设置细分数
  stepper.IHOLD_IRUN(0x50); // 设置保持电流和运行电流
}

void loop() {
  stepper.rotate(360); // 旋转电机一周
  delay(1000);
}

要点解读:
使用TMC2208Stepper类来控制BLDC电机。
stepper.begin()用于初始化驱动器。
stepper.TCOOLTHRS()设置冷却阈值,防止驱动器过热。
stepper.COOLCONF()设置冷却配置,可以根据需要进行调整。
stepper.microsteps()设置细分数,这里设置为16细分。
stepper.IHOLD_IRUN()设置保持电流和运行电流。
stepper.rotate(360)使电机旋转一周。

2、改变电机速度

#include <TMCStepper.h>

#define EN_PIN 8
#define DIR_PIN 9
#define STEP_PIN 10

TMC2208Stepper stepper = TMC2208Stepper(EN_PIN, DIR_PIN, STEP_PIN);

void setup() {
  stepper.begin();
  stepper.TCOOLTHRS(0xFFFFF);
  stepper.COOLCONF(0x0E);
  stepper.microsteps(16);
  stepper.IHOLD_IRUN(0x50);
}

void loop() {
  stepper.rotate(360, 200); // 旋转电机一周,速度为200
  delay(1000);
}

要点解读:
在案例一的基础上,使用stepper.rotate(360, 200)指定电机旋转一周的速度为200。
速度值可以根据需要进行调整。

3、正反转电机

#include <TMCStepper.h>

#define EN_PIN 8
#define DIR_PIN 9
#define STEP_PIN 10

TMC2208Stepper stepper = TMC2208Stepper(EN_PIN, DIR_PIN, STEP_PIN);

void setup() {
  stepper.begin();
  stepper.TCOOLTHRS(0xFFFFF);
  stepper.COOLCONF(0x0E);
  stepper.microsteps(16);
  stepper.IHOLD_IRUN(0x50);
}

void loop() {
  stepper.rotate(360, 200); // 顺时针旋转电机一周,速度为200
  delay(1000);
  stepper.rotate(-360, 200); // 逆时针旋转电机一周,速度为200
  delay(1000);
}

要点解读:
在案例二的基础上,使用stepper.rotate(-360, 200)将电机设置为逆时针旋转一周。
可以通过正负值来控制电机的旋转方向。
这些代码案例展示了如何使用TMCStepper库与驱动模块进行通信控制Arduino BLDC电机。你可以根据实际需求进行修改和扩展。

在这里插入图片描述
4、基础的BLDC电机驱动控制

#include <TMCStepper.h>

// 定义BLDC电机驱动模块的引脚
#define EN_PIN    38
#define STEP_PIN  54
#define DIR_PIN   55

// 创建TMC2130驱动实例
TMC2130Stepper driver = TMC2130Stepper(EN_PIN, DIR_PIN, STEP_PIN);

void setup() {
  // 初始化串口通信
  Serial.begin(115200);

  // 配置TMC2130驱动器
  driver.begin();
  driver.rms_current(600); // 设置最大电流600mA
  driver.microsteps(16);   // 设置细分为16细分
  driver.en_pwm_mode(true);// 开启BLDC模式
}

void loop() {
  // 正转
  driver.shaft_dir(1);
  for (int i = 0; i < 3200; i++) {
    driver.step();
    delay(1);
  }

  // 反转
  driver.shaft_dir(0);
  for (int i = 0; i < 3200; i++) {
    driver.step();
    delay(1);
  }
}

要点解读:
使用TMCStepper库控制TMC2130电机驱动模块。
在 setup() 函数中初始化驱动器,设置电流和细分。
在 loop() 函数中,通过设置 shaft_dir() 和调用 step() 函数实现电机正反转。

5、BLDC电机速度闭环控制

#include <TMCStepper.h>
#include <MPU6050.h>

// 定义BLDC电机驱动模块的引脚
#define EN_PIN    38
#define STEP_PIN  54
#define DIR_PIN   55

// 创建TMC2130驱动实例
TMC2130Stepper driver = TMC2130Stepper(EN_PIN, DIR_PIN, STEP_PIN);

// 创建MPU6050实例
MPU6050 mpu;
int16_t gx, gy, gz;

void setup() {
  Serial.begin(115200);
  Wire.begin();
  mpu.initialize();

  // 配置TMC2130驱动器
  driver.begin();
  driver.rms_current(600); // 设置最大电流600mA
  driver.microsteps(16);   // 设置细分为16细分
  driver.en_pwm_mode(true);// 开启BLDC模式

  // 配置MPU6050
  mpu.setFullScaleGyroRange(MPU6050_GYRO_FS_1000);
}

void loop() {
  mpu.getRotation(&gx, &gy, &gz);

  // 根据陀螺仪数据计算目标转速
  int target_speed = map(gz, -32768, 32767, -3200, 3200);

  // 使用PID控制电机转速
  int error = target_speed - driver.getPosition();
  driver.shaft_dir(error > 0 ? 1 : 0);
  driver.step(abs(error));

  delay(1);
}

要点解读:
结合使用TMCStepper库和MPU6050陀螺仪传感器,实现BLDC电机的速度闭环控制。
在 setup() 函数中初始化驱动器和传感器。
在 loop() 函数中,读取陀螺仪数据计算目标转速,并使用简单的PID算法控制电机转速。

6、BLDC电机位置闭环控制

#include <TMCStepper.h>
#include <Encoder.h>

// 定义BLDC电机驱动模块的引脚
#define EN_PIN    38
#define STEP_PIN  54
#define DIR_PIN   55

// 创建TMC2130驱动实例
TMC2130Stepper driver = TMC2130Stepper(EN_PIN, DIR_PIN, STEP_PIN);

// 创建编码器实例
Encoder encoder(2, 3);

void setup() {
  Serial.begin(115200);

  // 配置TMC2130驱动器
  driver.begin();
  driver.rms_current(600); // 设置最大电流600mA
  driver.microsteps(16);   // 设置细分为16细分
  driver.en_pwm_mode(true);// 开启BLDC模式

  // 设置目标位置
  driver.target(0);
}

void loop() {
  // 读取当前位置
  long position = encoder.read();

  // 计算位置误差
  long error = driver.getTargetPosition() - position;

  // 根据位置误差调整电机转速
  driver.shaft_dir(error > 0 ? 1 : 0);
  driver.step(abs(error));

  // 更新目标位置
  if (abs(error) < 10) {
    driver.target(driver.getTargetPosition() + 100);
  }

  delay(1);
}

要点解读:
结合使用TMCStepper库和编码器,实现BLDC电机的位置闭环控制。
在 setup() 函数中初始化驱动器和编码器。
在 loop() 函数中,读取当前位置,计算位置误差,并根据误差调整电机转速。
当位置误差小于10时,更新目标位置,实现电机的定位控制。
以上这几个案例展示了使用TMCStepper库与BLDC电机驱动模块进行通信的不同应用场景,包括基础的电机控制、速度闭环控制和位置闭环控制。这些示例可以为您提供一些参考和启发,帮助您更好地理解如何使用该库进行BLDC电机的控制和应用开发。

注意,以上案例只是为了拓展思路,仅供参考。它们可能有错误、不适用或者无法编译。您的硬件平台、使用场景和Arduino版本可能影响使用方法的选择。实际编程时,您要根据自己的硬件配置、使用场景和具体需求进行调整,并多次实际测试。您还要正确连接硬件,了解所用传感器和设备的规范和特性。涉及硬件操作的代码,您要在使用前确认引脚和电平等参数的正确性和安全性。

在这里插入图片描述

  • 29
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值