在單片機(jī)上實(shí)現(xiàn)流水燈很簡(jiǎn)單,只需要幾條指令就可以完成,大部分學(xué)生都可以完成任務(wù)。于是在第二課堂中就此提出了一個(gè)新的問(wèn)題:能不能實(shí)現(xiàn)一個(gè)亮度漸變的、按規(guī)律移動(dòng)的超酷流水燈?學(xué)生都覺(jué)得并不是很容易實(shí)現(xiàn),反映的主要問(wèn)題是IO口只能寫開關(guān)量(只能寫1或者寫0),也就是說(shuō)只能控制LED燈的亮和滅,卻不能控制LED燈的亮度,IO口的兩值性不能表示出亮度變化的漸變過(guò)程??墒窃趩纹瑱C(jī)中還有一種PWM技術(shù)可用01方式虛擬表示出一個(gè)模擬量,通過(guò)這個(gè)模擬量可控制LED燈實(shí)現(xiàn)漸變的過(guò)程。本文介紹如何讓單片機(jī)通過(guò)使用PWM技術(shù)來(lái)實(shí)現(xiàn)超酷流水燈的設(shè)計(jì)方法。
一、什么叫PWM技術(shù)
PWM是脈沖寬度調(diào)制的簡(jiǎn)稱。PWM波是一個(gè)連續(xù)的方波,在一個(gè)周期中,其高電平和低電平的占空比是不同的。一個(gè)典型PWM的波形如圖1所示。
在圖1中,T是PWM波的周期,T1是高電平的寬度,Vcc是高電平值??梢缘玫狡漭敵龅钠骄妷簽椋?br/>
式中,T1/T稱為PWM波的占空比??刂普{(diào)節(jié)和改變T1的寬度,即改變PWM的占空比,就可以得到不同的平均電壓。我們?cè)趯?shí)際應(yīng)用中,??梢岳肞WM波的輸出,實(shí)現(xiàn)調(diào)節(jié)輸出電壓的功能。
二、如何在單片機(jī)上實(shí)現(xiàn)PWM
如何周期性地控制輸出脈沖?有兩種方案:第一種方案是在主程序通過(guò)延時(shí)控制再輸出;第二種方案是通過(guò)單片機(jī)的計(jì)時(shí)器中斷延時(shí)驅(qū)動(dòng)輸出。第一種方案占用CPU運(yùn)行時(shí)間;第二種方案計(jì)時(shí)器可以在后臺(tái)獨(dú)立運(yùn)行,在等待過(guò)程中計(jì)時(shí)器不占用CPU運(yùn)行時(shí)間。
單片機(jī)時(shí)鐘中斷生成PWM時(shí)系統(tǒng)有兩個(gè)狀態(tài),狀態(tài)A輸出高電平,狀態(tài)B輸出低電平,狀態(tài)A和狀態(tài)B的時(shí)間寬度總和不變,為一常數(shù)TW,狀態(tài)A的時(shí)間T1和狀態(tài)B的時(shí)間T2分別與需要輸出的平均電壓相關(guān)。
在單片機(jī)實(shí)際軟件設(shè)計(jì)上具體的做法是:在定時(shí)器中設(shè)定下次中斷的延時(shí)時(shí)間,中斷發(fā)生后,來(lái)到狀態(tài)A,IO腳輸出高電平,根據(jù)要輸出的電壓,設(shè)定下次中斷來(lái)的延時(shí)時(shí)間為T1,T1時(shí)間到,新中斷發(fā)生后,來(lái)到