目录

一、简介

1.概念

2.引入

二、特性

三、引脚定义

四、控制过程

控制说明:

总结:

五、简单demo

接线说明:

1.GPIO初始化

2.PWM初始化

3.电机正反转控制

4.主函数逻辑


一、简介

1.概念

        TB6612FNG 是一种用于直流电机的驱动 IC,具有低导通电阻的 LD MOS 结构输出晶体管。通过两个输入信号 IN1 和 IN2,可以选择以下四种模式之一:顺时针(CW)、逆时针(CCW)、短刹车(short brake)和停止模式(stop mode)。

2.引入

        TB6612FNG 是东芝半导体公司生产的一款直流电机驱动器件,它具有大电流 MOSFET-H 桥结构,双通道电路输出,可同时驱动 2 个电机。也许大家更熟悉 L298N, 其实这两者的使用基本一致的。而且,相比 L298N 的热耗性和外围二极管续流电路, 它无需外加散热片,外围电路简单,只需外接电源滤波电容就可以直接驱动电机,利于减小系统尺寸。对于 PWM 信号输入频率范围,高达 100 kHz 的频率更是足以满足我们大部分的需求了。

二、特性

  • 电源电压:VM = 15V(最大值)
  • 输出电流:IOUT = 1.2A(平均)/ 3.2A(峰值)
  • 输出低导通电阻:0.5Ω(上管+下管,典型值 @ VM ≥ 5V)
  • 待机(省电)系统 • 顺时针/逆时针/短刹车/停止功能模式
  • 内置过热关断电路和低电压检测电路 
  • 小型封装(SSOP24:0.65 mm 引脚间距)

三、引脚定义

引脚号引脚名类型说明
1AO1O通道A输出1
2AO1
3PGND1——电源接地1
4PGND1
5AO2O通道A输出2
6AO2
7BO2O通道B输出2
8BO2
9PGND2——电源接地2
10PGND2
11BO1O通道B输出1
12BO1
13VM2——电源输入,最大15V
14VM3
15PWMBI通道B的PWM输入引脚,内接200KΩ下拉电阻
16BIN2I通道B逻辑输入2引脚,内接200KΩ下拉电阻
17BIN1I通道B逻辑输入1引脚,内接200KΩ下拉电阻
18GND——接地
19STBYI待机引脚,接低电平处于待机模式,接高电平开始工作
20Vcc——电源输入
21AIN1I通道A逻辑输入1引脚,内接200KΩ下拉电阻
22AIN2I通道A逻辑输入2引脚,内接200KΩ下拉电阻
23PWMAI通道A的PWM输入引脚,内接200KΩ下拉电阻
24VM1——电源输入,最大15V

TB6612 与TB6612FNG的原理图:

 两者具体差别不大,TB6612FNG 是在 TB6612 基础上进一步优化和改进的版本,提供了更高的性能和更多的功能。下面举例TB6612的控制和使用过程。

四、控制过程

控制说明:

①VM 直接接电池

②VCC 是内部的逻辑供电,一般给 3.3 或者 5V 都行。

③GND 一个接电源地,一个接单片机地。

④STBY 置高模块才能正常工作。

⑤上图中红色部分的 5 个引脚控制一路 电机,蓝色部分的控制另外一路电机,这里只讲其中的 A 路, B 路的使用是一样 的。 AO1 和 AO2 分别接到电机的+和-。然后通过 PWMA、 AIN2、 AIN1 控制电机。 其中 PWMA 接到单片机的 PWM 引脚,一般 10Khz 的 PWM 即可,并通过改变占空比来调节电机的速度,其电平对应的状态如下表所示:

AIN1010
AIN2001
运行状态停止正转反转

总结:

①PWM 信号控制输出电压大小从而达到控制转速的作用

②AIN1 与 ANI2 信号一起控制电机的正反转以及停止状态 

五、简单demo

接线说明:

PWMA    -----------    A8
AIN1    -----------    B14
AIN2    -----------    B15
STBY    -----------    5V

VM      -----------    5-12V(外接电源)

GND     -----------    GND  (外接电源)
VCC     -----------    5V   (逻辑电源)

GND     -----------    GND   (逻辑共地)

AO1   ------------  电机线电源+
AO2   ------------  电机线电源-

1.GPIO初始化

void GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;            //定义结构体GPIO_InitStructure
	
  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE); // 使能PB端口时钟  
  GPIO_InitStructure.GPIO_Pin =   GPIO_Pin_14| GPIO_Pin_15;	  //PB14 PB15
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     	//推挽,增大电流输出能力  
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //IO口速度
  GPIO_Init(GPIOB, &GPIO_InitStructure);          //GBIOB初始化  
	
}

2.PWM初始化

void PWM_Init(u16 arr,u16 psc)
{
	//定义结构体
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	TIM_OCInitTypeDef  TIM_OCInitStructure;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);  //使能GPIO外设时钟使能
   //设置该引脚为复用输出功能,输出TIM1 CH1 CH4的PWM脉冲波形
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //TIM_CH1 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值	 
	TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  不分频
	TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
	TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

 
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式1
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
	TIM_OCInitStructure.TIM_Pulse = 0;                            //设置待装入捕获比较寄存器的脉冲值
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;     //输出极性:TIM输出比较极性高
	TIM_OC1Init(TIM1, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx

    TIM_CtrlPWMOutputs(TIM1,ENABLE);	//MOE 主输出使能	

	TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);  //CH1预装载使能	  
	
	TIM_ARRPreloadConfig(TIM1, ENABLE); //使能TIMx在ARR上的预装载寄存器
	
	TIM_Cmd(TIM1, ENABLE);  //使能TIM1

}

3.电机正反转控制

void Motor_Ctrol(int mode)
{
	if(mode==1)
	{
	 GPIO_SetBits(GPIOB, GPIO_Pin_14);	 // 高电平
	 GPIO_ResetBits(GPIOB, GPIO_Pin_15);	 // 低电平}
	}
	 if(mode==0)
	{
	 GPIO_SetBits(GPIOB, GPIO_Pin_15);	 // 高电平
	 GPIO_ResetBits(GPIOB, GPIO_Pin_14);	 // 低电平}
	 }
 
}

4.主函数逻辑

 int main(void)
 {	
   SystemInit(); //配置系统时钟为72M   
   delay_init();    //延时函数初始化
   GPIO_Init();    //初始化gpio口B pin_14/pin_15

   PWM_Init(7199,0);      //初始化pwm输出 72000 000 /7199+1=10000 
	
  while(1)
	{
	 Motor_Ctrol(0);                //moto=1时正转
	 TIM_SetCompare1(TIM1,3000);   //设置TIM1通道1的占空比  3000/7200
//	 Motor_Ctrol(1);                //moto=0时反转
//	 TIM_SetCompare1(TIM1,4000);   //设置TIM1通道1的占空比  4000/7200
	}
 }

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