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