引言:呼吸燈在日常生活中經常見到,如電子時鐘,小夜燈等等,本文我們介紹下通過PWM波來控制LED燈,實現呼吸燈功能。
1.呼吸燈概念
呼吸燈其實是在處理器的控制下,由暗漸亮、然后再由亮漸暗,其實現效果類似人的呼吸方式的LED燈。其要實現呼吸周期重復,明暗漸變功能。
2.實現原理
由于FPGA管腳輸出邏輯電平只有“0”和“1”,因此并不能通過FPGA來改變LED兩側電壓差來實現呼吸燈。但是,我們可以通過改變單位時間內亮燈時間的占空比來實現呼吸效果,即在固定頻率下,通過調整占空比來控制LED的亮滅,又稱作PWM(Pulse Width Modulation)調制。PWM是對模擬電路控制的一種非常有效的技術,廣泛應用于測量、功率控制、通信等領域。
圖1:占空比調整示意圖
3.硬件介紹
LED燈電路如下圖所示,圖中電阻起限流作用,保證LED不會超過其工作最大電流,當FPGA IO口輸出低電平時,LED燈點亮,反之,LED燈熄滅。
圖2:LED燈電路圖
4.FPGA軟件設計
本設計呼吸燈的亮滅周期是2S,PWM每間隔2ms更新一次,共計更新100次即2S后切換PWM的占空比調整方向。因此PWM占空比的調整是和2ms定時計數器和2S定時計數器相關。系統框圖如下:
圖3:呼吸燈PWM產生框圖
上圖中包含了3個定時計數器:
(1)20us定時器,作為本系統的基本定時器,產生時間基準;
(2)20ms定時器,通過20us定時器,計數100次完成20ms定時計數;
(3)2s定時器,通過20ms定時器,計數100次完成2S定時計數。
20us定時器代碼:
//20us 定時器 always @(posedge i_sysclk_p or negedge i_rstn)begin if(i_rstn == 1'b0) cnt_20us_timer <= 0; else if(cnt_20us_timer < T20US_SET) ????????cnt_20us_timer <=?cnt_20us_timer +?1'b1; else ????????cnt_20us_timer <=?24'd0;?????????? end
20ms比較定時器代碼:
//20ms pwm比較定時器,基于 1us timer always @(posedge i_sysclk_p or negedge i_rstn)begin if(i_rstn == 1'b0) cnt_20ms_timer<=?0;???? ????else?if(20us_timer_done)???????????????????????????? cnt_20ms_timer <= (cnt_20ms_timer < T20MS_SET) ? (cnt_20ms_timer + 1'b1) : 10'd0; else cnt_20ms_timer <= cnt_20ms_timer ; end
5.軟件在線仿真與實測
硬件平臺:EP2C8Q208C8N
Quartusii軟件:11.0
工程編譯完成后,下載bit文件到電路板,PWM波測試結果如下圖所示。
圖4:SignalTapII在線抓取波形
-
FPGA
+關注
關注
1630文章
21796瀏覽量
606012 -
led燈
+關注
關注
22文章
1592瀏覽量
108413 -
PWM
+關注
關注
114文章
5198瀏覽量
214880 -
呼吸燈
+關注
關注
10文章
111瀏覽量
42810
原文標題:FPGA入門基礎之呼吸燈設計
文章出處:【微信號:FPGA技術實戰,微信公眾號:FPGA技術實戰】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論