目录
从STM32基础7--通用定时器,STM32通用定时器可以产生PWM波形,从而控制LED亮度。下面我们更加详细的了解一下,PWM对LED的控制。
PWM控制LED硬件电路
在下面的原理图中,可以看到LED0与LED1连接到STMF407的PF9与PF10引脚上。在电路中,当PF9,PF10分别为低电平的时候,LED0与LED分别导通,也就是这个电路中,PWM周期的低电平周期,LED会被导通。
PWM周期与LED闪烁
在STM32F407中,当我们使用PWM1模式时,进行如下的设置。
当我们使用逻辑分析仪(LA)抓取,可以得到如波形,也就是说Pulse设置的为低电平的时间长度。当我们下载程序进开发板时,发现LED0会一闪一闪的,时间间隔1S(PWM的周期为1S),亮的时间很短。
由于PWM的周期为1S的时间间隔(1Hz),如果人眼希望看不到闪烁就需要将PWM的周期缩小 ,也就是PWM的频率加快,让人眼觉察不到LED在闪烁。按照显示屏的设定是在60HZ,虽然人会觉察不到闪烁。但在70到150赫兹范围内的闪烁确实会导致生产力下降和健康影响。而且前最新的研究结论是频率达到2kHz以上认为对身体不产生影响,通过视觉对身体产生不良影响。
而按照国家规定的读写作业台灯性能要求需要达到3125Hz才可以免除考核。
PWM低电平与LED的亮度等级
当我们使用的PWM周期达到2KHz,以后人眼再也不会感受到LED在闪烁,而且健康也有了保证。但是这个时候我们会发现另外一个问题,就是LED的亮度等级。是什么决定了LED亮度等级?没错就是自动重装计数器的数值。Pulse值决定PWM的低电平的长度,Pulse不能超过自动重装计数器。
如果我们需要将光度等级分为256个等级(0-255),也就是说自动重装计数器的值需要设置为255。
定时器频率 =时钟频率 /((预分频+1) *(自动重装计数器+1))
预分频 = 时钟频率/((定时器频率) *(自动重装计数器+1)) = 84Mhz /(2Khz* (255+1))-1 =163
PWM实现256个等级的LED亮度呼吸灯
呼吸灯是控制LED从低亮度到高亮度,然后在从高亮度到低亮度。因此需要不断的,改变Pulse的数值。
STM32CubeMx配置通用定时器
开启PWM输出通道
设置PWM输出
开启定时器中断
中断等级设置
注:
1)设定与STM32基础7--通用定时器不一样的地方在于,PWM生成固定的频率。而呼吸灯需要,不断的刷新Pulse的值,因此需要在定时器回调函数中,判断并且刷新低电平的时间。
2)代表亮度等级为0,也就是LED不亮。
代码功能实现
main函数中,启动定时器并且开启PWM输出
定义变量控制等级与亮度方向
实现回调函数