IT技(ji)ji)躉? jiao)流平(ping)台

山西福彩网官网

作者(zhe)︰代碼(ma)鋼(gang)琴家  來源︰IT165收集(ji)  發布日期︰2020-02-20 03:39:21

PWM(Pulse Width Modulation)簡(jian)介

PWM,也(ye)就是脈沖(chong)寬度調制,用(yong)于將(jiang)一段信(xin)號編碼(ma)為脈沖(chong)信(xin)號,也(ye)就是方(fang)波信(xin)號。多(duo)用(yong)于在(zai)數字電(dian)路中驅動負載隨時間變化的電(dian)子元件,如LED,電(dian)機等。

在(zai)單片機中,我們(men)常用(yong)PWM來驅動LED的暗亮程度,電(dian)機的轉速(su)等。

我們(men)知道,在(zai)數字電(dian)路中,電(dian)壓信(xin)號是離散的︰ 不是 0(0V)  就是 1(5V或者(zhe)3.3V), 那麼如何輸出介于 0v 和  5V之間的某個電(dian)壓值呢?

我們(men)先來舉個實際(ji)的例子,一看(kan)就懂(dong),勝(sheng)過(guo)千言萬(wan)語(yu)。

如下(xia)圖,要(yao)讓讓數字信(xin)號模擬出 3.7V 的電(dian)壓輸出。可(ke)以先假想︰3.7V的電(dian)壓輸出是由多(duo)個周期時間為T ,電(dian)壓值 都 為3.7V的信(xin)號 持(chi)續輸出形成的。

根據PWM原(yuan)理,我畫出下(xia)面等效脈沖(chong)信(xin)號波形圖(紅色) 。PWM的理念是︰連續的信(xin)號可(ke)以使(shi)用(yong)獨立(li)的方(fang)波信(xin)號模擬出來,手段就是調整(zheng)輸出的脈沖(chong)寬度,以達(da)到同樣的效果。你會懷疑︰這真(zhen)的可(ke)以達(da)到同樣的效果嗎?

別急,讓我們(men)繼續往後看(kan)。

 如果一個周期T內的均值電(dian)壓等于3.7V,那麼,整(zheng)體的輸出就是3.7V,因為整(zheng)體只不過(guo)是n個周期不斷的重復(fu)而已。那麼我們(men)的主要(yao)問題就是如何讓一個調制周期T時間內的均值電(dian)壓等于3.7V。下(xia)面就開始ji)撲恪/p>

設(she)︰脈沖(chong)信(xin)號的值隨時間變化的函數為︰

因為這里是數字電(dian)路的背景(jing)下(xia)的,所以v的值只能取 0v 或者(zhe)   5v。

設(she)︰在(zai)一個周期T時間中,高(gao)電(dian)平(ping)持(chi)續時間佔T的百(bai)分比為 D,則低電(dian)平(ping)持(chi)續時間在(zai)周期T中佔的百(bai)分比為 1-D。

我們(men)對 一個調制周期T內的電(dian)壓值對時間積(ji)分,然後除以周期T,就得到了(liao)這個周期的輸出電(dian)壓均值。

由于這個積(ji)分圖形是方(fang)波,所以很好計算(就是面積(ji) 除以T)。

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" />

可(ke)以看(kan)出,1個調制周期內,輸出的電(dian)壓均值只和D有關。也(ye)就是高(gao)電(dian)平(ping)信(xin)號佔持(chi)續時間佔這個周期的百(bai)分比決定這個周期內的輸出電(dian)壓。

上(shang)面說了(liao),要(yao)讓這個均值等于3.7v,則求(qiu)出D為︰0.74   

那也(ye)就是說︰如果在(zai)一個調制周期中,高(gao)電(dian)平(ping)持(chi)續時間佔周期的百(bai)分比為74%,則整(zheng)體輸出的信(xin)號就是3.7V。這個百(bai)分比就是下(xia)面要(yao)說的佔空比

