設(shè)計(jì)背景
呼吸燈廣泛應(yīng)用于手機(jī)之上,并成為各大品牌新款手機(jī)的賣點(diǎn)之一。如果手機(jī)里面有未處理的通知,比如說未接來電,未查收的短信等等,呼吸燈就會(huì)在控制之下完成由亮到暗的逐漸變化,感覺好像是人在呼吸,起到一個(gè)通知提醒的作用。
設(shè)計(jì)原理
關(guān)于呼吸燈設(shè)計(jì)實(shí)現(xiàn)的理論主要是PWM有關(guān)知識(shí)。PWM(Pluse Width Modulation)脈沖寬度調(diào)制,是一種對(duì)模擬信號(hào)電平進(jìn)行數(shù)字編碼的方法。通過高分辨率計(jì)數(shù)器的使用,方波的占空比被調(diào)制用來對(duì)一個(gè)具體模擬信號(hào)的電平進(jìn)行編碼。并廣泛應(yīng)用在從測(cè)量、通信、功率控制與變換及LED照明等許多領(lǐng)域中。顧名思義,就是占空比可調(diào)的信號(hào),那么什么是占空比呢?
占空比(Duty Cycle or Duty Ratio),可以解釋為,在一脈沖序列中(方波),正脈沖序列的持續(xù)時(shí)間與脈沖總周期的比值。也可理解為,電路釋放能量的有效時(shí)間與總釋放時(shí)間的比值。
PWM是怎樣實(shí)現(xiàn)調(diào)光呢?想要調(diào)節(jié)LED的亮度變化,實(shí)則是調(diào)節(jié)控制流經(jīng)LED的電流。電流增大則LED亮度增強(qiáng),反之減弱。但由于電流為模擬信號(hào),所以這時(shí)就用到了PWM。正如下圖所示:
使用一系列等幅不等寬的脈沖來代替一個(gè)正弦波,脈沖的寬度根據(jù)正弦波a的幅度變化,幅度高,則脈沖寬,反之。
多數(shù)負(fù)載需要的PWM調(diào)制頻率都高于10Hz,要想實(shí)現(xiàn)呼吸燈的效果,必須提高調(diào)制頻率,通常調(diào)制頻率為1Khz~200Khz之間。在LED控制中PWM作用于電源部分,脈寬調(diào)制的脈沖頻率通常大于100Hz,人眼就不會(huì)感到閃爍。這里我們?nèi)WM調(diào)制頻率為1KHz,PWM周期為1ms。
脈沖頻率一定時(shí),輸出脈沖的占空比越大,相當(dāng)于輸出的有效電平越大,隨著占空比的不同,LED的亮度也將不同。如占空比為0時(shí),則LED不亮,為100%時(shí),則LED最亮,我們讓占空比從0~100%變化,再從100%~0不斷變化,則就可實(shí)現(xiàn)呼吸燈效果。
本設(shè)計(jì)呼吸燈的一個(gè)周期為2s,分為占空比增“吸”和占空比減“呼”兩種模式,每個(gè)為1s,一個(gè)PWM周期為2ms,所以每個(gè)模式包含1000個(gè)PWM周期,將每個(gè)PWM周期分為1000份,即每個(gè)時(shí)間段2us。
設(shè)計(jì)框架
設(shè)計(jì)框架圖: 50M時(shí)鐘
設(shè)計(jì)代碼
設(shè)計(jì)模塊huxi_led_state代碼:
module huxi_led_state(clk,led,rst_n); input clk; input rst_n; output reg led; parameter T = 100_000; localparam s0 = 1'b0; localparam s1 = 1'b1; reg [25:0] lw; reg [25:0] hw; reg [16:0] count; // 產(chǎn)生2MS的脈沖 always @(posedge clk or negedge rst_n) if(!rst_n) begin count <= 1'b0; end else begin if(count == T - 1) begin count <= 1'b0; end else begin count <= count + 1'b1; end end wire flag; assign flag =(count == T - 1) ? 1'b1:1'b0; reg state; // 通過在一個(gè)周期中加減高低電平的時(shí)間來產(chǎn)生PWM波 always @(posedge clk or negedge rst_n) if(!rst_n) begin lw <= T - 100; hw <= 100; state <= 1'b0; end else begin case (state) s0:begin if(flag && (lw > 100)) //判斷低電平的時(shí)間 begin lw <= lw - 100; hw <= hw + 100; state <= s0; end else if(flag && (lw == 100)) begin hw <= hw - 100; lw <= lw + 100; state <= s1; end else begin hw <= hw; lw <= lw; state <= s0; end end s1:begin if(flag && (hw > 100)) //判斷高電平的時(shí)間 begin hw <= hw - 100; lw <= lw + 100; state <= s1; end else if(flag && (hw ==100)) begin hw <= hw + 100; lw <= lw - 100; state <= s0; end else begin hw <= hw; lw <= lw; state <= s1; end end default : state <= s0; endcase end reg [25:0] cnt; reg sum; always @(posedge clk or negedge rst_n) if(!rst_n) begin sum <= 1'b0; led <= 1'b1; cnt <= 1'b0; end else case (sum) s0:begin if(cnt < hw -1 ) begin led <= 1'b0; cnt <= cnt + 1'b1; end else begin cnt <= 1'b0; sum <= s1; end end s1:begin if(cnt < lw -1) begin led <= 1'b1; cnt <= cnt + 1'b1; end else begin cnt <= 1'b0; sum <= s0; end end default:sum <= s0; endcase endmodule仿真測(cè)試
測(cè)試模塊代碼:
`timescale 1ns/1ps module huxi_led_state_tb(); reg clk; reg rst_n; wire led; parameter T = 100_000; initial begin clk = 1'b1; rst_n = 1'b0; #200.1 rst_n = 1'b1; end always #10 clk = ~ clk; huxi_led_state huxi_led_state_date( .clk(clk), .led(led), .rst_n(rst_n) ); endmodule仿真圖:
仿真中可以看到點(diǎn)亮led等高電平在不停的增高,然后會(huì)降低,通過驗(yàn)證我們的設(shè)計(jì)是正確的。
END
-
FPGA
+關(guān)注
關(guān)注
1650文章
22210瀏覽量
627599 -
脈沖
+關(guān)注
關(guān)注
20文章
904瀏覽量
98593 -
呼吸燈
+關(guān)注
關(guān)注
10文章
115瀏覽量
43670
原文標(biāo)題:源碼系列:基于FPGA的呼吸燈設(shè)計(jì)(附源工程)
文章出處:【微信號(hào):HXSLH1010101010,微信公眾號(hào):FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
【應(yīng)用方案】“會(huì)呼吸”的空調(diào):艾為燈語?讓空調(diào)將成為家庭“情緒調(diào)節(jié)師”

【沁恒CH585開發(fā)板免費(fèi)試用體驗(yàn)】+PWM呼吸燈

用于呼吸流量及呼吸率的檢測(cè)測(cè)壓力傳感器

便攜式呼吸機(jī)的硬件電路設(shè)計(jì)

使用單片機(jī)驅(qū)動(dòng)多組LED燈實(shí)現(xiàn)呼吸效果電路
【瑞薩RA2L1入門學(xué)習(xí)】01. PWM 呼吸燈
ADS1298R外部呼吸模式和內(nèi)部呼吸模式的區(qū)別?
基于FPGA的VGA驅(qū)動(dòng)設(shè)計(jì)(附源工程)

ADS1292R的呼吸阻抗檢測(cè)功能在運(yùn)動(dòng)模式下是否有辦法能提取出準(zhǔn)確的呼吸信號(hào)?
ADS1292R采集呼吸波采樣率越高,采樣得到的呼吸波幅度越低,為什么?
多平臺(tái)FPGA工程快速移植與構(gòu)建

4G模組PWM調(diào)光入門:打造個(gè)性化呼吸燈

呼吸燈的概念和實(shí)現(xiàn)原理

評(píng)論