什麼是 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 的應用場景

  1. 直流馬達速度控制
  • 用 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、馬達、音量都可精細調整
    • 廣泛支援:微控制器、馬達驅動器、電源管理

    Similar Posts