pwm(脉宽调制)——led特效呼吸灯设计

NingHeChuan NingHeChuan     2022-08-21     379

关键词:

  简述PWM

  PWM——脉宽调制信号(Pulse Width Modulation),它利用微处理器的数字输出来实现,是对模拟电路控制的一种非常有效的技术,广泛应用于测量、通信、功率控制与变化等许多领域。

  LED特效呼吸灯原理

  采用pwm的方式,在固定的频率下,采用占空比的方式来实现LED亮度的变化。占空比为0,LED灯不亮,占空比为100%,则LED灯最亮。所以将占空比从0到100%,再从100%到0不断变化,就可以实现LED灯实现特效呼吸。

  设计思路、框图  

  变亮:当cnt2 < cnt3时为高电平,反之为低电平。

  变暗:当cnt2 < cnt3时为低电平,反之为高电平。

  先分频出延时为1us的延时电路,作为后面电路的驱动电路,然后是1ms延时和1s延时,会产生两个计数器,刚好是1000倍的关系。

  (1)在第一秒时,随着cnt3由0到999逐渐增大,每一个1ms的占空比通过cnt2去调节。当cnt2 < cnt3时为高电平,反之为低电平。 因此,随着cnt3的逐渐增大,高电平的时间逐渐增大,直到100%。

  (2)在第二秒时,随着cnt3由0到999逐渐增大,每一个1ms的占空比通过cnt2去调节。当cnt2 < cnt3时为低电平,反之为高电平。 因此,随着cnt3的逐渐增大,高电平的时间逐渐减小,直到0。

  设计图如上所示,完后就可以照图施工了,附上部分代码。

 1     //延时1us
 2     always @(posedge mclk or negedge rst_n)
 3     begin
 4         if(!rst_n)
 5             cnt1 <= 6'b0;
 6         else if(cnt1 < STOP_50 - 1'b1)
 7             cnt1 <= cnt1 + 1'b1;
 8         else 
 9             cnt1 <= 6'b0;
10     end
11     assign delay_1us = (cnt1 == STOP_50 - 1'b1)?1'b1:1'b0;
12     
13     //延时1ms
14     always @(posedge mclk or negedge rst_n)
15     begin
16         if(!rst_n)
17             cnt2 <= 10'b0;
18         else if(delay_1us)
19         begin
20             if(cnt2 < STOP_1000 - 1'b1)    
21                 cnt2 <= cnt2 + 1'b1;
22             else 
23                 cnt2 <= 10'b0;
24         end
25        end
26        assign delay_1ms = ((delay_1us == 1'b1) && (cnt2 == STOP_1000 - 1'b1))?1'b1:1'b0;
27        
28        //延时1s
29        always @(posedge mclk or negedge rst_n)
30     begin
31         if(!rst_n)
32             cnt3 <= 10'b0;
33         else if(delay_1ms)
34         begin
35              if(cnt3 < STOP_1000 - 1'b1)
36                 cnt3 <= cnt3 + 1'b1;
37             else 
38                 cnt3 <= 10'b0;
39          end
40         
41     end
42     assign delay_1s = ((delay_1ms == 1'b1) && (cnt3 == STOP_1000 - 1'b1))?1'b1:1'b0;
43     
44     //state change
45     always @(posedge mclk or negedge rst_n)
46     begin
47         if(!rst_n)
48             display_state <= 1'b0;
49         else if(delay_1s)//每一秒切换一次led灯显示状态
50             display_state <= ~display_state;
51         else 
52             display_state <= display_state;
53     end
54     
55     //pwm信号的产生
56     always @(posedge mclk or negedge rst_n)
57     begin
58         if(!rst_n)
59                 pwm <= 1'b0;
60         else 
61             case(display_state)
62                 1'b0: pwm <= (cnt2 < cnt3)?1'b1:1'b0;
63                 1'b1: pwm <= (cnt2 < cnt3)?1'b0:1'b1;
64                 default: pwm <= pwm;
65             endcase
66     end
67     
68     //位拼接使得输出八位led呼吸灯
69     assign led_out = {8{pwm}};
70     

  产生的pwm信号原来是一位的,所以最后要是需要控制多个LED的亮灭,使用一个位拼接运算即可,如最后一行代码所示。

 

转载请注明出处:NingHeChuan(宁河川)

个人微信订阅号:NingHeChuan

如果你想及时收到个人撰写的博文推送,可以扫描左边二维码(或者长按识别二维码)关注个人微信订阅号

知乎ID:NingHeChuan

微博ID:NingHeChuan

原文地址:http://www.cnblogs.com/ninghechuan/p/6291499.html 

arduinoesp32利用pwm实现板载led呼吸灯效果(代码片段)

ArduinoESP32利用PWM实现板载LED呼吸灯效果LEDC简介LED控制(LEDC)外围设备主要用于控制LED的强度,尽管它也可以用于生成PWM信号用于其他目的。它具有16个通道,可以生成独立的波形,这些波形可以用于驱动RGBLED... 查看详情

pwm呼吸灯实验

PWM室PulseWidthModulation的缩写,脉冲宽度调制,利用微处理器的数字输出来对模拟电路进行控制PWM是一种对模拟信号电平进行数字编码的方法。通过高分率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编... 查看详情

dsp28335基础教程——epwm实验(呼吸灯控制)(代码片段)

...节的学习是非常重要且常用的,比如说SPWM,SVPWM调制算法都要用到这个功能。但由于这些调制算法都是比较高阶的,目前不适合作为基础教程,我们在做完基础教程之后会写个关于“算法实现的高阶教程系列”。... 查看详情

labview控制arduino实现pwm呼吸灯(基础篇—5)

...abVIEW和ArduinoUno控制板实现LED灯亮度的调节,产生灯会呼吸的效果。2、实验环境将LED的阳极过220Ω限流电阻连接至ArduinoUno控制板的数字引脚D3上,将LED的阴极接至GND上。本实验的硬件连接如下图所示:3、程 查看详情

windows10iotcore用pwm控制器控制树莓派led灯亮度

...到树莓派也有PWM,就准备通过PWM来控制灯的亮度。PWM又叫脉宽调制,是用微处理器的数字输出来对模拟电路进行控制,对模拟信号电平进行数字编码。微软也提供了PWM的类库https://docs.microsoft.com/en-us/uwp/api/windows.devices.pwm?view=winrt-... 查看详情

基于pwm的呼吸灯设计(verilog版)(代码片段)

moduleBreath_Led(clk,rst,led);inputclk,rst;outputregled;reg[19:0]count;reg[19:0]duty_cycle;always@(posedgeclk)beginif(!rst)beginled<=1‘b0;count<=1‘b0;endelsebeginif(count<20‘d999_999)begincount<=count+1‘b1;if(count<duty_cycle)led<=1‘b1;elseled<=1‘b0;endelsecount<=... 查看详情

stm8s系列基于stvd标准库外设库开发,pwm输出实现led呼吸灯效果(代码片段)

STM8S系列基于STVD标准库外设库开发,PWM输出实现LED呼吸灯效果📌相关篇《STM8S系列基于STVD开发,标准外设库函数开发环境搭建》🎉利用定时器5,输出比较功能,作为产生pwm来源。🌼PWM相关库函数解析... 查看详情

单片机呼吸灯(代码片段)

...反之灭下去的时候就变短,这个功能通常会使用PWM(脉冲调制)来实现。但是对于我们初学者来说这东西太复杂了。下面我将教大家用延时写一个超简单的呼吸灯程序voiddelayed(unsignedintk)//延时函数 unsignedchari,j; for(i=0;i<k;i++) for(j=0... 查看详情

windows10iotcore用pwm控制器控制树莓派led灯亮度

...到树莓派也有PWM,就准备通过PWM来控制灯的亮度。PWM又叫脉宽调制,是用微处理器的数字输出来对模拟电路进行控制,对模拟信号电平进行数字编码。微软也提供了PWM的类库https://docs.microsoft.com/en-us/uwp/api/windows.devices.pwm?view=winrt-... 查看详情

树莓派的pwm脉宽调制功能介绍

...用的树莓派modelB。12GPIO口是外面第6个针。   脉宽调制(PWM)是指用微处理器的数字输出来对模拟电路进行控制,是一种对模拟信号 查看详情

esp324.rgb-led实验(pwm)

...lseWidthModulation的缩写,中文意思就是脉冲宽度调制,简称脉宽调制。PWM输出功能是一般单片机的常见功能,不过esp32的PWM输出使用的是通道的概念 查看详情

stc12c系列单片机pwm脉宽调制

...,分别用于软件定时器,外部脉冲的捕捉,高速输出以及脉宽调制输出(PWM)。具体寄存器详见数据手册这里就不多累述了。  这里就只讲PWM的实现,首先需要对PCA进行初始 查看详情

arduinorp2040通过调节pwm实现呼吸灯效果

ArduinoRP2040通过调节PWM实现呼吸灯效果 查看详情

基于stm32的串口/蓝牙控制led灯的开关和亮度(超基础)(代码片段)

...8;最常用且最基础的通讯,这里不展开)2,PWM脉宽调制脉冲宽度调制脉冲宽度调制(PWM), 查看详情

stm32使用pwm控制led灯的亮灭程度(代码片段)

...制(PWM),是英文“PulseWidthModulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制。原理可以如图所示,图中,我们... 查看详情

stm32呼吸灯,两个led灯,一个快闪一个慢闪

参考技术ASTM32程序:按键长按和短按的判断,用来控制LED灯,有借鉴了其他程序,但是有细节上的不同。短按是切换灯亮的状态,每按一下换一个状态,长按led灯快闪并且指示灯向4靠近,直到等于4是慢闪。如果只做长短按不需... 查看详情

arduino怎么做一个呼吸灯

可以用pwm也就是用模拟输出analogWrite(pin,vol);用循环语句将vol的值逐渐增大再逐渐减小就是呼吸灯了加入适当的延时参考技术A用pwm来搞 查看详情

fpga学习之呼吸灯(代码片段)

目录FPGA学习之呼吸灯FPGA学习之呼吸灯用FPGA实现2s呼吸灯,使其达到由暗变亮再变暗的效果。什么是呼吸灯??呼吸灯是指灯光在微电脑的控制之下完成由亮到暗的逐渐变化,感觉好像是人在呼吸。如何实现呼吸... 查看详情