佔空比(duty cycle)

有了(liao)前(qian)面的知識,相(xiang)信(xin)你已經對佔空比理解了(liao),其(qi)實很好理解 ,佔空比就是 在(zai)一段調制周期時間內,某個信(xin)號持(chi)續的時間佔這個時間段的百(bai)分比。

下(xia)面給出佔空比的公式

  D︰ 佔空比 PW︰ 脈沖(chong)寬度(調制周期中脈沖(chong)持(chi)續時間) T︰  一個調制周期

下(xia)面是一個佔空比不斷變化的圖ji)/p>

所以我們(men)可(ke)以很自(zi)然的得出結論︰

低佔空比意味著輸出的能量(liang)低,因為在(zai)一個周期內大部分時間信(xin)號處于關閉狀態,如果pwm控制的負載為led,則具體表現例如led燈很暗.

高(gao)佔空比意味著輸出的能量(liang)高(gao),在(zai)一個周期內,大部分時間信(xin)號處于on狀態,具體表現為LED比較亮。

當佔空比為100%時,表示 fully on,也(ye)就是在(zai)一個周期內,信(xin)號都處于on狀態,具體表現為led亮度到達(da)100%

為0%時則表示 fully off,在(zai)一個周期內,一直處于off狀態.具體表現為led熄滅。

現在(zai)一切都明了(liao)了(liao)︰脈寬調制,脈寬調制,脈寬調制,這個寬,不是物(wu)體的寬度,而是信(xin)號的持(chi)續時間大小,它(ta)可(ke)以用(yong)佔空比去衡(heng)量(liang),佔空比越大,脈沖(chong)越寬,反之亦(yi)然。

下(xia)面擴展一下(xia),加深理解︰用(yong)PWM模擬出如下(xia)的正玄波

道理是一樣的,只不過(guo),佔空比要(yao)變化,這里就是逐漸增(zeng)加。

PWM的頻率 (PWM frequency)

pwm的頻率決定了(liao)輸出信(xin)號   on 和 off 的切換速(su)度。比如你想讓一盞電(dian)燈的nao)zai)1s內的亮度降低為原(yuan)來的一半,你可(ke)以前(qian)0.5s 打(da)開開關,後0.5s關閉開關。也(ye)就是僅(jin)僅(jin)用(yong)了(liao)1個調制周期,那麼這個頻率就是1Hz,顯然這個效果是不明顯的,我門的電(dian)腦(nao)屏幕的刷新60Hz,才(cai)能足夠順滑。人眼(yan)的極限一般是50Hz。要(yao)達(da)到50Hz在(zai),意味著你要(yao)在(zai)1s時間內切換開關50次,單身一輩子的手速(su)也(ye)不可(ke)能達(da)到這麼快~。還是讓單片機去做吧。

一般pwm頻率都ji)且蠐布she)計而固定的,是由pwm發生器決定的。

PWM頻率越高(gao),調制出來的輸出曲線就更加的的smooth,效果越好。這個和手機的ppi越高(gao),顯示越清晰是一個道理。當然我想PWM的頻率越高(gao),對硬件的要(yao)求(qiu)就也(ye)越高(gao)。

下(xia)圖中,右邊的頻率是左(zuo)邊的2倍,調制出的曲線更加圓滑,貼近原(yuan)始波形。

使(shi)用(yong)Arduino來實戰!

我一直覺得,用(yong)實踐去驗證教科pou)檣shang)的所謂真(zhen)理是一件令(ling)人激動人心的事(shi),可(ke)shang)?氖侵鋇醬笱 也(ye)龐姓庋幕幔/p>

首先要(yao)確fan) 愕rduino 的哪些(xie)引腳支持(chi)PWM輸出,一般標記(ji)了(liao)1個  ~  就是支持(chi)PWM的。

