电子说

TMC22XX系列电机驱动器无缝集成到不同的环境中,提供与现有系统的兼容性,同时通过先进的降噪功能提高效率。利用 TRINAMIC 的尖端技术,这些驱动器不仅实现了卓越的能源效率,而且还能保持高电机扭矩。通过 SpreadCycle 进行快速电流调节,可实现精确的电机控制,满足工业需求和个人应用。
TMC2208和TMC2209驱动器拥有强大的 MOSFET,擅长管理巨大的电机电流,确保在不同负载下保持稳定的性能。功能丰富的通用异步接收器-发射器 (UART) 接口可对电机功能进行详细控制,轻松集成到复杂系统中并允许根据特定需求进行调整。这种适应性对于现成设置不足的定制应用来说非常宝贵。配置可以存储在一次性可编程 (OTP) 存储器中,突出了这些驱动程序满足持久和多样化作要求的能力。TMC2208和TMC2209驱动器在保持高精度的同时,在降噪方面表现出色。这与人们对人体工程学和有利于创造力和生产力的环境的日益重视相一致。
TMC22XX驱动器通过精确、静音的作重新定义了步进电机应用,提供了符合当今对效率和可靠性期望的经济高效的解决方案。Centric 功能确保这些驱动器不仅满足当前的技术需求,而且为未来的进步做好准备。


TMC2208功能框图
TMC2209功能框图 TMC22xx 系列在功率密度、集成功率 MOSFET、平稳安静的运行以及友好的简单性方面得分。TMC22xx 涵盖从电池系统到嵌入式应用的广泛应用,每个线圈的电机电流高达 2 A。创迈独特的斩波器模式 SpreadCycle 和 StealthChop2 优化了驱动器性能。StealthChop 将电机噪音降低到低速时的静音点。待机电流降低可降低功耗和冷却成本。广泛的支持可实现快速设计周期和快速上市,并推出具有竞争力的产品。

TMC2208应用电路
TMC2209应用电路 TMC22xx 系列步进驱动器旨在作为现有低成本步进驱动器应用的直接升级。其静音驱动技术 StealthChop 可为家庭和办公室应用实现无窃听运动控制。高效的功率级可从微型封装实现高电流。
该TMC2208只需要在其微型封装上安装几个控制引脚。它们允许选择最重要的设置:所需的微步长分辨率。可选择 2、4、8、16 或 32 微步,使驱动器适应运动控制器的功能。 一些封装选项还允许通过引脚选择斩波器模式。该TMC2209只需要在其微型封装上安装几个控制引脚。它允许选择最重要的设置:所需的微步长分辨率。可选择 8、16、32 或 64 微步,或从全步到 1/256 步,使驱动器适应运动控制器的功能。
TMC2208 和 TMC2209 都支持 1/256 步进,包括插值和本机步进。他们都使用 StealthChop V2 进行耳语安静打印。选择TMC2208而不是TMC2209,原因有很多,原因与电路板的设计机器和我们电路板的设计周期有关。由于它们都使用相同的基本技术来调节电机并且具有相同的噪音水平,因此 2208 和 2209 之间的打印质量没有差异。

| EN | 使能,低电平有效 |
|---|---|
| MS1,MS2 | 微步设置,00:1/8、01:1/32、10:1/64 11:1/16;而对于UART 的配置,用于选择UART 地址 0...3 |
| PDN | UART |
| CLK | 时钟输入。使用短线连接至 GND 以提供内部时钟或外部时钟。 |
| STEP | 脉冲输入 |
| DIR | 方向输入 |
| A1,A2 | 电机线圈1 |
| B1,B2 | 电机线圈2 |
| VM | 电机驱动电源 |
| VDD | 3.3/5V逻辑电源 |
| GND | 地 |
| VREF | 用于电流缩放或参考的模拟参考电压内部感测电阻器使用的电流(可选模式)。 |
| INDEX | 可配置的索引输出。提供索引脉冲。 |
| DIAG | 诊断和失速保护输出。失速时液位高检测或驱动器错误。ENN=高重置错误条件。 |

