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