步进电机的应用非常广泛,在各种设备中经常会遇到,而步进电机的驱动则是使用步进电机必不可少的部分,可以有多种方式来实现步进电机的驱动,在这里我们来考虑一下基于TMC2660驱动芯片的步进电机驱动。
1、功能概述
TMC2660是德国TRINAMIC公司产的步进电机驱动芯片。TMC2660驱动器提供了业界领先的功能集,包括高分辨率微步、无传感器机械负载测量、负载自适应功率优化和低共振斩波操作。拥有标准SPI和STEP/DIR两种接口模式。集成功率MOSFET处理电机电流高达2.2A。集成的保护和诊断功能支持稳健和可靠的运行。其结构图如下:

TMC2660的参数配置通过SPI接口来实现。TMC2660具有5个配置和控制寄存器,通过SPI端口来访问这些寄存器。这些寄存器的结构定义如下所示:

所有的寄存器都是20位,在最高的2位或3位表示的是寄存器地址也称为操作码。根据具体的寄存器我们选择不同的操作码实现对寄存器的写操作。每一个写操作都会有一个20位的数据返回。而返回数据的内容可以通过修改配置寄存器来定义。具体的格式如下图所示:

2、驱动设计于实现
我们已经了解了TMC2660步进电机驱动芯片的基本技术参数,接下来我们就需要据此来实现TMC2660步进电机驱动芯片的驱动程序的设计与实现。
2.1、对象定义
我们依然是居于对象来实现相关的操作。所以我们首先要定义对象,出于适用性考虑,我们要定义对象的类型并将具体的对象实例化,接下来我们就来抽象对象类型和实例化对象的操作。
2.1.1、对象的抽象
对于一个对象最主要包括属性与操作两方面内容,所以我们先来考虑TMC2660对象具有哪些属性和操作,并抽象出较为通用的TMC2660对象类型。
对于步进电机的驱动都具有哪些属性呢?我们考虑到一台步进电机至少具备启停控制命令、方向控制命令、速度设定以及运行状态等,这些对于每一台步进电机来说,在不同的设置下代表不同的状态,所以我们将其作为其属性来处理。此外,与具体的电机相关的参数如固有步距角、微步设置及当前脉冲频率等。以及与TMC2660相关的状态、寄存器的值、速度规划等都与具体的应用需求相关、用以记录其运行和配置状态,所以我们将其作为属性。
然后再来看一看TMC2660对象需要实现的操作。对于TMC2660对象来说,我们要操作它,需要向其发送和读取数据,需要操作片选信号和使能信号,而这些行为依赖于具体的操作平台,所以我们将其作为对象的操作来设定。TMC2660可以工作在SPI模式或者SD模式,而在SD模式时,存在脉冲和方向的控制,这同样依赖于具体的软硬件操作平台,所以我们也将其作为对象的操作来实现。更具以上的分析我们可以抽象出TMC2660对象类型如下:
/*定义TMC2660对象类型*/
typedef struct TMC2660Object {
float microStep; //微步设置
float stepAngle; //固有步进角
float frequency; //运行频率
uint16_t *pStartStop; //启停操作命令
uint16_t *pDirection; //方向控制
uint16_t *pRotateSet; //转速设定
uint16_t *pMotorState; //电机状态
uint32_t status; //TMC通讯返回状态
uint32_t Register[5]; //寄存器
void (*WriteRead)(uint8_t *wData,uint16_t wSize,uint8_t *rData,uint16_t rSize);
void (*ChipSelcet)(TMC2660CSType cs); //片选信号
void (*StartStop)(TMC2660SSType ss); //启停操作函数
void (*Direct)(TMC2660DIRType dir); //方向操作函数
void (*Enable)(TMC2660ENNType enn); //使能操作函数
CurveObjectType curve; //电机调速曲线
}TMC2660ObjectType;
2.1.2、对象初始化
我们定义了对象类型,可以实现基于对象的操作,但定义的对象变量需要进行初始化才能让不同的对象按照我们的配置的方式去运行。所以在开始对象的使用之前我们先对其进行初始化,具体的初始化函数如下:
/*初始化TMC2660对象*/
void Tmc2660Initialization(TMC2660ObjectType *tmc, //待初始化的TMC对象变量
TMC2660SdoffType interface, //驱动接口类型
&n

本文介绍TMC2660步进电机驱动芯片的特性与应用,包括其功能集、寄存器配置、驱动程序设计及实际应用案例。
最低0.47元/天 解锁文章
1129





