一、项目描述
本项目完成了任务一的要求,基于 TMC4361A-BOB 与 TMC2160-BOB 两款评估板卡搭建步进电机控制系统。其中,TMC4361A 作为运动控制芯片,负责生成高精度的位置、速度和加减速指令;TMC2160 作为驱动芯片,接收来自 TMC4361A 的 STEP/DIR 信号,并驱动步进电机运行。通过两者的协同工作,系统实现了多种基本运动控制功能,包括:电机定速连续旋转、按指定角度精确转动、设定圈的自动运行,以及通过软件指令灵活切换正转与反转方向。所有功能均通过主控 MCU 发送指令触发,并在实际测试中验证了动作的准确性和响应的可靠性。
二、硬件介绍
1、步进电机运动控制器:TMC4361A
TMC4361A 是一款适用于实验室自动化、3D打印、扫描仪及其他自动化设备应用的步进电机运动控制器,支持S形斜坡(S-shaped ramps)。该器件可作为梯形(trapezoidal)和高级六点斜坡(SixPoint™ ramp)发生器使用。此外,TMC4361A 采用 ADI Trinamic 的 DcStep™、闭环控制(closed loop control)和 ChopSync™ 技术驱动。该器件的设计工作电压为 3.3V。TMC4361A 提供 SPI 控制器和 SPI、S/D 驱动程序接口,同时支持A/B/N增量式、SPI及SSI编码器接口。

2、高功率步进电机栅极驱动器:TMC2160
TMC2160 是一款具有 SPI 接口的高功率步进电机栅极驱动器 IC。它采用业界最先进的步进电机驱动技术,并支持简易的步进/方向(Step/Dir)接口。通过外部晶体管,可实现高动态、高扭矩驱动。基于 ADI Trinamic 精密的 SpreadCycle™ 和 StealthChop™ 斩波器技术,该驱动器可确保绝对无噪音的运行,同时兼备最高效率和最佳电机扭矩。其高集成度、高能效及小尺寸,使小型化和可扩展的系统成为可能,从而提供具有成本效益的解决方案。

3、同时使用了一个42步进电机和N32L406作为主控MCU,通过SPI与TMC4361A进行通信。

三、硬件连接
TMC4361的接口特性如图

本项目中,使用如下的连接方式进行驱动。MCU 通过 SPI 接口分别与 TMC4361A 建立通信连接。系统上电后,MCU 首先完成对 TMC4361A 运动控制器和 TMC2160 驱动芯片的初始化配置,包括设置运行模式、电流参数、微步分辨率以及接口时序等关键寄存器。初始化完成后,MCU 将目标控制参数写入 TMC4361A 的对应寄存器。随后,TMC4361A 自主生成所需的 STEP 和 DIR 信号,并直接控制 TMC2160 驱动步进电机运动,无需 MCU 持续干预。这种架构充分发挥了 TMC4361A 的独立运动规划能力,减轻了主控负担,同时提升了运动控制的实时性与精度。

对于TMC2106-BOB,具体连接实物图如下,其中VS用于电机电源和内部逻辑供电,A1,A2,B1,B2用于连接步进电机,VCC_IO连接到用于所有数字引脚的 3.3V 至 5V IO 供电电压,并指定使用spi模式。CSN,SCK,SDI,SDO这些SPI接口连接TMC4361。STEP,和DIR步进和方向引脚同样连接到TMC4361.
对于TMC4361A-BOB,其中VCC用于供电,CLK连接MCU引脚用于给TMC4361提供时钟信号,CSN,SCK,SDI,SDO这些SPI接口用于与MCU通信,CSN_DRV,SCK_DRV,SDI_DRV,SDO_DRV这些SPI接口用于与TMC2160通信,STPOUT,DIROUT用于输出步进和方向信号给TMC2160。

三、软件介绍
由上一节中的图可知,MCU通过SPI接口对TMC4361和TMC2160进行初始化和控制,程序运行流程如下图

