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 上的亮度先增加后降低。

更新于: 2021 年 3 月 24 日

1K+ 次查看

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告