PWM呼吸灯设计

呼吸灯:
呼吸灯是一种特殊的灯光效果,它可以模拟呼吸的效果,即灯光逐渐由暗变亮再由亮变暗,循环往复。这种效果给人一种柔和、舒缓的感觉,常被应用在装饰、照明和显示等领域。

PWM呼吸灯设计:
在数字电路设计中,通常使用脉宽调制(PWM)技术来实现呼吸灯效果。PWM通过改变信号的高电平时间比例来控制输出的亮度。实现呼吸灯效果的关键是改变PWM的占空比,也就是高电平时间与周期时间的比例。

使用开发板上的四个led灯实现1s间隔的呼吸灯。

代码:

/*
2023.7.13
呼吸灯设计pwm_led
实现1s间隔的呼吸灯
*/
module breath_led(input       wire        clk         ,input       wire        rst_n       ,output      reg[3:0]    led );parameter TIME_US = 6'd49;//50*20ns=1us
parameter TIME_MS = 10'd999;//1us*1000=1ms
parameter TIME_S = 10'd999;//1ms*1000=1sreg [5:0] cnt_us;
reg [9:0] cnt_ms;
reg [9:0] cnt_s;wire add_cnt_us;//us计数器开始计数标志
wire end_cnt_us;//us计数器结束计数标志wire add_cnt_ms;//ms计数器开始计数标志
wire end_cnt_ms;//ms计数器结束计数标志wire add_cnt_s;
wire end_cnt_s;reg flag;//闪烁标志//1us计时器
always @(posedge clk or negedge rst_n) beginif(!rst_n)begincnt_us <= 6'd0;endelse if (add_cnt_us) begin//add_cnt_us 为 1 时开始计数if(end_cnt_us)begin//end_cnt_us 为 1 时为计满,重新置零cnt_us <= 6'd0;endelse begincnt_us <= cnt_us +1'd1;endendelse begincnt_us <= cnt_us;endendassign add_cnt_us = 1'b1;
assign end_cnt_us = add_cnt_us && cnt_us == TIME_US;//1ms计时器
always @(posedge clk or negedge rst_n) beginif(!rst_n)begincnt_ms <= 10'd0;endelse if(add_cnt_ms) beginif(end_cnt_ms) begincnt_ms <= 10'd0;endelse begincnt_ms <= cnt_ms + 1'd1;endendelse begincnt_ms <= cnt_ms;end
endassign add_cnt_ms = end_cnt_us;
assign end_cnt_ms = add_cnt_ms && cnt_ms == TIME_MS;//1s计数器
always @(posedge clk or negedge rst_n) beginif(!rst_n) begincnt_s <= 10'd0;endelse if (add_cnt_s) beginif(end_cnt_s) begincnt_s <= 10'd0;endelse begincnt_s <= cnt_s + 1'd1;endendelse begincnt_s <= cnt_s;end
endassign add_cnt_s = end_cnt_ms;
assign end_cnt_s = add_cnt_s && cnt_s == TIME_S;//flag值判断
always @(posedge clk or negedge rst_n) beginif(!rst_n) beginflag <= 1'b0;endelse if(end_cnt_s) begin//1s取反flag <= ~flag;endelse beginflag <= flag;end
endalways @(posedge clk or negedge rst_n) beginif(!rst_n) beginled <= 4'b0000;endelse beginif(flag == 1'b1)begin//电亮led <= (cnt_s > cnt_ms) ? 4'b1111 : 4'b0000;endelse beginled <= (cnt_s > cnt_ms) ? 4'b0000 : 4'b1111;endend
endendmodule 

测试文件:

