PWM呼吸灯设计

news2024/11/24 14:37:36

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

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=1s

reg [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) begin
    if(!rst_n)begin
        cnt_us <= 6'd0;
    end

    else if (add_cnt_us) begin//add_cnt_us 为 1 时开始计数
        if(end_cnt_us)begin//end_cnt_us 为 1 时为计满,重新置零
            cnt_us <= 6'd0;
        end
        else begin
            cnt_us <= cnt_us +1'd1;
        end
    end

    else begin
        cnt_us <= cnt_us;
    end
    
end

assign add_cnt_us = 1'b1;
assign end_cnt_us = add_cnt_us && cnt_us == TIME_US;



//1ms计时器
always @(posedge clk or negedge rst_n) begin
    if(!rst_n)begin
        cnt_ms <= 10'd0;
    end
    else if(add_cnt_ms) begin
        if(end_cnt_ms) begin
            cnt_ms <= 10'd0;
        end
        else begin
            cnt_ms <= cnt_ms + 1'd1;
        end
    end
    else begin
        cnt_ms <= cnt_ms;
    end
end

assign 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) begin
    if(!rst_n) begin
        cnt_s <= 10'd0;
    end
    else if (add_cnt_s) begin
        if(end_cnt_s) begin
            cnt_s <= 10'd0;
        end
        else begin
            cnt_s <= cnt_s + 1'd1;
        end
    end
    else begin
        cnt_s <= cnt_s;
    end
end

assign 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) begin
    if(!rst_n) begin
        flag <= 1'b0;
    end
    else if(end_cnt_s) begin//1s取反
        flag <= ~flag;
    end
    else begin
        flag <= flag;
    end
end

