• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    Lattice MXO2: LED呼吸燈

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

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

    硬件說(shuō)明


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

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

    LED電路連接

    脈沖信號(hào)有效值

    實(shí)現(xiàn)原理如上圖所示,脈沖信號(hào)的周期為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,也就是說(shuō)LED燈從最亮的狀態(tài)開(kā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ù)周期對(duì)應(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呼吸燈原理

    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;             //系統(tǒng)時(shí)鐘輸入
    	input rst;             //復(fù)位輸出
    	output led;            //led輸出 	
    	reg [24:0] cnt1;       //計(jì)數(shù)器1
    	reg [24:0] cnt2;       //計(jì)數(shù)器2
    	reg flag;              //呼吸燈變亮和變暗的標(biāo)志位 	
    	parameter   CNT_NUM = 2400;	//計(jì)數(shù)器的最大值 
    	period = (2400^2)*2 = 24000000 = 2s
    	//產(chǎn)生計(jì)數(shù)器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)生計(jì)數(shù)器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 //當(dāng)計(jì)數(shù)器1計(jì)滿時(shí)計(jì)數(shù)器2開(kāi)始計(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開(kāi)始遞減
    					flag<=1'b1;
    				else
    					cnt2<=cnt2+1'b1;
    				end
    			else 
    			begin
    				if(cnt2<=0)      //當(dāng)標(biāo)志位為高時(shí)計(jì)數(shù)器2遞減計(jì)數(shù)
    					flag<=1'b0;		   //計(jì)數(shù)器2級(jí)到0,表示亮度已最小,標(biāo)志位變低,之后計(jì)數(shù)器2開(kāi)始遞增
    				else 	
    					cnt2<=cnt2-1'b1;
    				end		 			end
    		else 
    			cnt2<=cnt2;                //計(jì)數(shù)器1在計(jì)數(shù)過(guò)程中計(jì)數(shù)器2保持不變
    		end 	//比較計(jì)數(shù)器1和計(jì)數(shù)器2的值產(chǎn)生自動(dòng)調(diào)整占空比輸出的信號(hào),輸出到led產(chǎn)生呼吸燈效果
    	assign	led = (cnt1<cnt2)?1'b0:1'b1; 
    	endmodule

    引腳分配


    引腳分配如下:

    管腳名稱clkrstled
    管腳C1L14N13

    小結(jié)


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



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

    評(píng)論


    相關(guān)推薦

    技術(shù)專區(qū)

    關(guān)閉
    主站蜘蛛池模板: 林周县| 嘉兴市| 修武县| 三都| 綦江县| 敖汉旗| 昆明市| 彭水| 佛冈县| 明星| 娄烦县| 应用必备| 颍上县| 曲阳县| 靖边县| 安福县| 水城县| 都匀市| 南阳市| 辽宁省| 祁连县| 邹平县| 开鲁县| 邹平县| 四川省| 罗平县| 盐津县| 大姚县| 前郭尔| 中宁县| 来凤县| 鹿邑县| 平遥县| 承德县| 监利县| 龙胜| 花垣县| 佛坪县| 乌兰浩特市| 永川市| 来安县|