PWN流水灯

本文最后更新于:2021年10月13日 下午

设有三个小灯A、B、C 事先处于熄灭状态,接着A 灯开始由暗到亮,再由亮变暗,A 灯熄灭之后B 灯开始由暗变亮,再由亮变暗,B 灯熄灭之后C 灯开始由暗变亮,再由亮变暗,如此循环。

知识准备

   PWM变频技术

        数字信号只有高、低电位两种状态,如同第一章的LED闪烁程序,把一只LED接上Arduino的第13引脚,每隔0.5s切换高低电位,LED将不停闪烁。这是一种以一秒钟为周期的切换信号,频率就是1Hz。提高切换频率(通常指30Hz以上),将能仿真模拟电压高低变化的效果。以下图的1kHz为例,若脉冲宽度(开启时间)为周期的一半(称为50%工作周期),就相当于输出高电位的一半电压;10%工作周期,就相当于输出0.5V。

image-20210201151545002

如此,不需采用电阻降低电压,电能不会在变换的过程被损耗掉。这种在数字系统上“仿真”模拟输出的方式,称为脉冲宽度调制(Pulse Width Modulation,简称PWM)。某些强调省电的变频式洗衣机和冷气机等家电,也是运用PWM原理来调节机器的运转速度。

PWM的计算方式如下。

image-20210201152002139

因此,在5V电源的情况下输出3.3V,从上面的式子可知:

image-20210201152106610

根据计算结果得知,5V电源的66%PWM脉冲宽度就相当于输出3.3V。

   PWM指令和默认频率

​ Arduino的analogWrite指令可以指挥输出PWM信号,指令格式如下:

1
analogWrite(端口号,模拟数值)

其中端口号必须是3、5、6、9、10或11这六个数字端口的其中之一;模拟数值介于0255之间,代表输出介于05V之间的仿真模拟电压值。

此外,Arduino微电脑板预设采用1kHz和500Hz两组不同的PWM输出频率,控制电机时,一般采用1kHz频率:

  • 引脚5、6:约1kHz(由Timer 0系统定时器决定,这是delay()等函数的基准时间,不建议更改)
  • 引脚3、11(Timer 2)以及9、10(Timer 1):约500Hz

   LED接法

​ led的工作电压

颜色 正向电压
红色 1.7V ~ 2.2V
橙色 2.0V
黄色 2.1V
绿色 2.2V
蓝色 3.2V ~ 3.8V
白色 3.2V ~ 3.8V

LED的工作电压约2V,但Arduino的输出电压是5V,我们应该在Arduino的输出和LED之间连接一个限流电阻。连接方式有两种。

image-20210201161918881
  • 左边的接法是由微处理器提供负载所需电流,一般称之为源流(sourve current);

  • 右边的接法是由电源(Vcc)提供电流,此谓之替流(sink current)

   电阻计算

为计算方便,LED工作电压通常取2V,电流去10mA(注:高亮度LED的工作电压约3V,工作电流约30mA)。



设计方案

简简单单设计完成

image-20210201174319908

材料清单

材料 数量
Arduino Uno板 1
面包板 1
LED 3
1kΩ电阻 3
杜邦线 若干

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
const byte LEDS[] = {9, 10, 11};

void setup()
{
for (byte i = 0; i < sizeof(LEDS); i++)
{
pinMode(LEDS[i], OUTPUT);
}
}

void loop()
{

int a = 0;
for (byte i = 0; i < sizeof(LEDS); i++)
{
while (a <= 255)
{
analogWrite(LEDS[i], a++);
delay(10);
}
while (a >= 0)
{
analogWrite(LEDS[i], a--);
delay(10);
}
delay(50);
}
delay(50);
}

成果展示

此视频可以在电脑网页中加载(推荐chrome、Firefox),手机请用Firefox或chrome打开


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!