使用uart串口配置TMC2209模块

串口配置的优点:

通过串口助手配置TMC2209的寄存器实现转速,方向,细分数等寄存器设置。最大细分可达256。

TMC2209串口配置数据发送格式:

 通过数据手册可知,TMC2209写入数据需要发送64位16进制。

前面0~7位是同步+保留字节,取0x05;

8~15位是TMC2209从机地址位,通过MS1和MS2来进行配置,在0-3内选择。

 16~23位是寄存器地址,寄存器地址需要|0x80,比如要写入的寄存器地址为0x00,在发送的时候就要0x00|0x80=0x80。

24~55位为要写入的寄存器数据,遵循字节由高到低进行配置,不需要配置的位,用0补上。

56~63位是CRC校验位,可通过数据手册给出的代码进行计算。

 TMC2209串口配置数据读取格式:

 读取数据的配置相对于写入数据而言相对简单,需要注意的是此时的寄存器地址不需要再|0x80。

CRC的计算和写入数据一样。

 TMC2209串口数据读取出来的格式:

 读取出来的从机地址为0xFF。

TMC2209串口连线方式:

TMC2209串口采用单线uart,其连接方式如下:

 和串口助手连接时,TX和RX无需交叉。

 寄存器配置:

电机控制方向和细分模式的选择:

由数据手册可知,第七位是内外部细分的选择,我们选择内部细分(内部细分默认256),第三位是控制电机正反转,给1反转,第零位也配置为1。所以寄存器由高到低配置为00 1000 0001 (该寄存器有十位,配置电机正转),即0x00 0x00 0x00 0x81(有32位数据,要在空的位补0)

串口写入数据:

 记得把发送新行关掉,把Hex格式勾上。最后8位校验码在文末会给出C语言板的计算代码。

 串口读取数据:

如图为读取0x00寄存器的指令,1为上面写入的指令,2为读取的指令,3为串口读取出来的数据 。

 写入的数据和读取出来的数据都是0x81,符合我们的结果。

TMC2209速度寄存器:

配置速度寄存器,可由TMC2209内部产生脉冲驱动步进电机转动。

 转动的速度和方向可以根据数据手册进行计算。

TMC2209内部细分配置寄存器:

配置MRES即可配置内部细分个数。 

CRC_8校验计算: 

TMC2209的写入CRC计算是将前面55位的数据放入校验代码计算得出一个8位的数据。

 下面以写入操作为例:

 datagram为数据前面的55位,datagramLength数据长度为8。

写入操作CRC_8计算代码:

#include <stdio.h>

typedef unsigned char UCHAR;

// 计算 CRC 校验和
void swuart_calcCRC(UCHAR* datagram, UCHAR datagramLength) {
    int i, j;
    UCHAR* crc = datagram + (datagramLength - 1); // CRC 存储在数据包的最后一个字节
    UCHAR currentByte;
    *crc = 0; // 初始化 CRC 为 0

    for (i = 0; i < (datagramLength - 1); i++) { // 处理除最后一个字节外的所有字节
        currentByte = datagram[i];
        for (j = 0; j < 8; j++) { // 处理当前字节的每一位
            if ((*crc >> 7) ^ (currentByte & 0x01)) {
                *crc = (*crc << 1) ^ 0x07; // 如果 CRC 高位与当前字节最低位异或结果为 1,则 CRC 左移并异或多项式 0x07
            } else {
                *crc = (*crc << 1); // 否则,CRC 仅左移
            }
            currentByte = currentByte >> 1; // 当前字节右移处理下一位
        }
    }
}

int main() {
    UCHAR datagram[8] = {0x05, 0x00, 0x80, 0x00, 0x00, 0x00, 0x81, 0x00}; // 数据包,最后一个字节用于存储 CRC 结果
    swuart_calcCRC(datagram, 8); // 计算 CRC 并将结果存储到数据包的最后一个字节
    
    printf("Calculated CRC: 0x%02X\n", datagram[7]); // 输出计算出的 CRC 值
    return 0;
}

输出结果:

 读取操作CRC_8计算代码:

#include <stdio.h>

typedef unsigned char UCHAR;

// 计算 CRC 校验和
void swuart_calcCRC(UCHAR* datagram, UCHAR datagramLength) {
    int i, j;
    UCHAR* crc = datagram + (datagramLength - 1); // CRC 存储在数据包的最后一个字节
    UCHAR currentByte;
    *crc = 0; // 初始化 CRC 为 0

    for (i = 0; i < (datagramLength - 1); i++) { // 处理除最后一个字节外的所有字节
        currentByte = datagram[i];
        for (j = 0; j < 8; j++) { // 处理当前字节的每一位
            if ((*crc >> 7) ^ (currentByte & 0x01)) {
                *crc = (*crc << 1) ^ 0x07; // 如果 CRC 高位与当前字节最低位异或结果为 1,则 CRC 左移并异或多项式 0x07
            } else {
                *crc = (*crc << 1); // 否则,CRC 仅左移
            }
            currentByte = currentByte >> 1; // 当前字节右移处理下一位
        }
    }
}

