TMC2209之堵转检测,用stm32驱动tmc实现无感归零操作

最开始是因为静音功能才接触到tmc驱动器,后来了解到他可以实现无感归零,也就是说,不借助外界限位开关的情况下实现复位,堵转检测。因此通过stm32对其进行了驱动,绘制了原理图,这里贴出tmc2209相关引脚及解释说明。实现效果可以移步:TMC2209堵转检测_哔哩哔哩_bilibili

  1. VDDIO:芯片内部逻辑电源电压3.3-5。

  2. GND:地线接地。

  3. VDDA:模拟电源电压。

  4. INDEX:指示当前步进电机位置的指示信号。

  5. DIR/STEP:方向控制和步进脉冲输入。

  6. EN:使能,低电平允许旋转

  7. UART:UART 通信接口。

  8. VCP/VREF:电流限制、电压比较器反馈或振荡器输出。

  9. VM:电机电源。

  10. GND:地线接地。

  11. DIAG:触发报警,当堵转后会发送一个脉冲,此时单片机读取到了后控制其停下

  12. Spread 高电平:

    • 当 spread 引脚处于高电平时,通常表示启用了高分辨率微步细分模式。
    • 在高电平状态下,TMC2209 可以提供更高的微步分辨率,例如 256 微步或更高的微步数。
    • 高分辨率微步可以提供更平滑的运动和更精确的位置控制,但可能会导致较高的电流纹波。
  13. Spread 低电平:

    • 当 spread 引脚处于低电平时,通常表示启用了低分辨率微步细分模式。
    • 在低电平状态下,TMC2209 使用较低的微步分辨率,例如 16 微步或 32 微步。
    • 低分辨率微步可以降低电流纹波,减少噪音和功耗,但可能会牺牲一定的运动平滑性和精度。
  14. CLK:时钟,我接的是低电平
  15. MS1 和 MS2 均为低电平:

    • 这种设置通常对应全步模式(Full Step),步进角度最大,电机转动最为粗糙。
  16. MS1 为高电平,MS2 为低电平:

    • 这种设置通常对应半步模式(Half Step),每个全步被细分为两个微步,提高了电机的运动平滑性和精度。
  17. MS1 为低电平,MS2 为高电平:

    • 这种设置通常对应四分之一步模式(Quarter Step),每个全步被细分为四个微步,进一步提高了电机的运动精度。
  18. MS1 和 MS2 均为高电平:

    • 这种设置通常对应八分之一步模式(Eighth Step),每个全步被细分为八个微步,提供最高的运动精度和平滑性。
  19. RA 和 BRB 是用来设置电流下降斜率的引脚,可以调整电流下降的速率,从而影响步进电机的运动特性和噪音水平。这里接的是0.10Ω左右都行

### STM32 使用 TMC2209 驱动步进电机配置方法 #### 1. 硬件连接 为了实现STM32TMC2209之间的通信,通常采用SPI接口进行数据交换。具体来说: - **SPI引脚连接**:将STM32的SCK、MISO、MOSI引脚分别对应连接至TMC2209的相关SPI引脚。 - **控制信号线**:除了SPI外,还需要额外连接一些GPIO引脚来管理方向(DIRECTION)、使能(ENABLE)以及步进(STEP)信号。 这种连接方式不仅适用于单个电机驱动器,在多轴控制系统中同样有效[^4]。 #### 2. 软件初始化 在软件层面,主要工作集中在以下几个方面: ##### a. SPI 初始化 利用STM32CubeMX工具可以方便快捷地完成SPI外设的基础设置。确保选择了合适的波特率,并启用了必要的中断服务函数以便于后续的数据传输操作。 ##### b. GPIO 设置 对于DIRECTION, ENABLE 和 STEP这些由GPIO负责的功能管脚,则需单独设定其模式为推挽输出型态并指定初始状态。 ```c // 假定已通过STM32CubeMX完成了基本的时钟树与时基单元(Timer Base Unit)配置 void MX_GPIO_Init(void){ __HAL_RCC_GPIOA_CLK_ENABLE(); // 启用PA口时钟 GPIO_InitTypeDef GPIO_InitStruct = {0}; /* DIRECTION Pin */ GPIO_InitStruct.Pin = GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA,&GPIO_InitStruct); } ``` 上述代码片段展示了如何针对特定端口(Pin)执行GPIO初始化过程的一部分[^3]。 #### 3. 编程实例 下面给出一段简单的C语言源码用来展示怎样发送指令给TMC2209从而让所连结之步进马达运转起来: ```c #include "main.h" #define DIR_PORT GPIOA #define DIR_PIN GPIO_PIN_7 #define EN_PORT GPIOB #define EN_PIN GPIO_PIN_8 #define STEP_PORT GPIOC #define STEP_PIN GPIO_PIN_9 /* ...其他必要声明... */ int main(void){ /* ...系统启动前准备工作... */ while (1){ // 设定运动参数... // 开始移动 HAL_GPIO_WritePin(DIR_PORT,DIR_PIN,GPIO_PIN_SET); // 设置旋转方向 for(int i=0;i<STEPS_PER_REVOLUTION;i++){ HAL_DelayMicroseconds(step_delay_us); // 控制速度 HAL_GPIO_TogglePin(STEP_PORT,STEP_PIN); // 发送脉冲触发一步动作 } // 结束后处理逻辑... } } /* 辅助功能函数定义区 */ static void SystemClock_Config(void){ /* ... */ } static void MX_SPIx_Init(void){ /* ... */ } static void Error_Handler(void){ /* ... */ } ``` 这段程序实现了最基本的连续转动效果,其中`step_delay_us`变量决定了每一步之间的时间间隔进而影响最终转速;而循环次数则代表了一圈内所需的总步数[^1]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值