STM32 HAL Proteus系列学习教程:PWM电机控制TB6612详解
实现目标
1、利用定时器输出PWM
2、学会STM32CubeMX软件输出PWM的配置
3、具体目标:利用定时器3的通道2(部分重映射到PB5管脚)输出1KHz的矩形波,实现电机转速控制(加速、减速、正转、反转)。
一、TB6612 芯片简介
TB6612FNG是东芝半导体的一款驱动电机的芯片。一个TB6612FNG可以驱动两个电机,每一个驱动都有两个逻辑输入引脚,一个输出引脚和一个PWM引脚。可以通过给两个逻辑输入引脚不同的电平来控制电机的运行状态,通过PWM输入引脚实现电机调速。
1、芯片内部结构图
2、引脚简介
使用时VM接电机电源的正极,GND接电机电源的负极。IN1和IN2接逻辑输入,PWM接PWM输出引脚。O1和O2接电机的正负极。
3、控制逻辑
二、原理图设计
见仿真图
三、STM32CubeMX 配置
1.定时器3时钟源
2.PWM及GPIO配置
四、程序设计
1.定义一个全局变量
int pwmVal = 500;
2.开启定时器3通道2产生PWM
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);
/* USER CODE END 2 */
3.按键调节占空比及电机正反转
if (HAL_GPIO_ReadPin(GPIOB, K1_Pin) == 0)//按键1按下
{
while(!HAL_GPIO_ReadPin(GPIOB, K1_Pin));//松手检测
pwmVal += 50; // pwmVal = pwmVal + 50;
if (pwmVal>= 1000)
pwmVal= 1000;
TIM3->CCR2 = pwmVal; // 调节占空比
}
if (HAL_GPIO_ReadPin(GPIOB, K2_Pin) == 0)//按键2按下
{
while(!HAL_GPIO_ReadPin(GPIOB, K2_Pin));
pwmVal -= 50;
if (pwmVal<= 0)
pwmVal= 0;
TIM3->CCR2 = pwmVal; // 调节占空比
}
if (HAL_GPIO_ReadPin(GPIOB, K3_Pin) == 0)//按键3按下
{
while(!HAL_GPIO_ReadPin(GPIOB, K3_Pin));
HAL_GPIO_TogglePin(GPIOA, AIN1_Pin); //控制电机正反转
HAL_GPIO_TogglePin(GPIOA, AIN2_Pin);
}
五、实验现象
开发板上无电机,本项目只作仿真。
六、仿真实现
Protues 8.8 仿真的时候TIM3输出PWM的通道2 不能够管脚重映射,PWM输出在PA7 !!!
总结
作者:面包板扎