脈寬調變(PWM)訊號基本上是一個方波,在導通(高)和關斷(低)狀態之間反覆切換。其工作週期和頻率用於確定 PWM 訊號控制目標的動作。
PWM 訊號的工作週期是指訊號處於高電平(導通)狀態的時間與完成一個週期所需的總時間之比,通常以百分比或比率來表示。
50% 的工作週期代表高電平狀態佔據一半的時間,低電平狀態佔據另一半時間。這與理想的方波相同。如果該比率大於 50%,則邏輯高電平訊號在週期中佔用的時間比邏輯低電平多,反之亦然。因此,100% 工作週期表示信號始終處於導通狀態(full-scale, 全刻度),0% 工作週期表示訊號始終處於關斷狀態(接地)。
在 Arduino 上,可以通過各種方式輕鬆實現 PWM。以下介紹的 Seeeduino 開發板就是其中一款不錯的學習和評估板。它以 ATmega328P 微控制器構建,並能與 Arduino 兼容。
板上包含6個引腳(即引腳3、5、6、9、10、11),可以利用 analogWrite()
函數輸出 PWM 波。只需利用 analogWrite()
函數即可在 PWM 引腳上產生具有指定工作週期的穩定方波。一般來說,這些引腳的頻率在 490Hz 左右,而 Seeeduino 或類似板的引腳 5 和 6 的頻率為 980Hz。
Arduino 引腳的輸出電壓為 5V,不同的工作週期輸出的電壓電平各不相同,具體如下所示:
工作週期 | 輸出電壓 |
---|---|
0% | 0V |
25% | 1.25V |
50% | 2.5V |
75% | 3.75V |
100% | 5V |
範例 - 調節 LED 的亮度
利用 PWM 技術在 Arduino 上 控制 LED 的亮度。
硬體連接圖
軟體編程
analogWrite()
函數語法:
analogWrite ( pin , value ) ;
該值代表工作週期,數值介於 0(關斷)和 255(導通)之間。
int ledPin = 9; // LED connected to digital pin 9
void setup() {
pinMode(ledPin, OUTPUT); // sets the pin as output
}
void loop() {
analogWrite(ledPin, 255); //set duty cycle to always on
}
你可以將「255」更改為「0 」至「255」之間的任何一個數字作調變不同的輸出,也可以修改程式碼以連續更改該數值。