什麼是 PWM(Pulse Width Modulation)?
什麼是 PWM(Pulse Width Modulation)?
PWM,全名 Pulse Width Modulation(脈寬調變),是一種用來控制電壓或功率的電子訊號技術。 它的核心概念是:透過改變訊號的高電位時間比例(Duty Cycle),來控制輸出的平均電壓或能量。
PWM 在電子控制、馬達速度控制、LED 調光、音頻輸出等方面非常常見。
一、PWM 的基本概念
PWM 是一種數位訊號(HIGH/LOW),但透過調整「高電位時間比例」來模擬類比效果。
Duty Cycle(佔空比)
Duty Cycle 指的是「高電位時間 / 總週期時間」。
Duty Cycle = 高電位時間 / (高電位時間 + 低電位時間)
| Duty Cycle | 平均電壓 | 說明 |
|---|---|---|
| 0% | 0 V | 完全關閉 |
| 50% | Vcc/2 | 半功率 |
| 100% | Vcc | 全功率 |
頻率(Frequency)
PWM 的頻率是訊號重複的速度,例如 490 Hz 表示每秒重複 490 次。
- LED 調光 → 太低會閃爍,需要 >100Hz
- 馬達控制 → 一般 490Hz 或 980Hz 就足夠
二、PWM 的應用場景
- 直流馬達速度控制
- 用 PWM 調整平均電壓,改變馬達轉速
- 搭配 H 橋(如 L298N)可控制方向與速度
2. LED 調光
- 改變 PWM Duty Cycle,LED 亮度隨之改變
3. 音頻信號產生
- 利用高頻 PWM 模擬類比波形,輸出音調
4. 電源控制(DC-DC 降壓)
- PWM 控制 MOSFET 開關,實現高效率電壓轉換
三、PWM 與 Arduino 的關係
Arduino 提供 analogWrite(pin, value) 來產生 PWM 訊號:
int ledPin = 5;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
for (int i = 0; i <= 255; i++) {
analogWrite(ledPin, i); // 調整 LED 亮度
delay(10);
}
}
value範圍 0~255- 0 → 完全關閉
- 255 → 全亮(Vcc)
- 中間值 → 半功率,Duty Cycle = value/255
四、PWM 與平均電壓的關係
假設 Vcc = 5V,PWM Duty Cycle = 40%:
平均電壓 = 5V × 0.4 = 2V
這表示負載會接收到相當於 2V 的平均能量,雖然訊號本身仍是 0V / 5V 方波。
五、PWM 與馬達、LED 實作示例
LED 調光
int ledPin = 9;
void setup() { pinMode(ledPin, OUTPUT); }
void loop() {
for(int i=0; i<=255; i++){
analogWrite(ledPin, i); // 從暗到亮
delay(10);
}
for(int i=255; i>=0; i--){
analogWrite(ledPin, i); // 從亮到暗
delay(10);
}
}
馬達速度控制(搭配 L298N)
int enA = 5; // PWM 控制速度
void setup() { pinMode(enA, OUTPUT); }
void loop() {
analogWrite(enA, 128); // 半速
delay(2000);
analogWrite(enA, 255); // 全速
delay(2000);
analogWrite(enA, 0); // 停止
delay(1000);
}
六、PWM 優點
- 節能高效:不直接降低電壓,而是調整脈衝比例
- 可精確控制:LED、馬達、音量都可精細調整
- 廣泛支援:微控制器、馬達驅動器、電源管理
