黄工无刷电机学习
直播中

发财树

11年用户 460经验值
私信 关注
[问答]

请问TB6612如何驱动电机?

请问TB6612如何驱动电机?

回帖(1)

王有罕

2021-10-20 10:17:18
一、连线
PWMA---连接程序中的端口                                      VM------连接高电平
AIN2-----连接高电平(1)                                        VCC-----连接VCC
AIN1-----连接低电平(0)                                        GND-----接地
STBY----连接VCC                                                     A01-----连接电机1
BIN1---  连接低电平(0)                                         A02-----连接电机1
BIN2---- 连接高电平(1)                                         B2------连接电机2
PWMB---连接程序中的端口                                      B1------连接电机2
GND-----接地                                                           GND----接地

二、TB6612芯片引脚图





三、TB6612原理
  STBY口接单片机的IO口清零电机全部停止,置1通过AIN1,AIN2,BIN1,BIN2控制电机的正反转
VM(4.5~15 V)和VCC(2.7~5.5 V)





四、PWM简介
    脉冲宽度调制 (PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用
  微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。
   
   




   
    假定定时器工作在向上计数PWM模式,且当CNT=CCRx时,输出为1.
    所以可以得到如上的IO逻辑示意图:当CNT值小于CCRx的时候,IO输出低电平(0),当CNT>=CCRx的时候,IO输出高电平(1),当CNT达到ARR值的时候,重新归零,然后重新向上计数,依次循环。
   
      

五、直流电机的驱动


void TIM1_PWM_Init(u16 arr,u16 psc)
{                                                          
        RCC->APB1ENR|=1<<2;         //TIM4时钟使能   
       
        RCC->APB2ENR|=1<<3;
        GPIOB->CRL&=0X00FFFF00;        //PB0 1 6 7清除之前的设置
        GPIOB->CRL|=0X3B000033;        //复用功能输出
                                                                         
        GPIOB->CRH&=0XFFFFFFF0;        //PB8清除之前的设置
        GPIOB->CRH|=0X00000003;        //复用功能输出
       
        TIM4->ARR=arr;                        //设定计数器自动重装值
        TIM4->PSC=psc;                        //预分频器设置
       
        TIM4->CCMR1|=6<<4;          //CH1 PWM1模式               
        TIM4->CCMR1|=1<<3;                 //CH1预装载使能         
        TIM4->CCER|=1<<0;           //OC1 输出使能          
        //TIM4->BDTR|=1<<15;           //MOE 主输出使能          
        TIM4->CR1=0x0080;           //ARPE使能
        TIM4->CR1|=0x01;            //使能定时器1        

//TIM1
        RCC->APB2ENR|=1<<11;         //TIM1时钟使能
       
        RCC->APB2ENR|=1<<2;
        GPIOA->CRH&=0XFFFFFFF0;        //PA8清除之前的设置
        GPIOA->CRH|=0X0000000B;        //复用功能输出
       
        TIM1->ARR=arr;                        //设定计数器自动重装值
        TIM1->PSC=psc;                        //预分频器设置
  
        TIM1->CCMR1|=6<<4;          //CH1 PWM1模式                 
        TIM1->CCMR1|=1<<3;                 //CH1预装载使能         
        TIM1->CCER|=1<<0;           //OC1 输出使能          
        TIM1->BDTR|=1<<15;           //MOE 主输出使能          

        TIM1->CR1=0x0080;           //ARPE使能
        TIM1->CR1|=0x01;            //使能定时器1                
}  

void Go_Straight(int left,int right)
{         
        LEFT_PWM_VAL=left;   //250
        RIGHT_PWM_VAL=right;  //270
       
  GPIOB->ODR|=1<<0;      //PB0 1                                                                          
  GPIOB->ODR&=~(1<<1);   //PB1 0
                 
        GPIOB->ODR|=1<<7;      //PB7 1                                                                          
  GPIOB->ODR&=~(1<<8); //PB8 0
       
}

void Stop(void)
{
                GPIOB->ODR&=0<<0;
                GPIOB->ODR&=0<<1;
               
                GPIOB->ODR&=0<<7;      //PB7 0                                                                                  
                GPIOB->ODR&=0<<8; //PB8 0

}


举报

更多回帖

发帖
×
20
完善资料,
赚取积分