【上板現(xiàn)象】
PWM流水燈在MP801的上板現(xiàn)象(點擊跳轉(zhuǎn)明德?lián)P論壇觀看)
PWM流水燈在點撥開發(fā)板的上板現(xiàn)象(點擊跳轉(zhuǎn)明德?lián)P論壇觀看)
PWM流水燈在實驗箱的上板現(xiàn)象(點擊跳轉(zhuǎn)明德?lián)P論壇觀看)
【設(shè)計教程】
1.1總體設(shè)計
1.1.1概述
脈沖寬度調(diào)制技術(shù)(Pulse WidthModelation,PWM)是利用微處理器/FPGA的數(shù)字輸出對模擬電路進行控制的一種有效技術(shù),其廣泛應(yīng)用于測量、通信、功率控制與變換等眾多領(lǐng)域。PWM數(shù)字信號從處理器到被控系統(tǒng)都采用數(shù)字形式,無需進行數(shù)模轉(zhuǎn)換。航模中的控制信號大多是PWM信號,比如FUTABA、JR等舵機的控制都采用PWM方式,發(fā)射機給接收機輸送脈沖后接收機就會控制舵機進行旋轉(zhuǎn)。舉個例子,假定基礎(chǔ)脈寬是100ms,當(dāng)發(fā)射機的脈寬增大(如增加到150ms)時接收機就控制舵機正向旋轉(zhuǎn);反之發(fā)射機的脈寬減?。ㄈ鐪p小到50ms)時,接收機就控制舵機逆向旋轉(zhuǎn)。
PWM是一種對模擬信號電平進行數(shù)字編碼的方法。通過使用高分辨率計數(shù)器,對方波的占空比進行調(diào)制,從而對一個具體模擬信號的電平進行編碼。由于在給定的任何時刻,滿幅值的直流供電只存在有(ON)和無(OFF)兩種狀態(tài),因此PWM信號仍然是數(shù)字信號。電壓或電流源是以一種通(ON)或斷(OFF)的重復(fù)脈沖序列被加到模擬負(fù)載上去的。直流供電被加到負(fù)載上的時候為“通”,負(fù)載供電被斷開的時候為“斷”。只要有足夠的帶寬,任何模擬值都可以使用PWM進行編碼。
通俗來說,PWM是連續(xù)的、具有一定比例占空比的脈沖信號,可以通過控制占空比來對其進行改變。簡單來說,可以認(rèn)為PWM就是一種方波,如圖所示是一個周期為10ms,高電平為6ms,低電平時間為4ms的PWM,其占空比(高電平時間占整個周期的比例)為60%
發(fā)光二極管簡稱為LED,是一種常用的發(fā)光器件,通過電子與空穴復(fù)合釋放能量發(fā)光,它在照明領(lǐng)域應(yīng)用廣泛。發(fā)光二極管可高效的將電能轉(zhuǎn)化為光能,在現(xiàn)代社會具有廣泛的用途,如照明、平板顯示、醫(yī)療器件等??赏ㄟ^高低電平的變化來控制LED燈的明滅狀態(tài),當(dāng)輸出信號為低電平時,LED燈亮,反之,當(dāng)輸出信號為高電平時,LED燈滅。因此可通過改變PWM波形的占空比,來控制LED燈亮滅的時間,當(dāng)有多個LED燈的時候,通過不同的PWM波形來控制不同的LED燈,就可以產(chǎn)生各種各樣不同的效果。
1.1.2設(shè)計目標(biāo)
本模塊產(chǎn)生8個不同的PWM脈沖,控制8個LED燈點亮不同的時間,從而達(dá)到流水燈的效果。每個脈沖周期為10s,占空比從10%~80%。上電后,led0點亮1s,熄滅9s;再點亮1s,熄滅9s,……,依次不斷循環(huán)。led1~led7與led0類似,分別點亮2s~8s,其他時候都是熄滅的。
1.1.3信號列表
1.1.4設(shè)計思路
根據(jù)題目功能要求可知,產(chǎn)生的8個不同的PWM脈沖的周期都是10秒(s),由此我們可以提出兩個計數(shù)器的架構(gòu),如下圖所示。
該架構(gòu)由兩個計數(shù)器組成:時鐘計數(shù)器cnt_1s和周期計數(shù)器cnt_10s。
時鐘計數(shù)器cnt_1s:用于計算1秒的時鐘個數(shù),加一條件為1,表示一直計數(shù);結(jié)束條件為50000000,表示數(shù)到1秒就清零。
周期計數(shù)器cnt_10s:用于對1秒進行計數(shù),加一條件為end_cnt_1s,表示數(shù)到1秒就加1;結(jié)束條件為10,表示數(shù)完10秒就清零。
至此,我們就將這個練習(xí)的計數(shù)器架構(gòu)設(shè)計出來了。
下面是計數(shù)器的代碼。
下面我們開始設(shè)計輸出信號led,在設(shè)計這些信號的時候,我們只需要關(guān)注他的變化點,也就是0變1、1變0的點。
以led0的變化為例,上電后,led[0]點亮1s,熄滅9s,再點亮1s,熄滅9s。也就是數(shù)到1秒時,即add_cnt_10s && cnt_10s==1-1時,led0由0變1。當(dāng)數(shù)到10秒時,即end_cnt_10s時,led[0]由1變0。
Led[1]~led[7]也是同樣,即:
上電后,led[1]點亮2s,熄滅8s,再點亮2s,熄滅8s。也就是數(shù)到2秒時,即add_cnt_10s &&cnt_10s==2-1時,led[1]由0變1。當(dāng)數(shù)到10秒時,即end_cnt_10s時,led[1]由1變0。
上電后,led[2]點亮3s,熄滅7s,再點亮3s,熄滅7s。也就是數(shù)到3秒時,即add_cnt_10s &&cnt_10s==3-1時,led[2]由0變1。當(dāng)數(shù)到10秒時,即end_cnt_10s時,led[2]由1變0。
上電后,led[3]點亮4s,熄滅6s,再點亮4s,熄滅6s。也就是數(shù)到4秒時,即add_cnt_10s &&cnt_10s==4-1時,led[3]由0變1。當(dāng)數(shù)到10秒時,即end_cnt_10s時,led[3]由1變0。
上電后,led[4]點亮5s,熄滅5s,再點亮5s,熄滅5s。也就是數(shù)到5秒時,即add_cnt_10s &&cnt_10s==5-1時,led[4]由0變1。當(dāng)數(shù)到10秒時,即end_cnt_10s時,led[4]由1變0。
上電后,led[5]點亮6s,熄滅4s,再點亮6s,熄滅4s。也就是數(shù)到6秒時,即add_cnt_10s &&cnt_10s==6-1時,led[5]由0變1。當(dāng)數(shù)到10秒時,即end_cnt_10s時,led[5]由1變0。
上電后,led[6]點亮7s,熄滅3s,再點亮7s,熄滅3s。也就是數(shù)到7秒時,即add_cnt_10s &&cnt_10s==7-1時,led[6]由0變1。當(dāng)數(shù)到10秒時,即end_cnt_10s時,led[6]由1變0。
上電后,led[7]點亮8s,熄滅2s,再點亮8s,熄滅2s。也就是數(shù)到8秒時,即add_cnt_10s &&cnt_10s==8-1時,led[7]由0變1。當(dāng)數(shù)到10秒時,即end_cnt_10s時,led[7]由1變0。
由此便可以將所有的led信號設(shè)計出來。
下面是led的代碼。
1.1.5參考設(shè)計代碼
1.2效果和總結(jié)
時間經(jīng)過1秒之后
時間經(jīng)過4秒的時候
時間經(jīng)過8秒的時候
看上面的現(xiàn)象,可以發(fā)現(xiàn),跟設(shè)計目標(biāo)要求的都是一樣的,成功完成設(shè)計目標(biāo)。
我們的至簡設(shè)計法和計數(shù)器模板在以上的設(shè)計中發(fā)揮了至關(guān)重要的作用,使設(shè)計能夠快速準(zhǔn)確完成。本設(shè)計中的led信號的代碼為了方便理解,把8個led燈分開寫了,希望有興趣的同學(xué)可以將led的代碼進行簡化,合成一個always,想不到也沒關(guān)系,在講解視頻中也有講述如何實現(xiàn)。
感興趣的朋友也可以訪問明德?lián)P論壇進行FPGA相關(guān)工程設(shè)計學(xué)習(xí),也歡迎大家在評論與我進行討論!
好消息!FPGA至簡設(shè)計200例已更新,
審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1645文章
22050瀏覽量
618521 -
接收機
+關(guān)注
關(guān)注
9文章
1224瀏覽量
54580 -
PWM
+關(guān)注
關(guān)注
116文章
5521瀏覽量
219413 -
流水燈
+關(guān)注
關(guān)注
21文章
433瀏覽量
60517
發(fā)布評論請先 登錄
用至簡設(shè)計法進行PWM流水燈設(shè)計
用至簡設(shè)計法進行PWM流水燈設(shè)計
【每周分享FPGA案例】_PWM流水燈設(shè)計
使用PWM實現(xiàn)真正的流水燈的資料和程序免費下載

數(shù)字設(shè)計FPGA應(yīng)用:流水燈的設(shè)計

評論