TMC2300驱动电机

概述

TMC2300驱动电压2-11V,QFN3*3 20PIN。具有两种驱动方式(1.脉冲+方向引脚 2.单线串口),可实现无感负载测量,通过负载测量可实现电机的防丢步设计。

典型应用框架及引脚说明

        典型应用框架

    

        引脚说明

详细可见数据手册2.2

简要说明:

STEP:  脉冲输入引脚   

DIR :方向控制引脚 

MODE:0:单线串口控制模式 1:脉冲+方向控制模式

AD0、AD1:在脉冲+方向模式下配置驱动细分,在单线串口模式下是硬件通讯地址。

DIAG:在单线串口模式下,可配置为脉冲输出,电机每步进一步输出一个脉冲。也可配置为丢步输出,当检测即将丢步时输出一个脉冲。

详细说明:

1OA2电机线圈A输出2
2VCP充电泵电压。可通过1nF至100nF电容连接到VS,也可以使用内部电容器不连接
3DIR方向输入
4STEP脉冲输入
5MS1_AD0

细分数配置(UART模式下,用于选择寄存器地址,AD0=LSB,AD1=MSB)

MS2,MS1:

00:1/8

01:1/32

10:1/64

11:1/16

6MS2_AD1
7EN使能输入,高电平使能
8STEPPER

模式选择输入

STEPPER,MODE:

10:单线串口模式

11:独立步进模式

9MODE
10PDN_UARTUART输入/输出;在独立步进模式下,反向断电控制输入(低电平有效)
11VIO/NSTDBY供电引脚(1.8V至5V),若接GND时,进入待机模式并复位
12DIAG诊断输出;当驱动程序错误或故障时输出高电平。EN拉低时复位
131.8VOUT内部1.8V稳压器输出;为了达到最佳性能,用尽可能短的回路通过100nF电容连接到GND即可
14GND
15OB2电机线圈B输出2
16BRB线圈B的感测电阻连接
17OB1电机线圈B输出1
18VS电机供电电压
19OA1电机线圈A输出1
20BRA线圈A的感测电阻连接
21Exposed die pad接GND

独立步进模式

        引脚配置

        EN:高电平、STEPPER:高电平、MODE:高电平、DIR:配置普通IO、STEP:配置定时器PWM输出脉冲

        电机左右(前后)动作代码示例


/***********************************************************
                    以STM32F103C8T6为例
                    PB13------EN
                    PB14------STEP
                    PB15------DIR
************************************************************/


#define		DIR_Long			GPIO_ResetBits(GPIOB,GPIO_Pin_15)
#define		DIR_Short		    GPIO_SetBits(GPIOB,GPIO_Pin_15)
#define		Motor_EN			GPIO_SetBits(GPIOB,GPIO_Pin_13)
#define		Motor_UNEN		    GPIO_ResetBits(GPIOB,GPIO_Pin_13)

//电机引脚初始化

void Motor_Init(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

    GPIO_InitTypeDef GPIO_InitStruct1;
    GPIO_InitTypeDef GPIO_InitStruct2;
    GPIO_InitTypeDef GPIO_InitStruct3;

    GPIO_InitStruct1.GPIO_Mode  = 	GPIO_Mode_Out_PP;
    GPIO_InitStruct1.GPIO_Pin   = 	GPIO_Pin_8;
    GPIO_InitStruct1.GPIO_Speed = 	GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStruct1);

    GPIO_InitStruct2.GPIO_Mode  = 	GPIO_Mode_Out_PP;
    GPIO_InitStruct2.GPIO_Pin   = 	GPIO_Pin_13 | GPIO_Pin_15;
    GPIO_InitStruct2.GPIO_Speed = 	GPIO_Speed_50MHz;
    GPIO_Init(GPIOB,&GPIO_InitStruct2);

    GPIO_InitStruct3.GPIO_Mode  = 	GPIO_Mode_IN_FLOATING;
    GPIO_InitStruct3.GPIO_Pin   = 	GPIO_Pin_12;
    GPIO_Init(GPIOB,&GPIO_InitStruct3);

    GPIO_ResetBits(GPIOA,GPIO_Pin_8);
	 GPIO_SetBits(GPIOB,GPIO_Pin_13);
    GPIO_ResetBits(GPIOB,GPIO_Pin_15);
}


//定时器初始化
void TIM1_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    TIM_OCInitTypeDef  TIM_OCInitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);  		
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); 	


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;           	
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;				
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;			
    GPIO_Init(GPIOB,&GPIO_InitStructure);              	

    TIM_TimeBaseStructure.TIM_Prescaler=0;  						
    TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; 	
    TIM_TimeBaseStructure.TIM_Period=4320-1;   						
    TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
    TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0;				
    TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);					

    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; 
    TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;//比较输出使能
    TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
    TIM_OCInitStructure.TIM_Pulse = 10;
    TIM_OC2Init(TIM1, &TIM_OCInitStructure);

    TIM_CtrlPWMOutputs(TIM1, ENABLE);
    TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);
    NVIC_EnableIRQ (TIM1_UP_IRQn);

    TIM_Cmd(TIM1, ENABLE); 

}


//TIM1更新中断服务函数
void TIM1_UP_IRQHandler(void)
{
    TIM_ClearFlag(TIM1,TIM_FLAG_Update);

    count++;

    if(count >= 37790)
    {
        count = 0;
        flag++;
    }
	 
	 if(flag%2)
	 {
		DIR_Short;
	 }
	 else
	 {
		DIR_Long;
	 }
		 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值