脈衝寬度調變 (PWM) 解析

Jessie
5 min readDec 28, 2023

--

脈衝寬度調變 (Pulse Width Modulation) 是一種常用於電子和電機工程中的技術。它通過調整脈衝的持續時間(即寬度)來調節通過電路的平均電流。

定義

脈衝:在電子學中,脈衝是一種短暫的電流或電壓變化。你可以將其想像為一種快速的電信號,它突然開始,然後迅速結束。脈衝通常具有一定的形狀和持續時間,它們可以是正的(電壓上升)或負的(電壓下降)。脈衝的特點是它們的「快速變化」和「短暫的持續時間」

脈衝寬度:脈衝寬度是指脈衝的持續時間,即脈衝從開始到結束的時間長度。在PWM中,通過改變脈衝寬度(即調節脈衝持續的時間),可以控制通過電子裝置的平均功率。脈衝寬度的改變意味著改變脈衝中”高”狀態(或”低”狀態,取決於系統設計)的持續時間。

脈衝寬度調變

想像一下,你有一個開關,可以迅速地在開和關之間切換。脈衝寬度調變就是在這個開關上玩一個精確的時間遊戲。

這個遊戲的關鍵在於兩個部分:一部分時間開關是開的(讓電流通過),另一部分時間開關是關的(不讓電流通過)。如果開關打開的時間比關閉的時間長,那麼通過的平均電流就會更多,反之亦然。這種開和關的比例決定了電力的輸出。

這種方法的優點在於它非常高效,因為它只在開關轉換時消耗能量,而不是在調節電力輸出時。PWM廣泛應用於各種設備中,從簡單的亮度調節(如LED燈)到更複雜的應用,如電動機速度控制和各種形式的信號處理。

舉個例子吧!

常見的「呼吸燈」就是利用 PWM 作為連續亮度的調控,讓我們逐步了解如何透過PWM做呼吸燈:

[Step 1]

這是LED燈亮一秒、暗一秒時的時序圖:

[Step 2]

如果我們把 delay(1000) 改成 delay(10),LED 就會變成亮 10ms,熄滅 10ms。這時的時序圖看起來會是這個樣子:

時序圖看起來是一樣的,只是時間尺度小了 100 倍。如果這樣執行程式,雖然 LED 亮 10ms 滅 10ms,一秒會閃爍 50 次 (1000 / 20 = 50),但因爲人眼視覺暫留效應的關係,每秒 50 次已經看起來不會閃了,而像是恆亮一樣。

[Step 3]

如果我們把第一個 delay 改成 5ms,第二個 delay 改成 15ms,LED 就會變成亮 5ms,熄滅 15ms。這時的時序圖看起來會是這個樣子:

這時 LED 一樣是一秒閃爍 50 次 (因爲週期仍然是 20ms,一秒內亮起來 50 次),但不同的是亮起來的時間只有 5ms,佔整體週期 20ms 的四分之一,或是 25%。如果是剛剛的亮 10ms、熄滅 10ms 的話,亮起來的時間是 10ms,佔整體週期 20ms 的一半,也就是 50%。眼睛看到的 LED 仍然是恆亮,不會閃。但是!亮度會只有剛剛的一半。

所以,要怎麼寫PWM:

我們可以利用 LED 在一個週期性的波形中亮起來的時間比例,來控制眼睛看到的亮度。

  1. 決定週期長度
  2. 決定 High 在整個週期的比例

人眼的視覺暫留極限大概是 25Hz,或是 40ms (因此電影是每秒 24 張),因此只要閃爍的週期時間比 40ms 短,人眼就看不出來燈在閃,只會覺得恆亮。亮度即是在一個週期中 LED 亮起來的時間的平均(亮度對時間的積分)。

點亮的時間佔整體週期的比例,也就是圖中的 high time / period,或是 high time / (high time + low time),叫做 duty cycle,通常用百分比表示。

Duty cycle = High time / (High time + Low time)

100% 就是燈一直都亮,不熄滅,亮度最亮。50% 就是只有一半的時間亮,亮度會是全亮時的一半。20% 的話只有五分之一的時間燈是亮的,眼睛看到的亮度就是全亮時的五分之一。因此,藉由調整 duty cycle,我們就可以控制眼睛看到的亮度。

為什麼非要 PWM 不可 ?

切換 GPIO 的方式產生不同 duty cycle 的波形,這個方式叫做 PWM (Pulse Width Modulation)。

這個技術對真實世界的控制是非常重要的。因爲在大部分的數位系統中,都只處理 0 和 1 的訊號,而無法產生介於 0 和 1 之間的電壓。因此我們在控制大部分的物理量時,比方說要控制燈光的亮度,其實就是用 PWM 的方式,很快速的去切換High Low,並且控制 High 所佔的比例,達到調節輸出功率的目的。

Gogoro 的馬達控制器其實也只能輸出 High(全開) 或是 Low(全關),那麼我們油門輕輕轉一點點的時候,要怎麼讓 Gogoro 的馬達在輕輕轉動時,只輸出一點點的功率呢?

一樣是用 PWM。

只要產生一個 high time 佔 1% 的 PWM 波形給馬達,就可以讓馬達只輸出 1% 的功率。

週期也是關鍵

除了 duty cycle 之外,PWM 控制另一個很重要的參數是 Period,也就是每一次週期波形的時間,它的倒數就是頻率。在控制 LED 亮度時,PWM 頻率低於人眼的視覺暫留頻率,就會讓我們看起來覺得在閃。而控制馬達時,如果 PWM 頻率太低的話,馬達轉起來就會一頓一頓的。因此 PWM 頻率有一個很重要的關鍵,就是要 :

超過被控制系統的反應速度

只要眼睛或是馬達對 PWM 的頻率來不及反應,PWM 對他們來說就不是開關開關的波形,而會被抹平成一個在時間上積分 (或平均) 的結果。

--

--