【单片机】ESP32-S3+多TMC2209控制步进电机系列3 使用TMC2209库实现UART通讯

1.下载TMC2209.h库

在Arudino环境中,有两个不错的库可以驱动TMC2209。

  • TMC2209库
  • TMCStepper库
    TMC2209库只针对TMC2209驱动器,而TMCStepper库除了能够支持TMC2209驱动器,还能够支持其他TMC的驱动器,如下图。
    在这里插入图片描述TMC2209库体积小,不复杂。本文将使用TMC2209库来完成对驱动器的通讯。
    打开Arduino的库管理器,搜索TMC2209,点击安装即可。如果无法在线安装,可在其GitHub中下载离线ZIP进行安装,TMC2209库GitHub链接
    在这里插入图片描述

2.代码部分

本文对是3个TMC2209驱动器进行通讯,对1个电机进行控制(手里就有一个电机现在。。)为例。

#include <TMC2209.h>

//使用串口1对驱动进行通讯
HardwareSerial & serial_stream = Serial1;

// 细分步 1.8°的电机一圈所需脉冲微 360/1.8*MICROSTEPPING
#define MICROSTEPPING 64
// 实例化3个 TMC2209驱动器
TMC2209 stepper_driver_0;
const TMC2209::SerialAddress SERIAL_ADDRESS_0 = TMC2209::SERIAL_ADDRESS_0;
TMC2209 stepper_driver_1;
const TMC2209::SerialAddress SERIAL_ADDRESS_1 = TMC2209::SERIAL_ADDRESS_1;
TMC2209 stepper_driver_2;
const TMC2209::SerialAddress SERIAL_ADDRESS_2 = TMC2209::SERIAL_ADDRESS_2;
//串口通讯的波特率
const long SERIAL_BAUD_RATE = 115200;
const int StepperEnaPin = 3; // 驱动器使能引脚
const int RX_PIN = 18;
const int TX_PIN = 17;
//串口输出延迟
const int DELAY = 2000;
//驱动器响应延迟 
const uint8_t REPLY_DELAY = 4;

//电机运行电流 0~100%
const uint8_t RUN_CURRENT_PERCENT = 40;
const int32_t VELOCITY = 12800;

void setup()
{
  Serial.begin(SERIAL_BAUD_RATE);
  stepper_driver_0.setup(serial_stream, SERIAL_BAUD_RATE, SERIAL_ADDRESS_0, RX_PIN, TX_PIN);
  stepper_driver_0.setReplyDelay(REPLY_DELAY);
  stepper_driver_1.setup(serial_stream, SERIAL_BAUD_RATE, SERIAL_ADDRESS_1, RX_PIN, TX_PIN);
  stepper_driver_1.setReplyDelay(REPLY_DELAY);
  stepper_driver_2.setup(serial_stream, SERIAL_BAUD_RATE, SERIAL_ADDRESS_2, RX_PIN, TX_PIN);
  stepper_driver_2.setReplyDelay(REPLY_DELAY);
  // 设置引脚为输出模式
  pinMode(StepperEnaPin, OUTPUT);
  // 输出高电平
  digitalWrite(StepperEnaPin, LOW);
  delay(DELAY);

  if (stepper_driver_0.isSetupAndCommunicating())
  {
    Serial.println("[Success]:Stepper driver 0 is setup and communicating!");
  }
  else {
    Serial.println("[Fail]:Stepper driver 0 is not setup and communicating!");
  }

  if (stepper_driver_1.isSetupAndCommunicating())
  {
    Serial.println("[Success]:Stepper driver 1 is setup and communicating!");
  }
  else {
    Serial.println("[Fail]:Stepper driver 1 is not setup and communicating!");
  }

  if (stepper_driver_2.isSetupAndCommunicating())
  {
    Serial.println("[Success]:Stepper driver 2 is setup and communicating!");
  }
  else {
    Serial.println("[Fail]:Stepper driver 2 is not setup and communicating!");
  }
  
  // 设置微步
  stepper_driver_0.setMicrostepsPerStep(MICROSTEPPING);
  stepper_driver_0.setHardwareEnablePin(StepperEnaPin);
  stepper_driver_0.setRunCurrent(RUN_CURRENT_PERCENT);
  stepper_driver_0.enableCoolStep();
  stepper_driver_0.enable();
  stepper_driver_0.moveAtVelocity(VELOCITY);
  delay(DELAY);

}
void loop()
{

  if (not stepper_driver_0.isSetupAndCommunicating())
  {
    Serial.println("Stepper driver not setup and communicating!");
    return;
  }

  bool hardware_disabled = stepper_driver_0.hardwareDisabled();
  TMC2209::Settings settings = stepper_driver_0.getSettings();
  TMC2209::Status status = stepper_driver_0.getStatus();

  if (hardware_disabled)
  {
    Serial.println("Stepper driver is hardware disabled!");
  }
  else if (not settings.software_enabled)
  {
    Serial.println("Stepper driver is software disabled!");
  }
  else if ((not status.standstill))
  {
    Serial.print("Moving at velocity ");
    Serial.println(VELOCITY);

    uint32_t interstep_duration = stepper_driver_0.getInterstepDuration();
    Serial.print("which is equal to an interstep_duration of ");
    Serial.println(interstep_duration);
  }
  else
  {
    Serial.println("Not moving, something is wrong!");
  }

  Serial.println();
  delay(DELAY);


}

