在第二课我们学习了如何让LED闪烁。但是LED的玩法远不仅如此。在日常生活中你有没有遇到过灯光慢慢变亮或者慢慢变暗呢?这叫呼吸灯。所谓呼吸灯,就是控制LED逐渐变亮,然后逐渐变暗,循环交替。上一课我们学会了直接用高电平点亮LED,低电平熄灭LED。如果要让LED不那么亮但又不完全熄灭,介于中间状态,只需控制流过LED的电流就可以实现。电流减小LED变暗,电流增大LED变亮。所以只需要调节LED两端的电压减小或增大(电流也会随之减小或增大)就能控制LED的亮暗程度了。
数字端口电压输出只有LOW与HIGH两个开关,对应的就是0V与3.3V(或5V)的电压输出。可以把LOW定义为0,HIGH定义为1,1秒内让单片机输出500个0或者1的信号。如果这500个信号全部为1,那就是完整的3.3V;如果全部为0,那就是0V。如果010101010101这样输出,刚好一半,端口输出的平均电压就为1.65V了。这和放映电影是一个道理。我们所看的电影并不是完全连续的,它其实是每秒输出25张图片,人的肉眼分辨不出来,看上去就是连续的了,PWM也是同样的道理。如果想要不同的电压,就控制0与1的输出比例就可以了。当然这和真实的连续输出还是有差别的,单位时间内输出的0,1信号越多,控制的就越精确。
那么什么是PWM呢?PWM简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。
PWM的频率是指在1秒钟内,信号从高电平到低电平再回到高电平的次数,也就是说一秒钟PWM有多少个周期,单位Hz。
PWM的周期,T=1/f,T是周期,f是频率。如果频率为50Hz ,也就是说一个周期是20ms,那么一秒钟就有 50次PWM周期。
占空比,是一个脉冲周期内,高电平的时间与整个周期时间的比例,单位是% (0%-100%) 一个周期的长度。如下图所示。
这一课学习使用PWM来控制0与1的输出比例实现控制电压。
前面实验二我们就学习了如何控制一个LED,由原理图可以得知,控制时,模块上GND VCC供电后,信号端S为高电平时,模块上LED亮起。
按照接线图正确接好模块,用USB线连接到计算机上电,单击
来执行程序代码。代码开始执行,能看到模块上的紫色LED从暗逐渐变亮,再从亮逐渐变暗,就像呼吸一样。
单击
或Ctrl+C退出程序