理论
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赋值