脈沖寬度調(diào)制(pulse width modelation)簡稱PWM,利用微處理器的數(shù)字輸出來對微處理器的數(shù)字輸出來對模擬電路進(jìn)行控制的一種非常有效的技術(shù),廣泛應(yīng)用在從測量、通信到功率控制與變換的許多領(lǐng)域中。 在本章的應(yīng)用中可以認(rèn)為PWM就是一種方波。如圖2-7所示。 圖2-7 PWM波形圖 一個周期為10ms,高電平為6ms,低電平時間為4ms的PWM,其占空比(高電平時間占整個周期的比例)為60%。 明德?lián)P的FPGA開發(fā)板共有8個LED燈。產(chǎn)生8個管腳的PWM圖,如圖2-8所示。每個管腳對應(yīng)的占空比分別為:80%、70%、60%、50%、40%、30%、20%和10%。系統(tǒng)工作時鐘100MHz。 圖2-8 各個LED等對應(yīng)的PWM波形 FPGA通過8個管腳來分別控制8個LED燈,管腳值為0,對應(yīng)的LED燈亮,管腳值為1,對應(yīng)的LED燈滅(低亮高滅)。如果管腳不停地變化,則LED燈會閃爍;如果這種高低變化非?,由于人的視覺暫留現(xiàn)象,LED就會出現(xiàn)不同的亮度。 基于這個原則,我們也可以通過產(chǎn)生PWM波形,來控制LED燈的亮度。 1. 明確功能 首先確定模塊信號列表,如表2.2。 表2.2信號列表
產(chǎn)生8個脈沖,每個脈沖周期為10s對應(yīng)的占空比分別為:80%、70%、60%、50%、40%、30%、20%和10%。 2. 功能波形 led所有信號的變化都是相似的,這里以led[0]為例。見圖2-9。 圖2-9 led[0]信號變化圖 3. 計數(shù)結(jié)構(gòu) 因為每個脈沖的高低電平持續(xù)時間都是以1s為單位的,所以引入兩個計數(shù)器,計數(shù)器cnt_1s計數(shù)1s,計數(shù)器cnt_10s計數(shù)每個脈沖高低電平分別持續(xù)的時間。具體計數(shù)情況如圖2-10所示: 圖2-10 計數(shù)結(jié)構(gòu)圖 4. 加一結(jié)束條件 cnt_1s的加1條件:計數(shù)器一直在計數(shù),即:assign add_cnt_1s=1; cnt_1s的結(jié)束條件:加一條件下計數(shù)到100_000_000-1; cnt_10s的加1條件:cnt_1s的結(jié)束時刻; cnt_10s的結(jié)束條件:加一條件下計數(shù)到10-1; 5. 定義特殊點 圖2-11有幾個特殊點,需要我們記住。 圖2-11 特殊定義點圖 cnt1s的結(jié)束條件:cnt_1s==100_000_000-1,定為end_cnt_1s。 cnt10s的結(jié)束條件:cnt_10s==10-1,定為end_cnt_10s。 led所有位的新號變化都是相似的,所以我們以led[0]為例定義特殊點, led[0]變高的條件:cnt_10s==1-1,定為led0_off。 led[0]變低的條件:cnt_10s==10-1,定為led_on。 6. 完整性檢查
7. 計數(shù)器代碼 |