int main() {
    UCHAR datagram[4] = {0x05, 0x00, 0x00, 0x00}; // 数据包,最后一个字节用于存储 CRC 结果
    swuart_calcCRC(datagram, 4); // 计算 CRC 并将结果存储到数据包的最后一个字节
    
    printf("Calculated CRC: 0x%02X\n", datagram[3]); // 输出计算出的 CRC 值
    return 0;
}

输出结果:

 

参考文章:串口配置TMC2209电机驱动模块_tmc2209 寄存器-CSDN博客 

ATIONS Compatible Design Upgrade 3D Printers Printers, POS Office and home automation Textile, Sewing Machines CCTV, Security ATM, Cash recycler HVAC Battery Operated Equipment FEATURES AND BENEFITS 2-phase stepper motors up to 2.8A coil current (peak), 2A RMS STEP/DIR Interface with 4, 8, 16 or 32 microstep pin setting Smooth Running 256 microsteps by MicroPlyer™ interpolation StealthChop2™ silent motor operation SpreadCycle™ highly dynamic motor control chopper StallGuard4™ load and stall detection for StealthChop CoolStep™ current control for energy savings up to 75% Low RDSon, Low Heat-Up LS 170mΩ & HS 170mΩ (typ. at 25°C) Voltage Range 4.75… 28V DC Low Power Standby to fit EUP or for battery operation Internal Sense Resistor option (no sense resistors required) Passive Braking, Freewheeling, and automatic power down Single Wire UART & OTP for advanced configuration options Integrated Pulse Generator for standalone motion Full Protection & Diagnostics Choice of QFN and HTSSOP package for best fit DESCRIPTION The TMC2209 and TMC2226 are ultra-silent motor driver ICs for two phase stepper motors. TMC2209 pinning is compatible to a number of legacy drivers as well as to the TMC2208. TRINAMICs sophisticated StealthChop2 chopper ensures noiseless operation, maximum efficiency and best motor torque. Its fast current regulation and optional combination with SpreadCycle allow highly dynamic motion while adding. StallGuard for sensorless homing. The integrated power MOSFETs handle motor currents up to 2A RMS with protection and diagnostic features for robust and reliable operation. A simple to use UART interface opens up tuning and control options. Store application tuning to OTP memory. Industries’ most advanced STEP/DIR stepper motor driver family upgrades designs to noiseless and most precise operation for cost-effective and highly competitive solutions. Step/Dir Drivers for Two-Phase Bipolar Stepper Motors up to 2.8A peak – StealthChop™ for Quiet Movement – UART Interface Option – Sensorless Stall
你可以通过连接TMC2209与Arduino Uno来控制电机旋转10圈。首先,确保你的Arduino Uno板上有足够的引脚可用于连接TMC2209和SoftwareSerial。接下来,按照以下步骤进行操作: 1. 连接TMC2209与Arduino Uno: - 将TMC2209的PDN_UART引脚连接到Arduino Uno的一个数字引脚(例如D2)。 - 将TMC2209的RX和TX引脚分别连接到Arduino Uno的另外两个数字引脚(例如D3和D4)。 - 连接TMC2209的VCC和GND引脚到Arduino Uno的5V和GND引脚。 2. 在Arduino IDE中导入并安装SoftwareSerial库(如果尚未安装)。 3. 编写Arduino代码,使用SoftwareSerial库与TMC2209进行通信和控制。下面是一个简单的示例代码: ```cpp #include <SoftwareSerial.h> SoftwareSerial TMC2209Serial(3, 4); // 使用D3和D4引脚作为软串口 void setup() { Serial.begin(9600); // 打开串口监视器 TMC2209Serial.begin(115200); // 打开软串口TMC2209通信 TMC2209Serial.println("M569 P1 S1"); // 发送命令给TMC2209,设置电机方向等参数 } void loop() { // 控制电机旋转10圈 for (int i = 0; i < 10; i++) { TMC2209Serial.println("G1 X100 F1000"); // 发送命令给TMC2209,控制电机旋转100mm delay(1000); // 等待电机旋转完成 } // 停止电机 TMC2209Serial.println("M18"); // 发送命令给TMC2209,停止电机 while (true) { // 等待其他操作 } } ``` 4. 将上述代码上传到Arduino Uno,并观察串口监视器输出。电机将会旋转10圈,并在旋转完成后停止。 请注意,上述代码仅为示例代码,你可能需要根据你的具体需求进行修改。此外,确保你的TMC2209已正确配置并连接到电机。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值