3.效果展示

如果硬件和代码都没问题的话,你就能看到电机在以每1RPM的转速转动,串口中出现一下通讯情况啦。在这里插入图片描述
在这里插入图片描述

需要注意的是,TMC2209原生库只能完成对电机的速度控制,如果要实现对电机的微步控制,加速度控制等功能,就需要配合其他库来完成,如AccelStepper库。因为说白了,TMC2209只是对驱动器进行设置的库,驱动器还是需要接受来自控制器的脉冲信号才能驱动电机旋转。

下一篇将介绍如何使用TMC2209库和AccelStepper库完成对电机的精确位置控制。

08-02
TMC2209是一款高性能的步进电机驱动芯片,适用于各种精密控制系统。该芯片集成了许先进的功能,使其在工业自动化、3D打印、机器人技术等领域得到了广泛应用。以下是关于TMC2209的一些关键信息。 ### 数据手册 TMC2209的数据手册提供了详细的硬件设计指南、软件配置说明、功能特性以及应用实例。它包含了芯片的技术规格、引脚定义、通信协议、配置方法以及常见问题解答等内容。对于开发者和工程师来说,这是使用TMC2209时不可或缺的参考资料。数据手册中还特别提到了StealthChop2斩波器技术,这项技术能够确保无噪声运行,同时保持最高效率和最佳电动机转矩[^1]。 ### 使用方法 TMC2209可以通过种方式进行配置,包括简单的Step/Dir模式和更复杂的UART模式。在Step/Dir模式下,用户可以通过步进脉冲和方向信号来控制电机的旋转。而在UART模式下,则可以通过单线UART接口进行更加精细的调整和控制。值得注意的是,在UART模式下应该通过GCONF.pdn_disable=1禁用配置引脚,并且在电机停转期间需要通过编程设置IHOLD[^3]。 ### 驱动程序 为了简化开发过程,Trinamic公司为TMC2209提供了相应的驱动程序和支持。这些工具可以帮助开发者快速实现TMC2209的初始化、参数设置以及实时控制。此外,还有一些开源项目提供了基于不同平台(如Arduino)的示例代码,这有助于加快原型设计的速度。例如,可以找到针对特定微控制器编写的驱动程序,它们通常包括了初始化函数、读写寄存器的功能等[^2]。 ### 应用场景 由于其出色的性能特点,TMC2209被广泛应用于个领域。其中包括但不限于: - **工业自动化**:用于精确控制生产线上的机械臂或其他运动部件。 - **3D打印**:作为打印机头移动机构的核心驱动元件,保证打印质量。 - **机器人技术**:帮助机器人关节实现平稳而准确的动作。 - **医疗设备**:比如自动注射泵等需要高精度定位的场合。 此外,TMC2209还支持StallGuard技术,这是一种无需额外传感器即可检测电机是否卡死的方法,非常适合于无传感器归位的应用场景。集成功率MOSFET的设计让它能够处理高达2A RMS的电流,确保了稳定可靠的运行[^3]。 最后,关于具体的电路设计,TMC2209的官方文档中也给出了原理图示例,这对于初次接触该芯片的设计者来说是非常宝贵的资源。通过参考这些示例,设计人员可以根据自己的需求调整外围电路以达到最佳效果[^4]。 ```python # 示例代码 - 初始化TMC2209驱动器 def init_tmc2209(): # 设置Step/Dir模式 configure_step_dir_mode() # 启用StallGuard功能 enable_stallguard() # 配置StealthChop2斩波器 setup_stealthchop2() # 打印初始化完成信息 print("TMC2209 initialized successfully.") ``` ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天才小小傲

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

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

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

打赏作者

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

抵扣说明:

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

余额充值