`timescale 1ns/1ns
module breath_led_tb();reg clk;reg rst_n;wire [3:0] led;parameter CYCLE = 20;parameter TIME_US = 5;parameter TIME_MS = 10;parameter TIME_S = 10;always #(CYCLE/2) clk = ~clk;initial beginclk = 1'b0;rst_n = 1'b0;//开始复位#(CYCLE);rst_n = 1'b1;//结束复位#((TIME_US + 1)*(TIME_MS + 1)*(TIME_S + 1)*CYCLE*2);$stop;endbreath_led #(.TIME_US    (TIME_US),.TIME_MS    (TIME_MS),.TIME_S     (TIME_S))u_breath_led(.clk    (clk),.rst_n  (rst_n),.led    (led));endmodule 

我们通过modelsim仿真结果如下:
在这里插入图片描述
其中我们能清晰看出在flag值为0的时候,高电平时间比例越来越小,说明灯在逐渐熄灭,在flag值为1的时候,高电平时间比列越来越大,说明灯在逐渐电亮。

结果展示:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/26462.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构 ~ 树

什么是树 - tree 一种分层数据的抽象模型&#xff1b; 如&#xff1a;DOM、级联选择、树形控件&#xff0c;js 中没有树 可以用 Object 构建树&#xff1a; const tree {val: a,children: [{val: a-1,children: [{val: a-1-1,children: []}]},{val: a-2,children: [{val: a…

CMS垃圾收集器三色标记-JVM(十二)

上篇文章说了CMS垃圾收集器是赋值清除&#xff0c;所以他不可以碎片整理&#xff0c;于是jvm支持两个参数&#xff0c;几次fullGC之后碎片整理压缩空间。Cms他会抢占cpu资源&#xff0c;因为是并行运行&#xff0c;所以会有浮动垃圾。还有执行不确定性&#xff0c;垃圾收集完&a…

VsCode添加Vue模版代码片段

文章目录 VsCode添加Vue模版代码片段1. 复制一段已有要制作模板的Vue代码&#xff0c;比如&#xff1a;2. 粘贴到下方链接的工具网站&#xff0c;可自动生成模板代码的片段3. VsCode中设置代码片段3-1 打开菜单&#xff1a;首选项-用户片段3-2 出现如下的搜索栏&#xff0c;搜索…

Ubuntu下搭建Redis主从集群

目录 准备实例和配置 开启主从关系 测试配置 搭建的主从集群结构&#xff0c;只有主服务器与客户端进行写操作&#xff0c;通过主从同步数据&#xff0c;从服务器向客户端提供读操作 共包含三个节点&#xff0c;一个主节点&#xff0c;两个从节点。 这里我们会在同一台虚拟机…

2023最新软件测试面试题(带答案)

1. 请自我介绍一下(需简单清楚的表述自已的基本情况&#xff0c;在这过程中要展现出自信&#xff0c;对工作有激情&#xff0c;上进&#xff0c;好学) 面试官您好&#xff0c;我叫###&#xff0c;今年26岁&#xff0c;来自江西九江&#xff0c;就读专业是电子商务&#xff0c;毕…

54、Mysql索引的数据结构,各自优劣

Mysql索引的数据结构&#xff0c;各自优劣 索引的数据结构和具体存储引擎的实现有关在MySQL中使用较多的索引有Hash索引&#xff0c;B树索引等InnoDB存储引擎的默认索引实现为: B树索引。对于哈希索引来说&#xff0c;底层的数据结构就是哈希表&#xff0c;因此在绝大多数需求…

MySQL 备份和还原

目录 一、数据备份的重要性 二、数据库备份类型 2.1 物理备份 2.2 逻辑备份 1.完全备份 2.差异备份 3.增量备份 三、常见的备份方法 3.1 物理冷备 3.2 专用备份工具 mysqldump 或 mysqlhotcopy 3.3 启用二进制日志进行增量备份 3.4 第三方工具备份 四、MySQL完全备份…

校园跑腿小程序怎么做

校园跑腿小程序是为了方便学生在校园内解决各类需求而设计的一款应用程序。该小程序具有多种功能&#xff0c;包括校园跑腿、二手市场、骑手接单、校园表白墙、下单支付、学校代理以及佣金抽成等。 1. 校园跑腿&#xff1a; 该小程序提供校园内的跑腿服务&#xff0c;学生可以…

windows11 安装cuda和cudnn深度学习开发环境

首先先要确认自己的显卡最高能支持到cuda的版本&#xff0c;一般是不限制版本号的。 然后在官网地址下载&#xff1a; cuDNN的官网下载地址&#xff1a;cuDNN Archive | NVIDIA Developer CUDA 的下载地址&#xff1a;CUDA Toolkit Archive | NVIDIA Developer 有一点需要注…

微服务负载均衡器RibbonLoadBalancer实战

1.负载均衡介绍 负载均衡&#xff08;Load Balance&#xff09;&#xff0c;其含义就是指将负载&#xff08;工作任务&#xff09;进行平衡、分摊到多个操作单元上进行运行&#xff0c;例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等&#xff0c;从而协同…

【MongoDB实战】数据备份与恢复

场景&#xff1a; 需求&#xff1a; 解决方案&#xff1a; 步骤&#xff1a; Stage 1&#xff1a;【生产环境】修改备份文件映射 Stage 2&#xff1a;【生产环境】重新构建mongodb Stage 3&#xff1a;【客户环境】修改备份文件映射&#xff0c;同 Stage 1 Stage 4&#…

vue 如何发布并部署到服务器

一般情况npm run build即可 从而生成vue代码直接放到服务器即可 这里的具体情况要看package.json里面的配置从而使用命令 会生成dist就是该项目的发布包