On most Arduino boards (those with the ATmega168 or ATmega328), this function works on pins 3, 5, 6, 9, 10, and 11. On the Arduino Mega, it works on pins 2 - 13 and 44 - 46. Older Arduino boards with an ATmega8 only support analogWrite() on pins 9, 10, and 11.

The frequency of the PWM signal on most pins is approximately 490 Hz. On the Uno and similar boards, pins 5 and 6 have a frequency of approximately 980 Hz. Pins 3 and 11 on the Leonardo also run at 980 Hz.

                                                                                                     --  arduino.cc

Arduino 芯片為ATmega168 或者(zhe)ATmega328的3, 5, 6, 9, 10, 和 11支持(chi)PWM, Arduino Mega的 2~13 , 44~46支持(chi)PWM,老xi)遄Tmega8的9, 10,11腳支持(chi)PWM

一般的Arduino PWM的頻率大約為490Hz,Uno 以及相(xiang)同類型的板(ban)子的5,6腳可(ke)達(da)980Hz,Leonardo的 3,11腳也(ye)可(ke)以達(da)到980Hz

PWM的頻率是不能由我們(men)控制了(liao),所以我們(men)把注意力放在(zai)佔空比上(shang)。

Arduino  PWM輸出函數,注意這個函數和模擬引腳沒半毛錢的關系。使(shi)用(yong)這個函數的引腳無需(xu) 使(shi)用(yong) pinMode 配(pei)置為 OUTPUT

analogWrite(pin,value)   

value 的值在(zai) 0~255之間,value的值除以256就是PWM輸出的佔空比,如 analogWrite(pin,128) 輸出的佔空比為50%。

試驗連線線圖

 

const int ledPin = 3; //pwm輸出引腳const int button = 6; //按鍵引腳byte pwmVal = 0;bool isKeyPressed(byte pin);void setup() { pinMode(button,INPUT_PULLUP); Serial.begin(9600);}void loop() { if(isKeyPressed(button)) //如果檢測到按鍵按下(xia),就讓pwmVal 增(zeng)加2 { pwmVal+=2; //pwmVal 的類型為byte,到了(liao)256會自(zi)動溢出回0,所以為沒做檢查,不過(guo)不要(yao)過(guo)度依賴這個技(ji)ji)砂。 娣fan)些(xie)好 } analogWrite(ledPin,pwmVal); Serial.println(map(pwmVal,0,255,0,5)); //使(shi)用(yong)map函數映射為 0~5v的電(dian)壓信(xin)號 delay(30); }bool isKeyPressed(byte pin){ bool pre = false; if(digitalRead(pin)==LOW) { delay(10); if(digitalRead(pin)==LOW) {  pre = true;  for(int a = 5;digitalRead(pin)==LOW&&a;--a)  {   delay(5);  } } } return pre;}

在(zai)IDE的串口繪圖器中查看(kan)輸出的波形。因為是手動按鍵來調整(zheng)佔空比的,所以波形不好看(kan)。用(yong)電(dian)位器調更加好。

我們(men)去掉map函數,直接輸出pwmVal的值,可(ke)以看(kan)到更加細膩。

夜晚的效果。

 

  出處︰www.cnblogs.com/lulipro

 為了(liao)獲得更好的nao)畝撂逖椋 敕夢試yuan)博客地址。

限于本人水平(ping),如果文章(zhang)和代碼(ma)有表述不當之處,還請不吝賜(ci)教。

 

山西福彩网官网

    • 山西福彩网官网

    About IT165 - 廣告(gao)服(fu)務 - 河北快三官网隱私(si)聲(sheng)明 - 版權申明 - 万人红黑大战官网免責(ze)條(tiao)款 - 網站地圖 - 網友(you)投稿 - 聯系方(fang)式
    本站內容來自(zi)于互聯網,僅(jin)供(gong)用(yong)于網絡技(ji)ji)躚 xi),學習(xi)中請遵(zun)循相(xiang)關法律法規
    山西福彩网官网 | 下一页