always @(posedge clk or negedge rst_n) begin
    if(!rst_n) begin
        led <= 4'b0000;
    end
    else begin
        if(flag == 1'b1)begin//电亮
             led <= (cnt_s > cnt_ms) ? 4'b1111 : 4'b0000;
        end
        else begin
            led <= (cnt_s > cnt_ms) ? 4'b0000 : 4'b1111;
        end
    end
end

endmodule 

测试文件:

`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 begin
        clk = 1'b0;
        rst_n = 1'b0;//开始复位
        #(CYCLE);
        rst_n = 1'b1;//结束复位
        #((TIME_US + 1)*(TIME_MS + 1)*(TIME_S + 1)*CYCLE*2);
        $stop;
    end

    breath_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.coloradmin.cn/o/751001.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows搭建Nginx实现RTMP转为HLS流

所需软件 nginx-1.7.11.3-Gryphon&#xff08;这个包含必须的RTMP模块&#xff0c;普通的Ngxin没有这个&#xff09;ffmpegVLC 配置Nginx 1为Nginx配置RTMP和HLS 这里定义了一个叫live的RTMP路径。同时设置其开启HLS功能&#xff0c;那么所有推送到这个地址的RTMP流都会自动生…

AWS MSK集群认证和加密传输的属性与配置

通常&#xff0c;身份认证和加密传输是两项不相关的安全配置&#xff0c;在Kafka/MSK上&#xff0c;身份认证和加密传输是有一些耦合关系的&#xff0c;重点是&#xff1a;对于MSK来说&#xff0c;当启用IAM, SASL/SCRAM以及TLS三种认证方式时&#xff0c;TLS加密传输是必须的&…

C++STL库中的string

文章目录 STL库对于string类的介绍 string常用接口 string类的模拟实现 string对象大小的计算 写时拷贝 前言 C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c;但是这些库函数与字…

青龙面板集合仓库(不断更新)青龙面板,京东定时任务库,脚本库大全

文章目录 文章目录前言简易一键安装脚本库最新京东比价小插件 文章目录 前言 Faker维护仓库&#xff0c;本地sign保证CK安全防泄漏&#xff0c;收集全网目前能正常使用的脚本。 全网能用的&#xff0c;本仓库都有。有问题进群反馈。 简易一键安装 最新版青龙有可能造成脚本…

软件测试技能提升自学,如何学?

又到了年底&#xff0c;对于我们测试同学来说&#xff0c;多多少少会立一些flag。我已经被连续打脸了好几年&#xff0c;生活为什么总是这么不易&#xff1f;好了&#xff0c;不扯远了&#xff0c;我们今天的主题是自学的那些事。 学习新的技能我相信是每一个测试同学都要面对…

使用MFC CAD 的一些使用方式记录【追加ing】

1. 项目调试&#xff1a;由于项目很大&#xff0c;因此&#xff0c;我们调试的时候&#xff0c;不应该编译整个软件而是应该只编译对应的 类去做处理 2. debug 设置断点方面&#xff1a; 以往我们的操作都是在.exe直接执行文件上进行操作&#xff0c;但是&#xff0c;现在&am…

解决虚拟机安装debian系统报错The failing step is: Select and install software

一波三折&#xff0c;一直卡在这一步&#xff0c;总是到不了流行度调查以及选择软件的界面。 下面是最终正确的步骤&#xff1a; 1&#xff0c;镜像源选项选择yes&#xff1b; 2&#xff0c;镜像源地区选择china&#xff1b; 3&#xff0c;镜像源地址可选mirrors.163.com&am…

Linux离线安装Jenkins、Maven、Gitlab、Git,部署Java项目

安装Java 《Linux安装java》 安装Maven 把Maven上传到Linux服务器/data/目录下进行解压 cd /data/ && tar -zxvf apache-maven-3.9.3-bin.tar.gz配置环境变量 vim /etc/profile找到export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL在下面追加 # mave…

【C语言】约分最简式

题目描述&#xff1a; 分数可以表示为分子/分母的形式。编写一个程序&#xff0c;要求用户输入一个分数&#xff0c;然后将其约分为最简分式。最简分式是指分子和分母不具有可以约分的成分了。如6/12可以被约分为1/2。当分子大于分母时&#xff0c;不需要表达为整数又分数的形…

基于 JIT 技术的开源全场景高性能 JSON 库

大家好&#xff0c;我是Mandy&#xff0c;上一节我们对Go中的切片数据类型进行了深度的剖析&#xff0c;今天给大家分享一个字节跳动自研开源的JSON数据解析包。一个速度奇快的 JSON 序列化/反序列化库&#xff0c;由 JIT &#xff08;即时编译&#xff09;和 SIMD &#xff08…

基于亚博K210开发板——LED(RGB)点灯

文章目录 开发板实验目的实验准备查看原理图软件对应SDKGPIO配置函数什么是 FPIOA 呢 实验代码LED/RGB驱动主程序控制 实验结果 开发板 实验目的 实现开发板上LED0、LED1以及RGB灯的点亮 实验准备 查看原理图 K210 开发板出厂默认已经焊接好 LED0 和 LED1。LED0 连接的是 IO…

Acrel-1000DP分布式光伏系统在重工企业的应用

安科瑞 崔丽洁 摘 要&#xff1a;分布式光伏发电特指在用户场地附近建设&#xff0c;运行方式以用户侧自发自用、余电上网&#xff0c;且在配电系统平衡调节为特征的光伏发电设施&#xff0c;是一种新型的、具有广阔发展前景的发电和能源综合利用方式&#xff0c;它倡导就近发电…

2D、3D机器视觉各有优势与局限,融合应用将成工业领域生产新方式

在智能制造的浪潮中&#xff0c;制造行业生产线亟需转型升级&#xff0c;为国内机器视觉市场释放出了惊人的机器视觉技术及产品需求。在自动化工业质量控制和在线检测领域&#xff0c;2D机器视觉与3D机器视觉都具有重要的作用。那在机器视觉自动化场景中该如何选择合适的机器视…

udp传输大数据的原理和相关问题注意事项

UDP协议本身不提供大数据传输的分片、重组、丢包重传等功能&#xff0c;因此需要对大数据传输进行特殊处理。以下是UDP传输大数据一些常见的处理方法。 &#xff08;1&#xff09;对大文件进行分块&#xff1a;将大文件划分为多个小块进行传输&#xff0c;每个小块都可以使用UD…

机器学习指标计算

一、有如下图 accuracy accuracy T P T N T P T N F P F N \text { accuracy }\frac{T PT N}{T PT NF PF N} accuracy TPTNFPFNTPTN​ accuracy指的是正确预测的样本数占总预测样本数的比值&#xff0c;它不考虑预测的样本是正例还是负例,考虑的是全部样本。 precision&…

【Ubuntu源码安装PostgreSQL】

Ubuntu源码安装PostgreSQL 1. PostgreSQL官网下载压缩包2. 解压&安装2.1 解压文件2.2 安装依赖2.3 执行安装2.4 执行安装2.5 添加路径到文件 3. 初始化数据库与使用3.1 初始化数据库3.2 启动数据库服务3.3 启动数据库 1. PostgreSQL官网下载压缩包 下载地址&#xff1a;ht…

基于linux下的高并发服务器开发(第一章)- 动态库加载失败的原因1.7

01 / 动态库的制作 02 / 工作原理 静态库&#xff1a;GCC进行链接时&#xff0c;会把静态库中代码打包到可执行程序中动态库&#xff1a;GCC进行链接时&#xff0c;动态库的代码不会被打包到可执行程序中程序启动之后&#xff0c;动态库会被动态加载到内存中&#xff0c;通过 …

Spring Cloud之Config分布式配置应⽤

. 右键⽗⼯程【 yx-parent 】选择【 New 】 - 【 Module 】选项&#xff0c;然后选择创建【 Maven 】类型项⽬&#xff08;不勾选模 板&#xff09;&#xff0c;将项⽬名称设置为【yx-cloud-config 】。 在yx-cloud-config⼯程的pom.xml⽂件中引⼊以下依赖坐标&#xff08;需要…

AI原生云向量数据库Zilliz Cloud查看备份快照和恢复备份

目录 快照状态 查看快照详情 相关文档 本文介绍如何查看已创建的快照信息。您可以手动或自动创建快照。 快照状态 根据不同场景,快照可能会处于如下状态: 创建中 如果快照处于此状态,则无法创建其他快照。但您可以单击操作列中的更多按钮,然后选择取消来终止创建过程。…

SpringCloud——分布式请求链路跟踪Sleuth

安装运行zipkin SpringCloud从F版已不需要自己构建Zipkin Server&#xff0c;只需要调用jar包即可 https://dl.bintray.com/oenzipkin/maven/io/zipkin/java/zipkin-server/ 下载&#xff1a;zipkin-server-2.12.9-exec.jar 运行&#xff1a;java -jar zipkin-server-2.12.9-e…