【STM32 HAL库】TB6612电机驱动

【STM32 HAL库】TB6612与电机驱动

  • 理论
  • TB6612简介
  • 使用与引脚说明
  • 应用
  • CubeMX配置
  • Keil5代码
  • 常见问题
  • 为什么电机不转
  • 理论

    TB6612简介

    TB6612是一款双H桥电机驱动,每个H桥可以驱动一个直流电机
    本质上讲,TB6612是一个电子开关,它根据接收到的PWM信号,来控制”开“与”关“,从而输出特定的电压,以此来驱动电机

    使用与引脚说明


    VM
    驱动电压输入端,给电机供电,驱动电机,接12V
    驱动电压 = VM * PWM_Duty
    VCC
    逻辑电平输入端,给电机驱动模块供电,3.3v或5v
    STBY
    使能引脚,高电平(3.3v)使能,低电平失能
    GND
    电机驱动模块地端

    1路电机(A)

    PWMA
    PWM输入引脚,根据接收到的PWM信号的占空比,输出电压
    AIN1与AIN2
    电机控制模式输入端,控制电机正反转

    AIN1 AIN2
    0 0 停止
    0 1 正转
    1 0 反转

    A01与A02
    驱动电压输出端,即驱动电机的实际电压,由接收到的PWMA的占空比与VM电压决定
    A01与A02电压 = VM * PWMA_Duty

    2路电机(B)同理

    应用

    CubeMX配置

    配置IO口为GPIO_OutPut

    配置定时器产生PWM

    Keil5代码

    启动电机

    void Motor_Start(void)
    {
    	HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
    }
    

    设置车轮速度

    void Motor_SetSpeed(MotorDirection Mode,float speed)
    {
    	//356为我是用的电机最大转速,此if判断保证速度的合理性
    	if(0 <= speed && speed <= 356)
    	//速度转换为比较寄存器值的一元一次函数
    	pulse = 1000 - 2.8086*speed;
    	
    	if(Mode == FORWARD)
    	{
    		HAL_GPIO_WritePin(AIN1_GPIO_Port,AIN1_Pin,GPIO_PIN_RESET);
    		HAL_GPIO_WritePin(AIN2_GPIO_Port,AIN2_Pin,GPIO_PIN_SET);
    	}
    	if(Mode == BACKWARD)
    	{
    		HAL_GPIO_WritePin(AIN1_GPIO_Port,AIN1_Pin,GPIO_PIN_SET);
    		HAL_GPIO_WritePin(AIN2_GPIO_Port,AIN2_Pin,GPIO_PIN_RESET);	
    	}
    	__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,pulse);
    }
    

    常见问题

    为什么电机不转

    硬件:

  • 电源开关未开启
  • 开发板未运行程序(试试RESET)
  • STBY引脚未达到3.3V
  • 电机故障(尝试给A01和A02施加电压差,检查电机是否转动)
  • TB6612电机驱动板故障(STBY接3.3V,BIN1接3.3V,BIN2接GND,PWM接3.3V,若电机不转且A01、A02为0V,驱动板可能有故障)
  • 软件:

  • 未开启TIM定时器的PWM模式
  • 忘记为AIN1、AIN2赋值
  • 作者:Abaaba+

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【STM32 HAL库】TB6612电机驱动

    发表回复