RYMCU

PWM实现LED调光

Hugh 4 月前
# STM32 F1 # PWM # LED调光

所属作品集

背景

众所周知,在我们的日常生活中有许许多多的场景需要用到 LED 亮度调节,比较常见的场景包括(不仅限于)手机屏幕亮度调剂、电视亮度、汽车仪表盘亮度、家用电器等。这一讲我们介绍如何利用单片机实现 LED 调光。

原理

介绍调光之前,简单回顾一下点亮 LED 的工作原理,如下图左侧所示。在电源与地之间串联电阻 R 和 LED,我们这里以 3.3V 电源进行讲解,根据高中物理欧姆定律可知,调节电阻 R 的大小,便可调节流过 LED 电流的大小,又因为 LED 是电流驱动器件,发光亮度与电流成正比关系。因此,调节电阻便可实现 LED 发光亮度的调节了。但,这种调节方法在许多场景中是不太适应的,例如手机背景亮度的调节。原因是,电阻 R 是安装在电路板上,每次调节亮度需要重新焊接一个电阻,为了一个调节背景亮度还需要手机开盖换电阻,显然是不太合实际的。因此,我们希望可以通过软件直接调节亮度。

另一种调节 LED 亮度的方法称之为 PWM 调光。如下图右侧所示,直接将 LED 连接至单片机的 I/O 口,单片机 I/O 的状态只有两种要么是 0V、要么是 3.3V。当 I/O 输出 0V 时,LED 点亮,当 I/O 输出 3.3V 时,LED 两端无电压差,并无电流流过,因此不亮。而单片机输出的到底是 0V 还是 3.3V,在软件中可以设计的,因此,可以实现软件调节 LED 了。
led.png

  • 如下图 ① 所示,当单片机 I/O 口输出一直为 3.3V 时,LED 处于常灭状态。
  • 当单片机 I/O 口输出为 0V 时,LED 点亮,如下图 ② 所示。
  • 当单片机 I/O 口先输出 1s 的 0V、再输出 1s 的 3.3V,如此循环往复的周期信号时,如图 ③ 所示。此时我们将观察到的现象为 LED 先点亮 1s,然后熄灭 1s,接着又点亮 1s,再灭 1s,看到的是一种 LED 闪烁的状态。上面单片机 I/O 口输出的实际上是一个,周期为 2s,0V 和 3.3V 持续时间各占 50%,既 0V 占空比为 50% 的周期信号。
  • 试想一下,假设我们保持占空比 50% 不变,而将周期 2s 缩小至 1ms,相当于 0.5ms 的 0V,0.5ms 的 3.3V 的周期信号,如图 ④ 所示。此时,LED 实际上也是闪烁的,只不过闪烁的太快了,人眼无法分辨。由于人眼的视觉暂存效应,看到的 LED 一直是点亮的,只不过亮度没有图 ① 那么亮,大概在一半作用。
  • 我们回过头来看一下,当 0V 的占空比为 0% 的时候,不就是图 ① 的常灭状态,当 0V 的占比为 100%,就是图 ② 的常亮情况。那我们是不是通过调节输出的 0V 的占空比,让其在 0%~100% 之间变化,就可以调节 LED 的亮度了?没错,这就是 PWM 调光原理,即脉冲宽度调制技术(Pulse Width Modulation),即通过调节每个周期内点亮 LED 的时间长度,来实现 LED 亮度的调节。
  • 通过调节占空比可以实现 LED 亮度的调节,那么 PWM 调光有什么缺点呢?屏幕是否闪烁和周期,也常说频率是有关系的。当周期为上面的 2s 时,频率为周期的倒数,即 0.5Hz 时,人眼很轻易分辨闪烁的效果。当周期为 1ms,即频率为 1KHz 时,人眼就无法分辨是否闪烁了。人眼可分辨的周期大约为 25ms,既 40Hz,一般认为只要频率大于 60Hz,对与人眼来说其实是一样的,都看不出闪烁效果。所以,对于手机屏幕来讲,大于 60Hz 就可以了。如果你的手机是 PWM 调光的,使用高清的摄像机去拍摄屏幕,可以看清闪烁条纹。
  • 单片机的 I/O 口如何实现 PWM 信号输出呢?请参见“STM32F103C8T6 TIM4 同时配置 4 路 PWM 输出”
    LED 调光.png

呼吸灯的实现

根据上面的介绍,参考“STM32F103C8T6 TIM4 同时配置 4 路 PWM 输出” 。通过设置占空比就可以让 LED 显示某一个亮度了。这一节我们要在上述基础之上实现呼吸灯的效果,既 0-2sLED 灯由不亮逐渐变到最亮,2s-4s 由最亮逐渐变到不亮,如此循环往复。
原理简单,在 0-4s 的时间内平均分成 40 等份,1,2,3,....20 等份的占空比分别设置为 5%,10%,15%,....100%,即逐渐递增,后 21,22,23,....40 等份的占空比分别设置为 100%,95%,90%,....5%,即逐渐递减。因此只需要在主程序中启动一个定时器即可,在相应的定时器中断函数中设置 PWM 的占空比即可。工程代码如下:
LED 呼吸.mp4

所属作品集

后发布评论