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 !!!


总结

作者:面包板扎

物联沃分享整理
物联沃-IOTWORD物联网 » STM32 HAL Proteus系列学习教程:PWM电机控制TB6612详解

发表评论