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+ 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.