本节是对PWM模式的一个拓展应用,利用PWM波驱动LED灯,实现一个呼吸灯!
开发环境:CubeMX+MDK5.27
芯片型号:STM32F103ZET6
时间:2020/07/14
简介:上一节介绍了什么叫做PWM波,那么PWM波是如何实现呼吸灯的呢?下面就简单介绍一下实现呼吸灯的原理。首先PWM波的输出电压范围是在0~3V,而输出到引脚的实际电压是平均电压,平均电压是受占空比的控制的,当占空比越大,平均电压越大,占空比越小,平均电压越小。因此占空比越大LED灯越亮,反之LED灯越暗
呼吸灯就是让灯从亮到暗然后再从暗到亮,如此循环往复的过程就实现了呼吸灯的效果。另外,市面上有些台灯的亮度分档位调节的原理也是利用PWM来实现的,甚至手机屏幕亮度也有用PWM调节的,所以PWM是很常用的一种技术,不光是亮度调节,在电机驱动方面,也会用到PWM波来控制电机的转速,以及舵机的角度。
本节只介绍如何利用PWM实现呼吸灯,而其他的PWM驱动电机以及PWM驱动舵机不作详细介绍,如有兴趣可自行了解。
实现步骤
第一步,配置定时器TIM3,具体配置如图,参数的意义可见定时器的PWM输出功能
注:这里配置TIM3是因为开发板的LED0对应的引脚PB5可复用为TIM3的通道2,即TIM3可通过该引脚输出PWM波来控制LED0.关于引脚复用功能,可查看数据手册的Pinouts and pin description下的
Hig-density STM32F103xC/D/E pin definitions最右方的Alternate functions就代表复用功能
右方就是数据手册DS5792.pdf
这里我们设置Pulse为0,即PWM波初始占空比为0%,配置完成后,可以观察到PB5引脚变绿,且上方有TIM3_CH2的字样。
注:PWM波的频率要大于50HZ,因为人眼的视觉暂留效果,频率小于50HZ会看到明显的闪烁。
第二步,编写代码,修改main.c的内容如下
在USER CODE BEGIN PV下添加如下代码
uint16_t Duty = 0; //占空比uint16_t Step = 100; //占空比的步进值
在USER CODE BEGIN 2下添加如下代码
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);//启动定时器2的通道1输出PWM信号
在USER CODE BEGIN 3下添加如下代码
for(Duty = 0;Duty <= 1000;Duty = Duty + Step )//占空比不断增加,灯从暗变亮
{
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_2,Duty);
HAL_Delay(100);
}
for(Duty = 1000;Duty > 0;Duty = Duty - Step)//占空比不断减小,灯从亮变暗
{
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_2,Duty);
HAL_Delay(100);
}
总结:到此我们就可以实现呼吸灯了,具体现象请烧录板子观察。除此功能外,PWM波还可控制电机转动,实现风扇调速,PWM波还可以驱动舵机,实现机械臂的控制。更多有趣的功能,等你去发现!!!
