【STM32 HAL库】TB6612电机驱动
【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
电机控制模式输入端,控制电机正反转
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);
}
常见问题
为什么电机不转
硬件:
软件:
作者:Abaaba+