<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > Lattice MXO2: LED呼吸燈

Lattice MXO2: LED呼吸燈

作者: 時(shí)間:2023-11-16 來(lái)源:電子森林 收藏

本節,我們將通過(guò)脈寬調制技術(shù)來(lái)實(shí)現“”,實(shí)現LED的亮度由最暗逐漸增加到最亮,再逐漸變暗的過(guò)程。 脈沖寬度調制(PWM:Pulse Width Modulation),簡(jiǎn)稱(chēng)脈寬調制。它是利用微控制器的數字輸出調制實(shí)現,是對模擬電路進(jìn)行控制的一種非常有效的技術(shù),廣泛應用于測量、通信、功率控制與變換等眾多領(lǐng)域。

硬件說(shuō)明


的設計較為簡(jiǎn)單,我們使用12MHz的系統時(shí)鐘作為高頻信號做分頻處理,調整占空比實(shí)現PWM,通過(guò)LED燈LD1指示輸出狀態(tài)。

本文引用地址:http://dyxdggzs.com/article/202311/452950.htm

LED電路連接

脈沖信號有效值

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

  • 當t = 0時(shí),占空比為0%,因為我們的LED硬件為低電平點(diǎn)亮,所以為最亮的狀態(tài)。
  • 當t = T時(shí),占空比為100%,LED燈為最暗(熄滅)的狀態(tài)。

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

呼吸燈程序設計

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

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

PWM呼吸燈原理

Verilog代碼


// ********************************************************************
// >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
// ********************************************************************
// File name    : breath_led.v
// Module name  : breath_led
// Author       : STEP// Description  : 
// 
// --------------------------------------------------------------------
// Code Revision History : 
// --------------------------------------------------------------------
// Version: |Mod. Date:   |Changes Made:
// V1.0     |2017/03/02   |Initial ver
// --------------------------------------------------------------------
// Module Function:呼吸燈
module breath_led(clk,rst,led); 	
input clk;             //系統時(shí)鐘輸入
	input rst;             //復位輸出
	output led;            //led輸出 	
	reg [24:0] cnt1;       //計數器1
	reg [24:0] cnt2;       //計數器2
	reg flag;              //呼吸燈變亮和變暗的標志位 	
	parameter   CNT_NUM = 2400;	//計數器的最大值 
	period = (2400^2)*2 = 24000000 = 2s
	//產(chǎn)生計數器cnt1
	always@(posedge clk or negedge rst) 
	begin 
		if(!rst) begin
			cnt1<=13'd0;
			end 
        else if(cnt1>=CNT_NUM-1) 
				cnt1<=1'b0;
		     else 
                cnt1<=cnt1+1'b1; 
		end 	//產(chǎn)生計數器cnt2
	always@(posedge clk or negedge rst) 
	begin 
		if(!rst) begin
			cnt2<=13'd0;
			flag<=1'b0;
			end 
        else if(cnt1==CNT_NUM-1) begin //當計數器1計滿(mǎn)時(shí)計數器2開(kāi)始計數加一或減一
			if(!flag) 
			begin            //當標志位為0時(shí)計數器2遞增計數,表示呼吸燈效果由暗變亮
				if(cnt2>=CNT_NUM-1)    //計數器2計滿(mǎn)時(shí),表示亮度已最大,標志位變高,之后計數器2開(kāi)始遞減
					flag<=1'b1;
				else
					cnt2<=cnt2+1'b1;
				end
			else 
			begin
				if(cnt2<=0)      //當標志位為高時(shí)計數器2遞減計數
					flag<=1'b0;		   //計數器2級到0,表示亮度已最小,標志位變低,之后計數器2開(kāi)始遞增
				else 	
					cnt2<=cnt2-1'b1;
				end		 			end
		else 
			cnt2<=cnt2;                //計數器1在計數過(guò)程中計數器2保持不變
		end 	//比較計數器1和計數器2的值產(chǎn)生自動(dòng)調整占空比輸出的信號,輸出到led產(chǎn)生呼吸燈效果
	assign	led = (cnt1<cnt2)?1'b0:1'b1; 
	endmodule

引腳分配


引腳分配如下:

管腳名稱(chēng)clkrstled
管腳C1L14N13

小結


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



關(guān)鍵詞: 呼吸燈 FPGA Lattice Diamond 小腳丫

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>