设置电机电流的最佳方法是测量 Vref 引脚上的电压 (0...2.5V)并用电位器调节电压。
其中,TMC2209的Rsense检测电阻为0.11欧姆,把测量到的Vref和Rse检测电阻代入上述公式即可计算出相应的Irms驱动电流。
电位计调节说明:
顺时针旋转电位计以降低Vref电压,从而可以降低驱动电流;
逆时针旋转电位以增加Vref电压,从而可以增加驱动电流;
注意:
1、Vref 测量 Gnd 和电位器中间的电压。
2、测量电压时不要连接电机,否则容易烧坏驱动器。
3、测量电压时应接通电源,不要只接USB电源
STM32F103C8T6最小系统板、TMC2209驱动板、EC11旋转编码器、OLED显示屏、按键等。
| STM32F103 | TMC2209 |
|---|---|
| 5V电源 | VDD |
| 电机驱动电源 | VM |
| PB0 | MS1 |
| PB1 | MS2 |
| PB10 | EN |
| PB11 | DIR |
| PA0(与PA6短接) | STEP |
| PA1 | 旋转编码器-A,调节频率或占空比 |
| PA2 | 旋转编码器-B,调节频率或占空比 |
| PA3 | 旋转编码器-S,移位调节 |
| PB8 | OLED-SCL |
| PB9 | OLED-SDA |
| PB14 | 按键1,设置微步 |
| PB15 | 按键2,设置方向 |
| GND | 共地 |

TMC2209.c
#include "TMC220x.h"
#include "Delay.h"
void TMC220x_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_10 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_ResetBits(GPIOB, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_10 | GPIO_Pin_11);
}
void TMC220x_SetStep(uint8_t step)
{
switch(step)
{
case 1: //1/8细分
TMC220x_MS1_L;
TMC220x_MS2_L;
break;
case 2: //1/16细分
TMC220x_MS1_H;
TMC220x_MS2_H;
break;
case 3: //1/32细分
TMC220x_MS1_H;
TMC220x_MS2_L;
break;
case 4: //1/64细分
TMC220x_MS1_L;
TMC220x_MS2_H;
break;
}
}
void TMC220x_SetDir(uint8_t dir)
{
TMC220x_EN_H;
Delay_ms(20);
if(dir == 1) TMC220x_DIR_H
else TMC220x_DIR_L
TMC220x_EN_L;
}
main.c
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "OLED.h"
#include "KEY.h"
#include "TMC220x.h"
#include "PWM.h"
#include "IC.h"
#include "Encoder.h"
uint8_t step = 0;
uint8_t dir = 0;
int main(void)
{
OLED_Init();
PWM_Init();
TMC220x_Init();
Key_Init();
Encoder_Init();
OLED_ShowString(1, 1, "TMC2208/2209");
OLED_ShowString(1, 15, "F"); //F:调节频率,D:调节占空比
OLED_ShowString(2, 4, "0000Hz");
OLED_ShowString(2, 11, "000%");
OLED_ShowString(3, 4, "1/8 ");
OLED_ShowString(3, 11, "+");
PWM_SetPrescaler(720 - 1); //Freq = 72M / (PSC + 1) / 100
PWM_SetCompare1(50); //Duty = CCR / 100
TMC220x_SetDir(1);
TMC220x_SetStep(1);
Update_Display();
while (1)
{
int16_t encoder_change = Encoder_GetValue();
if(encoder_change != 0)
{
if(setting_mode == 0) // 调频率
{
pwm_freq += encoder_change * 10;
if(pwm_freq > 2000) pwm_freq = 2000;
if(pwm_freq < 10) pwm_freq = 10;
PWM_SetPrescaler(pwm_freq - 1);
}
else // 调占空比
{
pwm_duty += encoder_change;
if(pwm_duty > 100) pwm_duty = 100;
if(pwm_duty < 0) pwm_duty = 0;
PWM_SetCompare1(pwm_duty);
}
Update_PWM();
Update_Display();
}
if(Encoder_GetKey()) // 按下编码器按键切换调节模式
{
setting_mode ^= 1; // 0/1切换
Update_Display();
}
Delay_ms(20);
KeyEvent_TypeDef key_event = Key_Scan();
switch (key_event)
{
case KEY_MODE_CLICK:
// Mode键短按事件
step++;
if (step > 4) step = 1;
switch(step)
{
case 1:
TMC220x_SetStep(1); OLED_ShowString(3,4,"1/8 "); break;
case 2:
TMC220x_SetStep(2); OLED_ShowString(3,4,"1/16"); break;
case 3:
TMC220x_SetStep(3); OLED_ShowString(3,4,"1/32"); break;
case 4:
TMC220x_SetStep(4); OLED_ShowString(3,4,"1/64"); break;
}
break;
case KEY_DIR_CLICK:
dir++;
if(dir > 2) dir = 1;
if(dir == 1)
{
TMC220x_SetDir(1);
OLED_ShowString(3, 11, "+"); //正转
}
else
{
TMC220x_SetDir(0);
OLED_ShowString(3, 11, "-"); //反转
}
break;
}
Delay_ms(20);
}
}

审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !