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