【STM32 HAL库】TB6612电机驱动

理论

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
电机控制模式输入端,控制电机正反转

AIN1AIN2
00停止
01正转
10反转

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赋值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值