TB6612驱动电机

試著忘記壹切 提交于 2019-12-18 09:16:06

一、连线

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时,输出为0,当CCRx>=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

}


 

 

 

 

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!