关于TMC2208与TMC2209的区别及基于STM32F103控制TMC2209模块驱动2相4线步进电机

电子说

1.4w人已加入

描述

步进电机

一、TMC2208与TMC2209的区别

1、TMC2208与TMC2209的概述

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

2、TMC2208与TMC2209性能比较

步进电机

3、TMC2208与TMC2209功能框图比较

步进电机

TMC2208功能框图步进电机

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

4、TMC2208与TMC2209应用电路比较

步进电机

TMC2208应用电路步进电机

TMC2209应用电路 TMC22xx 系列步进驱动器旨在作为现有低成本步进驱动器应用的直接升级。其静音驱动技术 StealthChop 可为家庭和办公室应用实现无窃听运动控制。高效的功率级可从微型封装实现高电流。

该TMC2208只需要在其微型封装上安装几个控制引脚。它们允许选择最重要的设置:所需的微步长分辨率。可选择 2、4、8、16 或 32 微步,使驱动器适应运动控制器的功能。 一些封装选项还允许通过引脚选择斩波器模式。该TMC2209只需要在其微型封装上安装几个控制引脚。它允许选择最重要的设置:所需的微步长分辨率。可选择 8、16、32 或 64 微步,或从全步到 1/256 步,使驱动器适应运动控制器的功能。

5、结论

TMC2208 和 TMC2209 都支持 1/256 步进,包括插值和本机步进。他们都使用 StealthChop V2 进行耳语安静打印。选择TMC2208而不是TMC2209,原因有很多,原因与电路板的设计机器和我们电路板的设计周期有关。由于它们都使用相同的基本技术来调节电机并且具有相同的噪音水平,因此 2208 和 2209 之间的打印质量没有差异。

二、TMC2209引脚说明

步进电机

EN使能,低电平有效
MS1,MS2微步设置,00:1/8、01:1/32、10:1/64 11:1/16;而对于UART 的配置,用于选择UART 地址 0...3
PDNUART
CLK时钟输入。使用短线连接至 GND 以提供内部时钟或外部时钟。
STEP脉冲输入
DIR方向输入
A1,A2电机线圈1
B1,B2电机线圈2
VM电机驱动电源
VDD3.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电源

四、STM32F103控制TMC2209驱动2相4线步进电机

准备工作

STM32F103C8T6最小系统板、TMC2209驱动板、EC11旋转编码器、OLED显示屏、按键等。

接线说明

STM32F103TMC2209
5V电源VDD
电机驱动电源VM
PB0MS1
PB1MS2
PB10EN
PB11DIR
PA0(与PA6短接)STEP
PA1旋转编码器-A,调节频率或占空比
PA2旋转编码器-B,调节频率或占空比
PA3旋转编码器-S,移位调节
PB8OLED-SCL
PB9OLED-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);
	}
}

效果展示

步进电机

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分