文章目录
- 官方概要
- 简单介绍
- 整体架构流程
官方概要
TMC2160是一款带SPI接口的大功率步进电机驱动IC。它具有业界最先进的步进电机驱动器,具有简单的步进/方向接口。采用外部晶体管,可实现高动态、高转矩驱动。基于TRINAMICs先进的spreadCycle和stealthChop切割机,驱动器确保绝对无噪音运行,并结合最高效率和最佳电机扭矩。高集成度,高能效和小尺寸使小型化和可扩展系统具有成本效益的解决方案。完全兼容的TMC5160提供了一个额外的运动控制器,使步进电机控制更加容易。
简单介绍
两种模式,简单步进和步进模式
与TM5160类似,5160有中文手册,可参考,
TMC2160相比于TM5160
模式只有两种
模式 1:脉冲和方向驱动器
像 TMC4361 这样的外部高性能 S-ramp 运动控制器或 CPU 产生与系统内其他部件(如电机) 同步的脉冲和方向信号。TMC5160 控制电流和运动模式,并反馈电机状态。 microPlyer 自动平滑运动。SD_MODE 接高电平使能此模式(SD_MODE=1,SPI_MODE=1)。在该模式下,用户通过 SPI 接口来配置 TMC5160 的寄存器。TMC5160 的功能和 DRV8825 类似,外界通过脉冲和方向引脚来控制步进电机运动。
模式 2:简单的步进和方向驱动器
TMC5160 根据步进和方向信号控制电机。microPlyer自动平滑运动,配置由硬件引脚完成。 静止保持电流控制由TMC 5160完成。可选的反馈信号作为错误检测和同步标志的输出。 SPI_MODE 接地,SD_MODE 接高电平使能此模式(SD_MODE=1,SPI_MODE=0)。在该模式下,SPI 接口失能,TMC5160 的工作状态由 CFG 引脚配置。TMC5160 可以完全独立工作,不需要接 CPU。
大体概括,一个是脉冲控制,配置由主控SPI配置,另一个就是指通过脉冲和方向引脚发PWM波控制。
本文 STM32或者GD32配置使用第二种。
整体架构流程
实际上程序十分简单,只需要配置一个方向信号和PWM脉冲即可
思路十分简单,可以不参考代码自己配置
1首先配置选择TM2150模式,配置控制芯片的IO口
2配置PWM输出,定时器中断模式或者只是PWM输出都可以
3使能,控制电机旋转
void TMC2160_Init3(void) //模式三独立模式
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_GPIOB_CLK_ENABLE(); //开启GPIOB时钟
__HAL_RCC_GPIOA_CLK_ENABLE(); //开启GPIOA时钟
GPIO_Initure.Pin=GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8;
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //推挽输出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH; //高速
HAL_GPIO_Init(GPIOA,&GPIO_Initure);
GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //推挽输出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH; //高速
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6|GPIO_PIN_5,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_14|GPIO_PIN_13|GPIO_PIN_12|GPIO_PIN_1,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_15|GPIO_PIN_2|GPIO_PIN_0,GPIO_PIN_RESET);
}
PWM输出配置TMC2160
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim==(&TIM3_Handler))
{
COUNT++;
A8=~A8;
if(COUNT>=6400)
{
//HAL_NVIC_DisableIRQ(TIM3_IRQn);
LED=1; //转一圈,停2s后继续
delay_ms(2000);
LED=0;
COUNT=0;
}
}
}