Altera MAX10: LED呼吸燈

 行業(yè)動態(tài)     |      2023-11-17 09:49:42    |      作者

呼吸燈的設(shè)計(jì)較為簡單,我們使用12MHz的系統(tǒng)時(shí)鐘作為高頻信號做分頻處理,調(diào)整占空比實(shí)現(xiàn)PWM,通過LED燈LD1指示輸出狀態(tài)。

LED電路連接

脈沖信號有效值

實(shí)現(xiàn)原理如上圖所示,脈沖信號的周期為T,高電平脈沖寬度為t,占空比為t/T。為了實(shí)現(xiàn)PWM脈寬調(diào)制,我們需要保持周期T不變,調(diào)整高電平脈寬t的時(shí)間,從而改變占空比。

  • 當(dāng)t = 0時(shí),占空比為0%,因?yàn)槲覀兊腖ED硬件為低電平點(diǎn)亮,所以為最亮的狀態(tài)。

  • 當(dāng)t = T時(shí),占空比為100%,LED燈為最暗(熄滅)的狀態(tài)。

結(jié)合呼吸燈的原理,整個(gè)呼吸的周期為最亮→最暗→最亮的時(shí)間,即t的值的變化:0→T→0逐漸變化,這個(gè)時(shí)間應(yīng)該為2s

呼吸燈程序設(shè)計(jì)

呼吸燈設(shè)計(jì)要求呼吸的周期為2s,也就是說LED燈從最亮的狀態(tài)開始,第一秒時(shí)間內(nèi)逐漸變暗,第二秒的時(shí)間內(nèi)再逐漸變亮,依次進(jìn)行。

本設(shè)計(jì)中需要兩個(gè)計(jì)數(shù)器cnt1和cnt2,cnt1隨系統(tǒng)時(shí)鐘同步計(jì)數(shù)(系統(tǒng)時(shí)鐘上升沿時(shí)cnt1自加1)范圍為0~T,cnt2隨cnt1的周期同步計(jì)數(shù)(cnt1等于T時(shí),cnt2自加1)范圍也是0~T,這樣每次cnt1在0~T的計(jì)數(shù)時(shí),cnt2為一個(gè)固定值,相鄰cnt1計(jì)數(shù)周期對應(yīng)的cnt2的值逐漸增大,我們將cnt1計(jì)數(shù)0~T的時(shí)間作為脈沖周期,cnt2的值作為脈沖寬度,則占空比 = cnt2/T,占空比從0%到100%的時(shí)間 = cnt2*cnt1 = T^2 = 1s = 12M個(gè)系統(tǒng)時(shí)鐘,T = 2400,我們定義CNT_NUM = 2400作為兩個(gè)計(jì)數(shù)器的計(jì)數(shù)最大值。

PWM呼吸燈原理

//********************************************************************//>>>>>>>>>>>>>>>>>>>>>>>>>COPYRIGHTNOTICE<<<<<<<<<<<<<<<<<<<<<<<<=CNT_NUM-1)cnt1<=1'b0; elsecnt1<=cnt1+1'b1;end end //產(chǎn)生計(jì)數(shù)器cnt2 always@(posedgeclkornegedgerst) begin if(!rst)begin cnt2<=13'd0; flag<=1'b0; endelsebegin if(cnt1==CNT_NUM-1)begin//當(dāng)計(jì)數(shù)器1計(jì)滿時(shí)計(jì)數(shù)器2開始計(jì)數(shù)加一或減一 if(!flag)begin//當(dāng)標(biāo)志位為0時(shí)計(jì)數(shù)器2遞增計(jì)數(shù),表示呼吸燈效果由暗變亮 if(cnt2>=CNT_NUM-1)//計(jì)數(shù)器2計(jì)滿時(shí),表示亮度已最大,標(biāo)志位變高,之后計(jì)數(shù)器2開始遞減flag<=1'b1; elsecnt2<=cnt2+1'b1; endelsebegin//當(dāng)標(biāo)志位為高時(shí)計(jì)數(shù)器2遞減計(jì)數(shù) if(cnt2<=0)//計(jì)數(shù)器2級到0,表示亮度已最小,標(biāo)志位變低,之后計(jì)數(shù)器2開始遞增flag<=1'b0; elsecnt2<=cnt2-1'b1; end endelsecnt2<=cnt2;//計(jì)數(shù)器1在計(jì)數(shù)過程中計(jì)數(shù)器2保持不變 end end //比較計(jì)數(shù)器1和計(jì)數(shù)器2的值產(chǎn)生自動調(diào)整占空比輸出的信號,輸出到led產(chǎn)生呼吸燈效果 assign led=(cnt1

引腳分配如下:

管腳名稱clkrstled
FPGA管腳J5J9N15

脈寬調(diào)制是一種值得廣大工程師在許多應(yīng)用設(shè)計(jì)中使用的有效技術(shù),你也可以根據(jù)本節(jié)介紹的流水燈程序,實(shí)現(xiàn)RGB三色燈的呼吸。在下一小節(jié)我們會學(xué)習(xí)狀態(tài)機(jī)的使用方法:交通燈的設(shè)計(jì)。