Arduino: Analog Output (PWM) 用PWM控制LED的光暗


Analog Output

目標

使用Arduino的PWM功能以達至不同光度輸出的效果。

原理

PWM (Pulse WidthModulation 脈衝寬度調變) 是一種透過改變訊號的Duty Cycle(工作週期) 以達至改變能量輸出的其中一種方法。看文字可能有點難以理解,請看下列兩張圖片。

這兩張圖片是用示波器測量TL494的PWM訊號,
所以Ch1 High的電壓讀數資料是不適用於Arduino 上的,務必注意這一點。

(TL494 是TI - Texas Instrument在1980年代研發出來的PWM Controller,
直到三十年後的今天還有不少Switching Power Supply 有用上TL494,
詳細內容請見: http://www.ti.com/lit/ds/symlink/tl494.pdf)


圖片中的是V-t(電壓-時間)的關係圖,數據線和X軸的面積(Duty Cycle) 是能量,
由此可見,圖一的Duty Cycle比圖二為多,圖一設定的輸出能量亦因而較多。

參考網站: http://en.wikipedia.org/wiki/Pulse-width_modulation

(抱歉在上文出現了中英混雜的情況,很多名詞學習的時候是用英文的,
"脈衝寬度調變"這個名詞我今天才第一次聽到的。)



材料

1. Arduino 主板,這次測試是用Arduino Duemilanove USB的板子作示範。

2. 普通的單色LED,用作顯示燈之用,
為了更明顯的看到不同輸出的分別,
這次不用接上220Ω的電阻。

Arduino 的DO輸出電流很少 (<40mA),
所以不用擔心會燒壞MCU。

Arduino 的PWM特性

Arduino並不是每個DIO均能輸出PWM的訊號,
若果你板子上的MCU是 ATmega8,PIN9, 10, 11才能輸出PWM訊號;
若果你板子上的MCU是 ATmega168 / ATmega328,PIN3, 5, 6, 9, 10, 11才能輸出PWM訊號;
若果你的板子是Arduino Mega,PIN2至13均能輸出PWM訊號;


Arduino的PWM是8-bit的stepping,即是控制數值為0(最少)至255(最多),
訊號的頻率為490Hz,電壓為DC5V。

接線

把LED 的正極接上能輸出PWM訊號的DIO,
示範中使用的是PIN11,
LED的負極則接到GND,
接線完成了應該是這個模樣的。

程式碼



用analogWrite決定輸出PWM訊號的腳位和其控制數值。

analogWrite (輸出腳位, 控制數值);

輸入好了以後就可以下載到Arduino上進行測試,
再透過改變控制數值調節LED的光度。

analogWrite (11, 31); //12.5%


analogWrite (11, 63); //25.0%


analogWrite (11, 95); //37.5%


analogWrite (11, 127); //50.0%


analogWrite (11, 159); //62.5%


analogWrite (11, 191); //75.0%


analogWrite (11, 223); //87.5%


analogWrite (11, 255); //100%


留言

這個網誌中的熱門文章

艦これ 1/700 輕巡洋艦 大淀

201509 台灣東北部鐵道之旅: Day 2 金車噶瑪蘭酒廠

FIREへ資産形成記録:2024年1月