PWM(脉宽调制)——LED特效呼吸灯设计
简述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。
设计图如上所示,完后就可以照图施工了,附上部分代码。
//延时1us
always @(posedge mclk or negedge rst_n)
begin
if(!rst_n)
cnt1 <= 'b0;
else if(cnt1 < STOP_50 - 'b1)
cnt1 <= cnt1 + 'b1;
else
cnt1 <= 'b0;
end
assign delay_1us = (cnt1 == STOP_50 - 'b1)?1'b1:'b0; //延时1ms
always @(posedge mclk or negedge rst_n)
begin
if(!rst_n)
cnt2 <= 'b0;
else if(delay_1us)
begin
if(cnt2 < STOP_1000 - 'b1)
cnt2 <= cnt2 + 'b1;
else
cnt2 <= 'b0;
end
end
assign delay_1ms = ((delay_1us == 'b1) && (cnt2 == STOP_1000 - 1'b1))?'b1:1'b0; //延时1s
always @(posedge mclk or negedge rst_n)
begin
if(!rst_n)
cnt3 <= 'b0;
else if(delay_1ms)
begin
if(cnt3 < STOP_1000 - 'b1)
cnt3 <= cnt3 + 'b1;
else
cnt3 <= 'b0;
end end
assign delay_1s = ((delay_1ms == 'b1) && (cnt3 == STOP_1000 - 1'b1))?'b1:1'b0; //state change
always @(posedge mclk or negedge rst_n)
begin
if(!rst_n)
display_state <= 'b0;
else if(delay_1s)//每一秒切换一次led灯显示状态
display_state <= ~display_state;
else
display_state <= display_state;
end //pwm信号的产生
always @(posedge mclk or negedge rst_n)
begin
if(!rst_n)
pwm <= 'b0;
else
case(display_state)
'b0: pwm <= (cnt2 < cnt3)?1'b1:'b0;
'b1: pwm <= (cnt2 < cnt3)?1'b0:'b1;
default: pwm <= pwm;
endcase
end //位拼接使得输出八位led呼吸灯
assign led_out = {{pwm}};
产生的pwm信号原来是一位的,所以最后要是需要控制多个LED的亮灭,使用一个位拼接运算即可,如最后一行代码所示。
转载请注明出处:NingHeChuan(宁河川)
个人微信订阅号:NingHeChuan
如果你想及时收到个人撰写的博文推送,可以扫描左边二维码(或者长按识别二维码)关注个人微信订阅号
知乎ID:NingHeChuan
微博ID:NingHeChuan
原文地址:http://www.cnblogs.com/ninghechuan/p/6291499.html
PWM(脉宽调制)——LED特效呼吸灯设计的更多相关文章
- STM8S003F3通过PWM波实现三基色呼吸灯(转)
源: STM8S003F3通过PWM波实现三基色呼吸灯
- 【microPython与esp8266】之一——呼吸灯与PWM
呼吸灯与pwm pwm是什么? PWM的全称是脉冲宽度调制(Pulse-width modulation),是通过将有效的电信号分散成离散形式从而来降低电信号所传递的平均功率的一种方式: 简而言之,使 ...
- 浅浅的分析LED呼吸灯的实现和PWM的关系
前言 在本周,我们在python课上做了一个实验,用ARDUINO使小LED灯模仿出呼吸灯的效果,实验进行的很成功,但是机器当仅输出高/低电平的时候是怎么样才能做到渐亮渐暗(输出电压)的变化呢?在这里 ...
- 利用PWM脉宽调制实现呼吸灯
1.设计目标 完成一个呼吸灯,从亮到灭的时间为2秒,从灭到亮的时间为2秒,以此不断往复. 2.设计步骤 2.1设计分析 利用PWM(脉冲宽度调制)实现led灯亮度的变化,只需要改变占空比就可以实现,具 ...
- Arduino系列之pwm控制LED灯(呼吸灯)
下面我将写出最简单控制呼吸灯的方法 void setup() // { pinMode(12,OUTPUT); ...
- [FPGA]Verilog利用PWM调制巧妙完成RGB三色彩虹呼吸灯(给简约的题目以美妙的解答)
概述 实现彩虹呼吸灯 题目就是这么简短,但这是目前我碰到的最有意思的一道题目,因为他有无数种解决方法,并且每一种都是那么高级或者巧妙,比如 可以利用3路不同初相的PWM调制信号驱动三颗RGB灯重叠呼吸 ...
- ZYNQ自定义AXI总线IP应用——PWM实现呼吸灯效果
一.前言 在实时性要求较高的场合中,CPU软件执行的方式显然不能满足需求,这时需要硬件逻辑实现部分功能.要想使自定义IP核被CPU访问,就必须带有总线接口.ZYNQ采用AXI BUS实现PS和PL之间 ...
- 【iCore4 双核心板_ARM】例程八:定时器PWM实验——呼吸灯
实验原理: STM32的定时器有PWM功能,iCore4的蓝色LED连接在定时器的输出接口上, 可以通过定时器的PWM输出控制LED的亮度,从而实验呼吸灯的功能. 核心代码: int main(voi ...
- 【.NET 与树莓派】PWM 调节LED小灯的亮度
在开始本文内容之前,老周先纠正一个错误.在上一篇中,提到过 Arduino 开发板的 Vin 引脚,文中老周说这个供电口的输入电压不能高于 5.5V.这里有错,被卖家给的使用说明忽悠了,上 Ardui ...
随机推荐
- PHP 领域模型与数据库映射文章
1. http://blog.csdn.net/happen_zhang/article/details/12761747 2. http://blog.csdn.net/hguisu/article ...
- [iOS]C语言技术视频-06-程序循环结构(for{})
下载地址: 链接: http://pan.baidu.com/s/1dD11Zwt 密码: rke9
- HTML5绘制矩形和圆形并且还有获取在这个图层内的坐标的思路和代码 - feilong_12的专栏 - 博客频道 - CSDN.NET
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
- 神经网络 Neuroph - Java Neural Network Platform Neuroph
http://neuroph.sourceforge.net/image_recognition.html https://github.com/neuroph/neuroph
- shell vim--处理二进制文本
1 使用vim -b :%!xxd 参考:http://www.cnblogs.com/killkill/archive/2010/06/23/1763785.html 2 使用xxd命令 htt ...
- 【转】C++中this指针的用法详解
1.this指针的用处 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果.this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象 ...
- 重启机器解决SSL都要输入密码问题
在Nginx或Apache设置了SSL加密后,发现每次重启服务器后都要输入证书设置的密码,比较麻烦,不然Nginx或Apache无法使用,这时可以用私钥来做这件事.生成一个解密的key文件,替代原来k ...
- IOS FMDB模糊查询
http://blog.sina.com.cn/s/blog_9630f1310101fx1d.html /查询记录 -(NSArray*)selectitemDream_desc:(JiemengS ...
- iOS开发者的福利 — — iOS9+Xcode7免越狱免证书直接调试
苹果发布Xcode7后, 开放了普通的AppleID也能真机调试( 非$99 或 $299, 只要能上AppStore下载应用的AppleID就行),下面教你具体做法,很简单的. 1.运行Xcode, ...
- python threading模块中对于信号的抓取
最近的物联网智能网关(树莓派)项目中遇到这样一个问题:要从多个底层串口读取发来的数据,并且做出相应的处理,对于每个串口的数据的读取我能想到的可以采用两种方式: 一种是采用轮询串口的方式,例如每3s向每 ...