精华内容
下载资源
问答
  • 呼吸灯原理简介 + FPGA实现呼吸灯

    千次阅读 2020-02-11 23:15:21
    呼吸灯原理简介 + FPGA实现呼吸灯 所谓呼吸灯,就是是指灯光在微电脑的控制之下完成由亮到暗再由暗到亮的逐渐变化,感觉好像是人在呼吸,主要用于起通知提醒的作用。 本文简要介绍一下呼吸灯原理,最后并附上FPGA...

    呼吸灯原理简介 + FPGA实现呼吸灯

    所谓呼吸灯,就是是指灯光在微电脑的控制之下完成由亮到暗再由暗到亮的逐渐变化,感觉好像是人在呼吸,主要用于起通知提醒的作用。
    本文简要介绍一下呼吸灯的原理,最后附上FPGA的呼吸灯Verilog HDL代码。希望能给各位读者些许帮助。

    呼吸灯的效果是灯逐渐由暗变亮再逐渐由亮变暗周而复始像人在呼吸一样。大家可能会想到如果能实现逐渐增加电压再逐渐减小电压就能轻松实现。但是FPGA的引脚电压只有“0”和“1”两个等级。因此通过FPGA引脚实现“正弦波式”信号输出是不现实的。所以事实上都是通过改变引脚单位时间内高电平的输出时间来实现呼吸灯,也就是让FPGA引脚输出一系列PWM波信号并不断改变PWM波的占空比。

    呼吸灯分为两个阶段:
    第一阶段:由暗到亮。就是输出的一系列PWM波占空比由0%到100%以1%为间隔递增,共100个周期PWM波。
    第二阶段:由亮到暗。就是输出的一系列PWM波占空比由100%到0%以1%为间隔递减,共100个周期PWM波。
    注意:
    有两个100:一个100为占空比100%;另一个100为由0%到100%或100%到0%需要100个周期PWM波。

    FPGA呼吸灯代码Breath_LED.v:

    /*************************************************
    // 文件说明:      led呼吸灯代码
    // 创 建 人:     mnWu522
    // 日期:         2020-2-11
    // 修 改 人:                     
    // 修改日期:     20xx-xx-xx
    *************************************************/
    module Breath_LED(
    	input clk,
    	output reg led
    );
    
    reg [12:0]cnt1;
    reg [8:0]cnt2;
    reg [8:0]cnt3;
    reg flag;
    initial flag <= 0;
    initial cnt1 <= 0;
    initial cnt2 <= 0;
    initial cnt3 <= 0;
    
    always @(posedge clk)
    begin
    	if(cnt1 == 5000)begin
    		cnt2 <= cnt2 + 1;
    		cnt1 <= 0;
    	end else begin
    		cnt1 <= cnt1 +1;
    	end
    
    	if(cnt2 == 99)begin
    		cnt3 <= cnt3 + 1;
    		cnt2 <= 0;
    	end
    
    	if(cnt3 == 99)begin
    		flag <= ~flag;
    		cnt3 <= 0;
    	end
    
    	if(cnt2 >= cnt3 && flag == 0)begin
    		led <= 1;
    	end else if(cnt2 <= cnt3 && flag == 0)begin
    		led <= 0;
    	end else if(cnt2 >= cnt3 && flag == 1)begin
    		led <= 0;
    	end else if(cnt2 <= cnt3 && flag == 1)begin
    		led <= 1;
    	end
    end
    
    endmodule
    

    代码讲解:
    该代码实现一个2s的呼吸灯,1s由暗到亮,1s由亮到暗。
    由第二个100得一个PWM波周期为1s/100=10ms;
    由第一个100得1%占空比为10ms/100=100us;
    cnt1加到5000是因为本代码默认时钟为50MHz,5000/50000000Hz=100us,可根据FPGA实际情况自行修改。

    展开全文
  • 呼吸灯原理

    千次阅读 2020-10-15 11:38:48
    1.呼吸灯原理分析:模拟人体呼吸,吸气和呼气各占1.5S,人眼的图像滞留时间0.04s(1/24帧画面),按最快0.04s算,就是40ms。亮0.02S,灭0.02s,人眼看到的应该是一直亮(可以实验)。 2.呼吸灯程序设计:就是改变这40...

    1.呼吸灯原理分析:模拟人体呼吸,吸气和呼气各占1.5S,人眼的图像滞留时间0.04s(1/24帧画面),按最快0.04s算,就是40ms。亮0.02S,灭0.02s,人眼看到的应该是一直亮(可以实验)。

    2.呼吸灯程序设计:就是改变这40ms中,亮和灭所占的百分比(40ms相对不柔和,20ms效果柔和)。

    亮的百分比多,人眼看到的就亮,反之就是暗(实验,为了提高呼吸灯的柔和效果,采用设置20ms一个周期,20ms内调整亮和灭的比例)

    因此程序设计:1.5S需要1500/20=75个周期,75个周期中,亮度百分比有0%增长到100%,因此每个周期增长时间为20ms/75=266us(点亮)。熄灭的原理,正好相反,熄灭时间增长。程序中需要两个循环,一个用来点亮一个用来熄灭。 程序要灵活设计,能够调整呼吸时间的长短,1.5s这个参数。可以调整柔和度,可以调整40ms这个周期参数,这样就实现了呼吸灯的灵活调整。

    展开全文
  • 呼吸灯原理

    2015-10-10 16:47:21
    呼吸灯原理仿真图,基于proteus的仿真原理
  • FPGA verilog HDL 呼吸灯及呼吸流水灯实现

    万次阅读 多人点赞 2018-08-02 16:51:16
    项目一:FPGA的呼吸灯实现 项目介绍:呼吸灯,就是想人们呼吸频率的一种led灯亮灭的一种表现形式。过程是慢慢变亮,然后变亮以后又慢慢变灭的一种过程。很多初学者会认为硬件逻辑语言怎么能控制电流的高低呢,让灯...

    项目一:FPGA的呼吸灯实现

              项目介绍:呼吸灯,就是想人们呼吸频率的一种led灯亮灭的一种表现形式。过程是慢慢变亮,然后变亮以后又慢慢变灭的一种过程。很多初学者会认为硬件逻辑语言怎么能控制电流的高低呢,让灯有多亮就调多亮,所以觉得不好实现,其实不用担心,呼吸灯捅破窗户纸就知道,其实是一个很简单的一个小项目,下面我将一步一步的讲解,并且实现。

              项目小知识讲解:本次项目会用到计数器,计时器在我上一个文章里有介绍,这里就不多说了。此外再回顾一下占空比的小知识,PWM(Pluse Width Modulation)脉冲宽度调制,是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。并广泛应用在从测量、通信、功率控制与变换及LED照明等许多领域中。顾名思义,就是占空比可调的信号,那么什么是占空比呢?

           占空比(Duty Cycle or Duty Ratio),可以解释为,在一脉冲序列中(方波),正脉冲序列的持续时间脉冲总周期的比值。也可理解为,电路释放能量的有效时间与总释放时间的比值。PWM是怎样实现调光呢?想要调节LED的亮度变化,实则是调节控制流经LED的电流。电流增大则LED亮度增强,反之减弱。但由于电流为模拟信号,所以这时就用到了PWM。

    假设刚开始时占空比为1%,慢慢的占空比为2%、3%、4%……56%、57%……98%、99%、100%。

    这就是LED灯亮的一个过程,我们可以让占空比为1%时,令LED灯亮,其余的部分让LED灭,慢慢的占空比越来越大,亮的部分也越来越多,这就是一个由灭到亮的一个过程。

    假设刚开始时占空比为100%,慢慢的占空比为99%、98%、97%……64%、63%……2%、1%、0%。

    这就是LED灯灭的一个过程,我们可以让占空比为99%时,令LED灯灭,其余的部分让LED亮,慢慢的占空比越来越小,灭的部分也越来越多,这就是一个由亮到灭的一个过程。

    项目设计:

         首先我们要思考,如何设计这样描述的一个过程,很多人应该想到了用计数器,没错,确实要用到计数器。下面我们可以先画一下项目构思前的时序图。

    自己手动画的,有点粗糙,就凑合的看一下吧.......时钟的线只是为了对齐,真实的时钟只对着2us计数的一个时钟周期的;比如说晶振为50MHZ,那么每一个时钟周期相当于1/50M=20ns,故第一个计数器为一个2us的计数器,每计100次之后清零;第二个计数器为2ms计数器,每当2us计数器计数100次时,2ms就会增加一次。同理2s计数器也是一样。

    我们可以看出,当cnt_2s>=cnt_2ms的部分刚好是我们上面所说的占空比的位置,而且当cnt_2s加到999的时候刚好占空比为100%,所以我们就会多了一个条件,当cnt_2s>=cnt_2ms,我们让LED亮,cnt_2s<cnt_2ms的部分我们让他灭。

    一个完整的呼吸灯时间为2s,也就是,由亮变暗需要2s,由暗变亮需要2s;将 2s分为1000等份,也就是由亮变暗,需要1000次的变化,每次为2ms,将,2ms分为1000等份,占空比100%过渡到0%,需要100次的变化,每次为2us;

    既然原理差不多有了解,下面我们就开始编程环节了:

    上半段只是一个由灭到亮的一个过程,我们下面开始下下半段(有亮到灭的过程),很多人都会觉得那岂不是和上面一样再写很多程序嘛!!!!就不卖关子了,只需要加一个标志位flag就可以了。

    记得加了标志位flag的时候,要把标志位flag的判断条件写在LED模块当中。

    下面是仿真图

    根据仿真图我们可以看到灯只在一小段是亮的,其余的时间都是灭的,故后面也是一样的结果。

    上图是全亮的时候准备进行由亮到灭的过程。

     

    项目二:双向流水呼吸灯的实现

    项目设计:实现流水灯的现象,并且在流水的时候每个LED灯都实现呼吸灯的效果。为了实现这个效果,本次的设计是像踏步一样的小项目,第一个LED灯准备从最亮到灭的那个临界点,第二个LED灯就开始准备由灭到亮的一个过程,全程实现一个双向流水灯的效果,流水到最右边再返回。也就是说0S时第一个LED灯开始亮,到2S时再慢慢熄灭,此时第二个LED灯准备开始慢慢变亮到4S时慢慢熄灭,此时第三个LED灯准备慢慢变亮,以此类推..........

    程序设计:流水呼吸灯的方法多种多样,仁者见仁,智者见智。比如将呼吸灯模块例化到顶层模块去设计;用状态机控制每个灯的过程;设置标志位信号,用位拼接的方法去完成呼吸流水灯。此次设计为了方便初学者理解,用一种最简单的方法,加一个计数器,去控制每个灯的变化。

    让它每次在每个2S末尾处触发+1,在7的时候清零,共计8个2s;思路在项目设计处有说,只有在每块加一个条件,即可以实现效果,但是在每个cnt计数的时候,要注意第一个项目程序中的flag是1还是0;

    效果大概和仿真时一样的(踏雪寻梅的效果),仿真图如下:

    下面是用例化到顶层文件实现的流水呼吸灯的仿真:

     

    一般很多人看着仿真图便可以将程序写出,若新手不懂的,可以自行下载一下程序,因为程序过长,我将源程序和仿真程序打包上传了,有兴趣的可以自行下载一下:

    https://download.csdn.net/download/qq_40261818/10580989

                  

     

     

               写博客是为了方便学弟学妹们学习以及初学者学习,也欢迎大家交流,请勿盗用,感谢尊重原创!

               谈合作项目等请加V zhanghs1313

     

    展开全文
  • 目录原理实验设计Verilog实现testbeach 原理 PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的...

    原理

    PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。

    所以根据面积等效法则,可以通过对改变脉冲的时间宽度,来等效的获得所需要合成的相应幅值和频率的波形;
    具体如下图所示(图片来自https://blog.csdn.net/little_ox/article/details/118249648):
    在这里插入图片描述
    如下图所示,用一个 N 比特的计数器,最大值可以表示为 2 的 N 次方,最小值 0,计数器以“period”为步进值累加,加到最大值后会溢出,进入下一个累加周期。当计数器值大于“duty”时,脉冲输出高,否则输出低,这样就可以完成图中红色线所示的脉冲占空比可调的
    脉冲输出,同时“period”可以调节脉冲频率,可以理解为计数器的步进值。
    在这里插入图片描述
    不同的脉冲占空比的方波输出后加在 LED 上,LED 灯就会显示不同的亮度,通过不断地调节方波的占空比,从而实现 LED 灯亮度的调节。

    实验设计

    在这里插入图片描述

    Verilog实现

    `timescale 1ns / 1ps
    module ax_pwm
    #(
    parameter N = 16 //pwm bit width 
    )
    (
     input clk,
     input rst,
     input[N - 1:0]period,//pwm step value
     input[N - 1:0]duty, //duty value
     output pwm_out //pwm output
     );
    reg[N - 1:0] period_r; //period register
    reg[N - 1:0] duty_r; //duty register
    reg[N - 1:0] period_cnt; //period counter
    reg pwm_r;
    assign pwm_out = pwm_r;
    always@(posedge clk or posedge rst)
    begin
     if(rst==1)
     begin
     period_r <= { N {1'b0} };
     duty_r <= { N {1'b0} };
     end
     else
     begin
     period_r <= period;
     duty_r <= duty;
     end
    end
    //period counter, step is period value
    always@(posedge clk or posedge rst)
    begin
     if(rst==1)
     period_cnt <= { N {1'b0} };
     else
     period_cnt <= period_cnt + period_r;
    end
    always@(posedge clk or posedge rst)
    begin
     if(rst==1)
     begin
     pwm_r <= 1'b0;
     end
     else
     begin
     if(period_cnt >= duty_r) 
     pwm_r <= 1'b1;
     else
     pwm_r <= 1'b0;
     end
    end
    

    testbeach

    通过设置 period 的值,设定 PWM 的频率为 200Hz,PWM_PLUS 状态即是增加 duty 值,如果增加到最大值,将 pwm_flag 置 1,并开始将 duty 值减少,待减少到最小的值,则开始增加 duty 值,不断循环。其中 PWM_GAP 状态为调整间隔,时间为 100us。

    `timescale 1ns / 1ps
    module pwm_test(
     input clk, //50MHz
     input rst_n, //low active
     output led //high-off, low-on
     );
     
    localparam CLK_FREQ = 50 ; //50MHz
    localparam US_COUNT = CLK_FREQ ; //1 us counter
    localparam MS_COUNT = CLK_FREQ*1000 ; //1 ms counter
    localparam DUTY_STEP = 32'd100000 ; //duty step
    localparam DUTY_MIN_VALUE = 32'h6fffffff ; //duty minimum value
    localparam DUTY_MAX_VALUE = 32'hffffffff ; //duty maximum value
     
    localparam IDLE = 0; //IDLE state
    localparam PWM_PLUS = 1; //PWM duty plus state
    localparam PWM_MINUS = 2; //PWM duty minus state
    localparam PWM_GAP = 3; //PWM duty adjustment gap
    wire pwm_out; //pwm output
    reg[31:0] period; //pwm step value
    reg[31:0] duty; 
    reg pwm_flag ; 
    minus
    reg[3:0] state;
    reg[31:0] timer; 
    assign led = ~pwm_out ;
    always@(posedge clk or negedge rst_n)
    begin
    if(rst_n == 1'b0)
    begin
    period <= 32'd0;
    timer <= 32'd0;
    duty <= 32'd0;
    pwm_flag <= 1'b0 ;
    state <= IDLE;
    end
    else
    case(state)
    IDLE:
    begin
    period <= 32'd17179; 
    200Hz(period = 200*2^32/50000000)
    state <= PWM_PLUS;
    duty <= DUTY_MIN_VALUE;
    end
    PWM_PLUS :
    begin
    if (duty > DUTY_MAX_VALUE - DUTY_STEP) 
    begin
    pwm_flag <= 1'b1 ;
    duty <= duty - DUTY_STEP ;
    end
    else
    begin
    pwm_flag <= 1'b0 ;
    duty <= duty + DUTY_STEP ;
    end
    state <= PWM_GAP ;
    end
    PWM_MINUS :
    begin
    if (duty < DUTY_MIN_VALUE + DUTY_STEP) 
    begin
    pwm_flag <= 1'b0 ;
    duty <= duty + DUTY_STEP ;
    end
    else
    begin
    pwm_flag <= 1'b1 ;
    duty <= duty - DUTY_STEP ;
    end
    state <= PWM_GAP ;
    end
    PWM_GAP:
    begin
    if(timer >= US_COUNT*100)
    begin
    if (pwm_flag)
    state <= PWM_MINUS ;
    else
    state <= PWM_PLUS ;
    timer <= 32'd0;
    end
    else
    begin
    timer <= timer + 32'd1;
    end
    end
    default:
    begin
    state <= IDLE;
    end
    endcase
    end
    //Instantiate pwm module
    ax_pwm
    #(
     .N(32)
    )
    ax_pwm_m0(
     .clk (clk),
     .rst (~rst_n),
     .period (period),
     .duty (duty),
     .pwm_out (pwm_out)
     );
    endmodule
    
    展开全文
  • STM32呼吸灯原理

    千次阅读 2020-09-16 21:48:49
    呼吸灯原理其实是利用pwm(脉冲宽度调节)技术,通过改变占空比来实现呼吸灯,占空比是指高电平除以总的周期, 下面直接上代码 int xxx=20000; while(1) { for(i=0;i<xxx;i++) { GPIO_ResetBits(GPIOF,GPIO_Pin_...
  • 单片机实现呼吸灯

    万次阅读 多人点赞 2019-06-11 17:45:21
    用渐变的PWM信号实现LED呼吸灯。 LED由暗逐渐变亮,再由亮逐渐变暗循环。 C语言代码如下: /*----------------------------------------------- Function: 用渐变的PWM信号实现LED呼吸灯 Description: LED由暗逐渐变...
  • 呼吸灯实现

    千次阅读 多人点赞 2019-04-02 17:36:54
    有要求要实现LED灯光强弱变化控制的,之前有了解过呼吸灯的概念,也知道通过PWM来控制,但也只是停留在概念上面,以前也没有真正去做过这方面的,所以就在网上再搜罗了一番,感觉还是有些云里雾里的,最后只好自己静...
  • msp430实现呼吸灯

    2019-04-11 08:09:14
    呼吸灯是 LED 灯在我们的控制下,有规律的逐渐从暗变亮又变暗的过程,当 我们亮暗的程度和频率把握得当时,看起来灯好像是人在呼吸一样 呼吸灯不再是我们闪烁那样一高一低的变化规律,而是有渐变性,是连续变 化的。...
  • 呼吸灯 fpga实现

    2021-10-08 14:22:17
    呼吸灯:让led灯在固定时间由暗变亮,再由亮变暗,循环往复 原理:假定使led灯在2s内由暗变亮,再由亮变暗,这里采用的办法就是设置占空比,将2s分为100份,每份20ms,在每一个20ms到来,就将占空比加大或缩小1/100...
  • FPGA的呼吸灯实现 设计报告 呼吸灯原理 ------呼吸灯是指灯光在微电脑的控制之下完成由亮到暗的逐渐变化,感觉好像是人在呼吸。其广泛应用于手机之上,并成为各大品牌新款手机的卖点之一,起到一个通知提醒的作用。 ...
  • 呼吸灯实现方法

    千次阅读 2020-01-20 17:32:29
    呼吸灯,顾名思义就是灯的亮度像人的呼吸一样有节奏的由暗到亮,再又亮到暗,在现代手机中被广泛的应用。 一般来说现在的单片机都带有PWM所以直接用就好了,这里就不对这个做介绍了,这里我们是使用定时器来模拟...
  • 最终所要实现的效果:当按下A键对应A亮,按下B键对应B亮,按下C键对应C亮,按下D键对应D亮。 就选四个键,多了自己写,原理都一样。 原理支撑:对于嵌入的LED,低电平亮,高电平灭(这个大部分这样,实际...
  • 51单片机实现呼吸灯

    2014-11-20 16:32:33
    通过51单片机来操作led,实现呼吸灯效果,用按键可选取灯的亮度,再搭配数码管显示其等级(适合学习板使用)。
  • 呼吸灯设计与实现

    千次阅读 2020-01-22 21:28:35
    设计一个周期为4s的呼吸灯实现LED灯慢慢变亮,然后变亮以后又慢慢变灭,从全暗到全亮需要2s,从全亮到全暗需要2s。 (二)源码展示 module led_breath( clk, rst_n, led ); input clk; //系统输入时钟,50...
  • PWM实现呼吸灯

    万次阅读 多人点赞 2019-07-30 20:34:20
    PWM实现呼吸灯 一、PWM简介 脉冲宽度调制(PWM),是英文“Pulse Width Modulation” 的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制, ...
  • led实现呼吸灯

    万次阅读 2018-08-12 10:46:46
    1.呼吸灯原理就是要让led灯的亮灭时间不同,需要多个计数器实现。从1us到1s钟,改变led呼吸灯的触发条件。 2.依旧把程序写出来,这次在写计数器的时候,发现自己很大问题,就是计数器条件写不全。要不就是只写...
  • 51单片机心形灯——实现旋转呼吸灯流水编程 实现按键K1实现从左向右流水,按键K2实现从右往左流水,按键K3实现暂停流水,按键K4实现继续流水 注意:本代码存在小小BUG即按键K1以后可以按键K3和K4控制流水,不能按K2...
  • 全彩RGB呼吸灯效果实现-STM32

    千次阅读 2019-11-15 16:38:22
    全彩RGB呼吸灯效果实现——PWM方式 全彩LED 灯控制原理: 使用STM32控制LED灯输出多种亮度等级,可以通过控制输出脉冲的占空比来实现,见图1. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img...
  • 上一次有一位非常好学的粉丝儿问可不可以把月亮做一个呼吸灯效果,因为没有找到月亮大小的图,就用星星代替今天,本博主用纯css和flutter动画分别实现它,记得收藏学习哦效果:想要测试的,原图在文章末尾实现原理:...
  • Verilog实现PWM呼吸灯

    2020-08-14 18:52:42
    一个用verilog实现的pwm呼吸灯
  • 如果把点亮状态延时5us,而熄灭状态延时500us时led的亮度就弱了,接下来调节亮灭占空比来实现呼吸灯。在main.c中输入一下程序并烧录验证,得到预期呼吸灯效果。 #include "stm32f10x.h" //STM32头
  • 对于FPGA的引脚电压只有“0”和“1”两个电平,不能通过逐渐增加电压再逐渐减小电压实现要求,但是可以通过改变引脚单位时间内高电平的输出时间来实现呼吸灯,也就是让FPGA引脚输出一系列PWM波信号并不断改变PWM波的...
  • 实现原理:利用android的通知指示灯,通过闹钟的方式实现呼吸灯。 俗话说“巧妇难为无米之炊”,我们的呼吸灯在那里呢?哈哈,就用android手机的通知指示灯。如何让led灯亮起来呢。利用发送通知的方式,相关代码...
  • css实现呼吸灯动效

    千次阅读 2019-07-19 16:39:46
    实现原理:改变图片的透明度 代码: <div class="breath"></div> .breath { width: 8%; height: 77%; position: absolute; right: 19px; top: 17px; background: url("../../assets/image/...
  • Unity 实现物体上呼吸灯效果Shader

    千次阅读 2019-08-20 20:08:28
    原理:最终呼吸效果 = 当前颜色+ 周期变化的数值*呼吸灯颜色 如果要部分位置要进行呼吸效果,就和之前流光一样加一个mask图来rgb其中一个通道来处理就行 部分呼吸原理:最终呼吸效果 = 当前颜色+ 周期变化的数值*...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,405
精华内容 562
关键字:

呼吸灯的实现原理