Arduino UNO沒有真正的analog output。
但有時,要與真實世界互動,digital的輸出只有開與關,並不夠用,例如要控制LED的光亮度,要控制直流馬達的運行速度等,就需要analog輸出。Arduino雖然沒有直正的analog輸出,但在大部分情況下,用PWM模擬analog輸出已經足夠。
PWM(Pulse Width Modulation),顧名思意,就是用pulse(即是方波)的寬度,去控制平均輸出的電壓值。
例如上圖中,25% Duty Cycle就是在一個週期內,25%時間是HIGH
,75%時間是LOW
,只要週期夠小,變化速度夠快,用來亮LED,人的肉眼根本看不到閃爍,只會見到LED暗了。
所以說,25% Duty Cycle,平均輸出的電壓是:
50% Duty Cycle,平均電壓就是:
Arduino UNO只有pin 3, 5, 6, 9, 10, 11可以用內置的analogWrite()
函數輸出PWM訊號。輸出的解柝度是8-bits,即0 ~ 255。下面再詳談。
上傳後,LED會由暗慢慢變光。
x1void setup(){
2 pinMode(9, OUTPUT);
3}
4
5void loop(){
6 for(byte i=0; i<=255; i++){
7 analogWrite(9, i);
8 delay(20);
9 }
10}
一段很簡單的程式。上一節已經提過,analogWrite(pin, value);
是用來輸出PWM訊號的,第一個參數用來返定輸出腳位。第二個參數設定輸出的"力度"。
例如,analogWrite(9, 30);
就是在9
腳輸出
PWM全寫是?
計算:平均輸出要3.75V,analogWrite(9, x)
中的x
應該是多少?
計算:analogWrite(9, 200);
中,9
腳的平均輸出電壓是多少?
列出Arduino UNO內置可用analogWrite的PWM腳位。
Arduino UNO內置的PWM解柝度是多少?