7.3 調節電壓變化
7.4 模式輸出(pwm)指令和預設頻率
7.5 pwm頻率
任務1:調光器
任務2:隨機數字與燭光效果
任務3: 通過串列埠調整燈光亮度
活動4:使用atoi()轉換字串成數字
脈衝寬度調製或pwm是用於改變脈衝串中的脈衝寬度的常用技術。pwm有許多應用,如控制伺服和速度控制器,限制電機和led的有效功率。
arduino輸出模擬訊號,也就是可變電壓輸出。
電機型號和規格,常見的電機驅動和控制電路
介紹常見的電晶體,以及電晶體電路的基本應用與設計方式
脈衝寬度調製基本上是乙個隨時間變化而變化的方波。基本的pwm訊號如下圖所示。
有很多術語與pwm相關: 週期
如圖所示,ton表示導通時間,toff表示訊號的關斷時間。週期是導通和關斷時間的總和,並按照以下公式計算:tto
tal=
ton+
toff
t_=t_+t_
ttotal
=to
n+t
off
占空比占空比用於計算為一段時間的導通時間。使用上面計算的週期,占空比計算為:
d =t
onto
n+to
ff=t
ontt
otal
d=\frac}+t_}=\frac}}
d=ton
+tof
fto
n=
ttot
alt
on
改變電路中的電壓。
省電又環保的pwm變頻技術
7.4.1 analogwrite()函式
analogwrite()函式將模擬值(pwm波)寫入引腳。它可用於以不同的亮度點亮led或以各種速度驅動電機。在呼叫analogwrite()函式之後,引腳將產生指定占空比的穩定方波,直到下一次呼叫analogwrite()或在相同引腳上呼叫digitalread()或digitalwrite()。大多數引腳上的pwm訊號頻率約為490hz。在uno和類似的板上,引腳5和6的頻率約為980hz。leonardo上的引腳3和11也以980hz執行。
在大多數arduino板上(atmega168或atmega328),此功能在引腳3,5,6,9,10和11上工作。在arduino mega上,它在引腳2-13和44-46上工作。舊的arduino atmega8板僅支援引腳9,10和11上的 analogwrite()。
arduino due支援引腳2至13以及引腳dac0和dac1上的 analogwrite()。與pwm引腳不同,dac0和dac1是數模轉換器,用作真正的模擬輸出。
在呼叫analogwrite()之前,不需要呼叫pinmode()將引腳設定為輸出。
7.4.2 analogwrite()函式語法
analogwrite ( pin , value )
;//value − the duty cycle: between 0 (always off) and 255 (always on).
value - 占空比:0(始終導通)到255(始終關斷)之間。
示例
int ledpin =9;
// led connected to digital pin 9
int analogpin =3;
// potentiometer connected to analog pin 3
int val =0;
// variable to store the read value
void
setup()
void
loop()
例如:
analogwrite(5, 168);
上面的指令將使第5引腳輸出3.3v電壓,因為 168
255×5≈
3.325
5168
×5≈
3.37.5.1 預設頻率
arduino控制板預設採用1khz 和 500hz兩組不同的pwm輸出頻率
7.5.2 改變pwm的輸出頻率
arduino的pwm輸出頻率是由atmega微處理器內部的三個系統定時器:
下面的程式語句將timer1(9、10埠輸出)的pwm頻率調整成31250hz。
void setup()
關於引數的詳細說明以及頻率對照表
實驗說明: 利用可變電阻的輸入訊號變化來調整led亮度
實驗材料:
物品數量
led1個
10kω可變電阻
1個
實驗程式byte potpin = a0;
byte ledpin =11;
int potspeed =0;
byte val =0;
void
setup()
void
loop()
實驗說明:隨機, 通過隨機調整接在數字11埠的led亮度,以及隨機持續時間來模擬燭光效果。
隨機指令:
random
byte rnd = random(200); //從0~199之間挑選乙個數字,存入rnd
byte rnd = random(20, 50); //從20~49之間挑選乙個數字,存入rnd
然而,arduino每次挑選的數字並不是那麼隨意,為了提高不重複的比率,在每次執行random()函式之前,先執行randomseed()函式,
實驗程式:
byte ledpin = 11;
void setup()
void loop()
實驗說明:接收使用者輸入的0~255數值來改變接在11引腳的led亮度。
使用者通過按鍵的輸入值是字串格式,而模擬輸出指令所需要的引數是數字格式。有兩種方法把字元或字串轉換成數字。
比如:arduino收到字串 『168\n』
處理第乙個字:pwm = pwm * 10 + (_in - '0')
處理第二個字:pwm = pwm * 10 + (_in - '0')
處理第三個字:pwm = pwm * 10 + (_in - '0')
讀取到字元』\n』,轉換完畢!
由於每次傳遞的數字長度不確定(如: 『3』 和『168』),為了讓接收端確認一串數字的結尾,在傳送資料的後面加上『\n』字元。
實驗程式:
byte ledpin =11;
void
setup()
void
loop()
_in = serial.
read()
;}if(pwm >
255) pwm =
255;
analogwrite
(ledpin, pwm);}
}
實驗說明
先宣告乙個空字串變數,每次收到的新字元,存入字串變數(data),以及變數i,每次接收到新的字元,就將它存入字串變數,最後通過atoi()轉換。
實驗程式
byte ledpin =11;
void
setup()
void
loop()
} data[i]
='\0'
; pwm =
atoi
(data);if
(pwm >
255) pwm =
255;
serial.
print
("pwm: ");
serial.
println
(pwm)
;analogwrite
(ledpin, pwm);}
}
脈衝寬度調製pdm 脈衝寬度調製,脈寬調變
補充資料 脈衝編碼調製 對模擬訊號進行抽樣並把樣值量化通過編碼轉換成數碼訊號的調製方式,簡稱脈碼調變。脈碼調變是時分多路通訊中的一種主要制式。利用脈碼調變可以用兩對導線同時傳送多路 簡史 脈碼調變原理,是英國人a.h.里夫斯於1939年提出的。1944年美國貝爾研究所開始用電子管進行試驗研究,並於1...
脈衝寬度調製pdm 脈衝雷射器概述
產生雷射脈衝最直接的方法是在連續雷射器外部加乙個調製器。這種方法可產生最快皮秒級的脈衝,雖然簡單但會浪費光能並且峰值功率無法超過連續光功率。所以,產生雷射脈衝更高效的方法是雷射腔內調製,在脈衝串的off time儲存能量並在on time釋放。兩種方法的比較如下 低峰值功率 高峰值功率 通過雷射腔內...
訊號脈寬 脈衝寬度(持續更新中)
訊號脈寬是指脈衝訊號的脈衝寬度 時間 訊號頻寬是指乙個訊號所包bai含的所有頻率成分 頻率 脈衝訊號的脈衝寬度約窄,訊號頻寬越寬。學名 脈衝寬度 英文 impulse width 又名 工作週期 duty cycle 釋義 不同的領域,脈衝寬度有不同的含義。通常的脈衝寬度是指電子領域中,脈衝所能達到...