Arduino 中的 PWM
什么是 PWM?
PWM 指的是脉冲宽度调制。简单来说,我们可以从 Arduino 板的某些引脚输出方波,并且可以控制方波处于高电平状态的时间分数(称为**占空比**)。
为什么需要 PWM?
PWM 有多种应用。一个重要的应用是运行电机。可以通过 PWM 输出控制电机的转速。PWM 也可用于生成高电平和低电平之间的电压。因此,如果您的高电平为 5V,低电平为 0V,并且您需要 3.5V 的输出,如果您生成一个方波,该方波在周期中的 70% 时间保持高电平,或者从技术角度来说,占空比为 70%,并且如果其周期非常短(以毫秒为单位),则接收此方波的节点将体验到 3.5V 的电压。考虑到此应用,Arduino 中用于执行 PWM 的函数称为**analogWrite()**就不足为奇了。毕竟,我们本质上是输出模拟电压,而不是读取它。
Arduino 的哪些引脚支持 PWM?
并非 Arduino 的所有引脚都支持 PWM。在 Uno 开发板上,引脚用**~**符号特别标记。对于其他开发板,请参阅开发板的数据手册。
从上图可以看出,只有引脚 3、5、6、9、10 和 11 可以支持 PWM。除了引脚 5 和 6 之外,所有引脚上的方波频率均为 490 Hz(约 2 毫秒周期),引脚 5 和 6 上的频率为 980 Hz(约 1 秒周期)。
示例应用
我们将考虑 LED 亮度逐渐增加然后逐渐降低的示例。我们将 LED 连接到 PWM 引脚,并不断增加该引脚上的占空比,从而增加该引脚上的电压。因此,LED 将不断变亮,直到达到最大占空比 (100)。
现在,请注意,使用 8 位数字表示占空比。因此,占空比可以在 0 到 255 之间变化。因此,值 255 对应于 100% 的占空比。127 表示约 50% 的占空比,依此类推。
**analogWrite** 的语法如下:
语法
analogWrite(pin_number, duty_cycle)
电路图如下所示:
注意:LED 的长脚(+ve)连接到引脚 9,短脚(-ve)通过电阻连接到 GND(电阻值可以是 100 欧姆左右。我们选择 220 欧姆)。
代码如下所示:
示例
int led_pwm_pin = 9; void setup() { pinMode(led_pwm_pin, OUTPUT); } void loop() { //Brightening the LED for(int i=0; i < 255; i++){ analogWrite(led_pwm_pin, i); delay(10); } //Dimming the LED for(int i=255; i>0; i--){ analogWrite(led_pwm_pin, i); delay(10); } }
从代码中可以看到,我们将占空比从 0% 逐渐增加到 100%,然后从 100% 降低到 0%。您应该看到 LED 上的亮度先增加后降低。