1、初始化SPI和时钟输出
根据不同的MCU有自己的实现方法。
tmc_clk_gen();
user_h_spi_init();
2,、初始化TMC4361和TMC2160
TMC4361和TMC2160有相同的数据报结构,如下图

- 配置TMC4361的0x04寄存器,设置SPI输出模式
- 通过写TMC4361的0x6d和0x6c寄存器,配置TMC2160
- 对于TMC2160需配置运行电流和保持电流,斩波模式等
- 配置TMC4361运行模式和最大速度等
具体初始化代码如下
void tmc_commto4361(void)
{
//4361
tmc_spi_write(0x04,0x4440128D); //SPI模式
//2160
tmc_spi_write(0x6d,0xec );
tmc_spi_write(0x6c,0x004140C5 );
delay_us(5);
tmc_spi_write(0x6d,0x90 );
tmc_spi_write(0x6c,0x00070803 );
delay_us(5);
tmc_spi_write(0x6d,0x91 );
tmc_spi_write(0x6c,0x0000000A );
delay_us(5);
tmc_spi_write(0x6d,0x80 );
tmc_spi_write(0x6c,0x00000004 );
delay_us(5);
tmc_spi_write(0x6d,0x93 );
tmc_spi_write(0x6c,0x00000000 );
delay_us(5);
//4361
tmc_spi_write(0x20,0x00000000); //模式
tmc_spi_write(0x24,0x00000000); //VMAX,24+8
}
3.发送控制指令
配置斜坡生成器寄存器0x20,0x24,目标寄存器和比较寄存器0x37等完成运动控制
代码如下
case 1: //定速正转
tmc_spi_write(0x20,0x00000000); //模式
tmc_spi_write(0x24,0x02000000); //VMAX,24+8
break;
case 2: //定速正转
tmc_spi_write(0x20,0x00000000); //模式
tmc_spi_write(0x24,0x01000000); //VMAX,24+8
break;
case 3: //定速反转
tmc_spi_write(0x24,0xfe000000); //VMAX,24+8
break;
case 4: //定位模式
tmc_spi_write(0x24,0x00000000); //VMAX,24+8
tmc_spi_write(0x20,0x00000004); //模式
tmc_spi_write(0x21,0x00000000); //当前位置
tmc_spi_write(0x37,0x00000000); //目标位置
tmc_spi_write(0x24,0x02000000); //VMAX,24+8
break;
case 5:
tmc_spi_write(0x37,51200); //转一圈
break;
case 6:
tmc_spi_write(0x37,25600); //转半圈
break;
case 7:
tmc_spi_write(0x37,12800); //90°
break;
case 8:
tmc_spi_write(0x24,0x02500000); //VMAX,24+8
tmc_spi_write(0x37,12800+51200*3); //转3圈
break;
case 9:
tmc_spi_write(0x37,12800+51200); //反转2圈
break;
四、功能展示
通过TMC4361步进电机运动控制器和TMC步进电机栅极驱动器实现了步进电机的定速连续旋转、按指定角度精确转动、设定圈的自动运行,以及通过软件指令灵活切换正转与反转方向。
展示内容见上方视频。
五、心得体会
通过参与这个基于 TMC4361A-BOB 与 TMC2160-BOB 搭建步进电机控制系统的项目,我收获颇丰。在硬件搭建方面,深入了解了 TMC4361A 运动控制芯片和 TMC2160 驱动芯片的特性与协同工作方式,学习了步进电机控制的原理。软件编程过程中,对 SPI 通信协议有了更深入的理解,学会了如何通过代码精确配置芯片寄存器,完成各种运动控制指令的发送。从最初对芯片功能的模糊认知,到最终成功实现电机的定速旋转、精确角度转动等功能,这个过程不仅提升了我的动手实践能力和问题解决能力。感谢硬禾和得捷此次的活动。