TB6612FNG直流电机驱动

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_44951165/article/details/102574768

定义:

    TB6612FNG是一款直流电机驱动器件,它具有大电流MOSFET-H桥结构,双通道电路输出,可同时驱动2个电机。
     TB6612FNG每通道输出最高1.2 A的连续驱动电流,启动峰值电流达2A/3.2 A(连续脉冲/单脉冲);
     4种电机控制模式:
     正转/反转/制动/停止;PWM支持频率高达100 kHz;

功能引脚图:

在这里插入图片描述
**

逻辑真值表

在这里插入图片描述
使用说明:
   TB6612FNG的主要引脚功能:AINl/AIN2、BIN1/BIN2、PWMA/PWMB为控制信号输入端;

 :这里的几个引脚接stm32开发板上的GPIO口
 即将GPIO口初始化为输出,并通过定时器输出两路pwm接到6612上。

   AO1/A02、B01/B02为2路电机控制输出端;

 ;:A,B两路分别控制两个直流电机

   STBY为正常工作/待机状态控制引脚;
    VM(4.5~15 V)和VCC(2.7~5.5 V)分别为电机驱动电压输入和逻辑电平输入端。
:VM引脚接12v直流电源,VCC接stm32板上的VCC。

**

实物图

在这里插入图片描述
基于上述内容,我画了一个计算机电机单元控制图,如下
在这里插入图片描述
**

软件实现部分

接下来就开始着手连接Stm32与TB6612模块:
 首先我们需要完成软件上的支持,即控制stm32输出pwm信号与驱动电机信号。我用的是keil5来编写程序。
   
通过查阅资料,pwm信号可以通过GPIOB端口的pb6和pb7输出,因此我选择了用GPIOB口做为输出。用pb1,pb2,pb3,pb4做为控制电机驱动信号。以下是代码实现:
在这里插入图片描述

void tim4_pwm_init(u16 arr,u16 psc)
{  
	
	RCC->APB1ENR |= 1<<2;    //时钟复位TIM4
	TIM4->CR1=0x0080;     //ARPE 使能,Timx_ARR寄存器被装入缓冲器
	TIM4->CR1|=0x01;      //使能定时器 4
  
	  RCC->APB2ENR |= 1<<3;       //时钟使能GPIOB  由电路图知GPIO6和TIM4的通道一复用 
	  GPIOB->CRL&=0X00F00000;
	  GPIOB->CRL|=0XBB033333;    //pb6  7复用功能输出   PB6输出ch1,pb7输出ch2
	  TIM4->ARR = arr;            //设置计数器自动重装载值
	  TIM4->PSC = psc;              //预分频器设计
	
	  TIM4->CCMR1 =0X6060;  //配置Tim4输入捕获模式
	
	  TIM4->CCMR1|=1<<3;            //CH1 预装载使能   
	  TIM4->CCMR1|=1<<11;           //CH 2 预装载使能
	
	  TIM4->CCER |=1<<0;            //OC1 输出使能 
	  TIM4->CCER |=1<<4;            //OC2 输出使能
	
	  
}
这里用到的寄存器全部可以在stm32中文手册里查到。

将GPIOB口和TIM4定时器配置完后,然后写了电机的驱动函数,如下:

```void go(int pwmnum)
{
	

	  GPIOB->ODR&=(~1<<3);//pb3
	  GPIOB->ODR|=1<<2;//pb2
      GPIOB->ODR&=~(1<<1); //pb1  
	  GPIOB->ODR|=1<<4;   //pb4
	  MOTOR_Pwm_Valu=pwmnum;
	  MOTOR_Pwm_Valu2=pwmnum;
}

至此基本代码编写已经完成,我们只需要在主函数里调用go()函数,用过改变pwmnum的值就可以改变电机速度了。

#include "sys.h"
#include "pwm.h"
#include "usart.h"		
#include "delay.h"	
#include "led.h"  
#include "key.h"

int main(void)
{			
	
	Stm32_Clock_Init(9);//系统时钟设置
	
	delay_init(72);	    //延时初始化
	uart_init(72,9600); //串口初始化 
	LED_Init();		  	//初始化与LED连接的硬件接口
	tim4_pwm_init(899,0);
	KEY_Init();
	LED0=0;	//点亮LED
   while(1)
   {
	go(5000);//在这里改变参数值
  }
}

成果图

在这里插入图片描述

还请大佬们指出不足之处。

猜你喜欢

转载自blog.csdn.net/weixin_44951165/article/details/102574768