当前位置: 首页 > news >正文

FPGA开发——呼吸灯的设计

一、原理

       呼吸灯的原理主要基于‌PWM(脉冲宽度调制)技术,通过控制LED灯的占空比来实现亮度的逐渐变化。这种技术通过调整PWM信号的占空比,即高电平在一个周期内所占的比例,来控制LED灯的亮度。当占空比从0%逐渐变化到100%,再从100%变化回0%,就实现了灯光亮度由暗到亮,再由亮到暗的循环变化,模拟了人的呼吸效果。‌

       具体来说,PWM信号的周期是固定的,通过改变高电平的时间长度(即占空比),可以控制LED灯的亮度。例如,当占空比为0%时,LED灯不亮;当占空比为100%时,LED灯最亮。通过编程或微电脑控制,可以实时调整这些参数,从而实现灯光亮度的动态变化。‌

       此外,还有一些非PWM的实现方式,例如通过编程控制亮和灭的时间比例,虽然这种方法较为复杂且可能不如PWM技术普及,但它提供了一种不同的实现思路。总的来说,PWM技术因其简单有效和广泛的应用支持,是实现呼吸灯的主要技术手段。‌

二、实现思路

       这里我们在设计的时候采用三个周期计数器,分别是us级,ms级以及s级计数器,通过对开发板系统时钟的20ns进行分频,接着实现us计数器的设计,最后利用us计数器实现毫秒计数器,利用ms计数器实现s计数器的方法逐一完成三个计数器,最后的占空比的调整是在ms计数器进行里面设置。在计数器设计好之后利用s级计数器对于状态标志进行一个设定,用于实现呼吸灯状态的改变标志。最后实现呼吸灯的相关功能。(这里实现的是2s的呼吸灯)

三、代码编写

设计文件

module led(input clk,input rst_n,output  reg [3:0] led_out
);//参数定义
parameter TIME_2us=1_000_000;
parameter TIME_2ms=1000-1;
parameter TIME_2s=1000-1;//内部信号定义
reg  [6:0]  cnt_us;
reg  [9:0]  cnt_ms;
reg  [26:0]  cnt_s;
reg          flag;//呼吸灯亮灭标志位
wire        add_cnt_us;
wire        end_cnt_us;
wire        add_cnt_ms;
wire        end_cnt_ms;
wire        add_cnt_s;
wire        end_cnt_s;//2us计数器
always @(posedge clk or negedge rst_n)begin if(!rst_n)cnt_us<= 0;else if(add_cnt_us)beginif(end_cnt_us)cnt_us<=0;elsecnt_us<= cnt_us+1'b1;end 
end 
assign add_cnt_us = 1'b1;
assign end_cnt_us = (cnt_us==7'd99) && add_cnt_us;//ms计数器
always @(posedge clk or negedge rst_n)begin if(!rst_n)cnt_ms<= 0;else if(add_cnt_ms)beginif(end_cnt_ms)cnt_ms<=0;elsecnt_ms<= cnt_ms+1'b1;end 
end 
assign add_cnt_ms = end_cnt_us;
assign end_cnt_ms = add_cnt_ms && (cnt_ms==TIME_2ms);//s计数器
always @(posedge clk or negedge rst_n)begin if(!rst_n)cnt_s<= 0;else if(add_cnt_s)beginif(end_cnt_s)cnt_s<=0;elsecnt_s<= cnt_s+1'b1;end 
end 
assign add_cnt_s = end_cnt_ms;
assign end_cnt_s = add_cnt_s && (cnt_s==TIME_2s);//flag亮灭状态描述
always @(posedge clk or negedge rst_n)beginif(!rst_n)flag<= 0;else if(end_cnt_s)flag<=~flag;elseflag<= flag;
end//功能实现
always @(posedge clk or negedge rst_n)beginif(rst_n==1'b0)led_out <= 4'b0000;// 由灭到亮else if((flag == 1'b0)&&(cnt_s <= cnt_ms))led_out <= 4'b0000;else if((flag == 1'b0)&&(cnt_s > cnt_ms))led_out <= 4'b1111;// 由亮到灭else if((flag == 1'b1)&&(cnt_s < cnt_ms))led_out <= 4'b1111;	else if((flag == 1'b1)&&(cnt_s >= cnt_ms))led_out <= 4'b0000;elseled_out <= led_out;
end endmodule

测试文件的编写

//定义时间尺度
`timescale 1ns/1ps
module led_tb();//重定义
defparam  led_inst.TIME_2us=10;
defparam  led_inst.TIME_2ms=10;
defparam  led_inst.TIME_2s=10;//内部变量定义
reg clk;
reg rst_n;
wire  led_out;//模块实例化
led led_inst(/*input              */ .rst_n    (rst_n     ),/*input            */ .clk      (clk       ),/*output reg [3:0] */ .led_out  (led_out   )
);//时钟
parameter CLK_CLY =20;
initial clk=0;
always  #(CLK_CLY/2) clk=~clk;//复位
initial beginrst_n =1'b0;#(CLK_CLY*2);#3;rst_n =1'b1;
end 
//激励endmodule

四、仿真波形图

由于我们设置的计数器技术周期和系统的周期相差过大,所以在测试文件中进行重定义来更好在波形途中观察ms周期中高低占空比的改变。

 通过波形图我们可以观察到低电平从最开始的100%慢慢变成0%,最后又会从0%变为100%,高电平从最开始的0%慢慢变成100%,最后又会从100%变为0%(这里,0000和1111的频率占空比),这里的波形图位置有限,没有拍完。

受格式的影响,这里就不放下板之后的效果,最终实现的效果就是4个LED会由暗变为亮,在由亮变暗的呼吸灯效果。

相关文章:

FPGA开发——呼吸灯的设计

一、原理 呼吸灯的原理主要基于‌PWM&#xff08;脉冲宽度调制&#xff09;技术&#xff0c;通过控制LED灯的占空比来实现亮度的逐渐变化。这种技术通过调整PWM信号的占空比&#xff0c;即高电平在一个周期内所占的比例&#xff0c;来控制LED灯的亮度。当占空比从0%逐渐变化到1…...

【数据结构】二叉树链式结构——感受递归的暴力美学

前言&#xff1a; 在上篇文章【数据结构】二叉树——顺序结构——堆及其实现中&#xff0c;实现了二叉树的顺序结构&#xff0c;使用堆来实现了二叉树这样一个数据结构&#xff1b;现在就来实现而二叉树的链式结构。 一、链式结构 链式结构&#xff0c;使用链表来表示一颗二叉树…...

开始尝试从0写一个项目--后端(三)

器材管理 和员工管理基本一致&#xff0c;就不赘述&#xff0c;展示代码为主 新增器材 表设计&#xff1a; 字段名 数据类型 说明 备注 id bigint 主键 自增 name varchar(32) 器材名字 img varchar(255) 图片 number BIGINT 器材数量 comment VARC…...

2024年7月解决Docker拉取镜像失败的实用方案,亲测有效

在Ubuntu 16.04、Debian 8、CentOS 7系统中&#xff0c;若遇到Docker拉取镜像失败的问题&#xff0c;以下是一些亲测有效的解决方案&#xff1a; 配置加速地址 首先&#xff0c;创建Docker配置目录&#xff1a;sudo mkdir -p /etc/docker然后&#xff0c;编辑daemon.json文件…...

基于内容的音乐推荐网站/基于ssm的音乐推荐系统/基于协同过滤推荐的音乐网站/基于vue的音乐平台

获取源码联系方式请查看文末&#x1f345; 摘 要 随着信息化时代的到来&#xff0c;系统管理都趋向于智能化、系统化&#xff0c;音乐推荐网站也不例外&#xff0c;但目前国内的有些公司仍然都使用人工管理&#xff0c;公司规模越来越大&#xff0c;同时信息量也越来越庞大&…...

STM32智能工业监控系统教程

目录 引言环境准备智能工业监控系统基础代码实现&#xff1a;实现智能工业监控系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;工业监控与优化问题解决方案与优化收尾与总结 1. 引言 智能工业监控系统通…...

WEB渗透Web突破篇-SQL注入(MYSQL)

注释符 # -- 注意这里有个空格 /* hello */ /*! hello */ /*!32302 10*/ MYSQL version 3.23.02联合查询 得到列数 order by或group by 不断增加数字&#xff0c;直到得到报错响应 1 ORDER BY 1-- #True 1 ORDER BY 2-- #True 1 ORDER BY 3-- #True 1 ORDER BY 4-- #Fal…...

PDF解锁网站

https://smallpdf.com/cn/unlock-pdfhttps://smallpdf.com/cn/unlock-pdfhttps://www.freemypdf.comhttps://www.freemypdf.com...

【Redis】主从复制分析-基础

1 主从节点运行数据的存储 在主从复制中, 对于主节点, 从节点就是自身的一个客户端, 所以和普通的客户端一样, 会被组织为一个 client 的结构体。 typedef struct client {// 省略 } client;同时无论是从节点, 还是主节点, 在运行中的数据都存放在一个 redisServer 的结构体中…...

Transformer自然语言处理实战pdf阅读

一.第一章 欢迎来到transformer的世界 1.解码器-编码器框架 在Transformer出现之前&#xff0c;NLP的最新技术是LSTM等循环架构。这些架 构通过在神经网络连接使用反馈循环&#xff0c;允许信息从一步传播到另一 步&#xff0c;使其成为对文本等序列数据进行建模的理想选择。如…...

Python 高阶语法

前言&#xff1a; 我们通过上篇文章学习了Python的基础语法&#xff0c;接下来我们来学习Python的高阶语法 1.初识对象 在Python中我们可以做到和生活中那样&#xff0c;设计表格、生产表格、填写表格的组织形式的 面向对象包含 3 大主要特性&#xff1a;  封装  继承 …...

开始尝试从0写一个项目--前端(三)

器材管理板块 添加器材管理导航 src\views\home\Home.vue src\router\index.js src\views\equipment\Equipment.vue <template><div>hello!</div></template> 测试 搜索导航分页查询 src\views\equipment\Equipment.vue <template><div&…...

Visual stdio code 运行C项目环境搭建

参考 [1]VS Code 配置 C/C 编程运行环境&#xff08;保姆级教程&#xff09;_visual studio code c配置-CSDN博客 [2]最新VS code配置C/C环境(tasks.json, launch.json,c_cpp_properties.json)及运行多个文件、配置Cmake_vscode launch.json如何配置-CSDN博客 先装visual stdi…...

免杀笔记 -->API的整理Shellcode加密(过DeFender)

最近更新频率明显下降我懒&#xff0c;那么今天就来记录一下我们的一些常用的API的整理以及ShellCode的加密。 1.WinAPI整理 问我为什么要整理&#xff1f; 就是用起来的时候要左翻右翻 &#xff1a;&#xff1a; 烦死了 1.VirtualAlloc VirtualAlloc(NULL,sizeof(buf),MEM_…...

Stable Diffusion 使用详解(3)---- ControlNet

背景 炼丹师在AI绘画的过程中&#xff0c;由于Stable Diffusion的原理是水滴式的扩散作图原理&#xff0c;其实在前面也有提到&#xff0c;他的发挥是‘不稳定’的&#xff0c;因为你没有办法做到精确控制&#xff0c;只能说是大致符合你的预期。你不能总依赖抽卡固定随机数种…...

pythonGame-实现简单的贪食蛇游戏

通过python简单复现贪食蛇游戏。 使用到的库函数&#xff1a; import pygame import time import random 游戏源码&#xff1a; import pygame import time import randompygame.init()white (255, 255, 255) yellow (255, 255, 102) black (0, 0, 0) red (213, 50, 80…...

2024年软件系统与信息处理国际会议(ICSSIP 2024)即将召开!

2024年软件系统与信息处理国际会议&#xff08;ICSSIP 2024&#xff09;将于2024年10月25-27日在中国昆明举行。引领技术前沿&#xff0c;共谋创新未来。ICSSIP 2024将汇聚来自世界各地的专家学者&#xff0c;他们将在会上分享最新的研究成果、技术突破及实践经验。会议议题涵盖…...

使用vscode连接开发机进行python debug

什么是debug&#xff1f; 当你刚开始学习Python编程时&#xff0c;可能会遇到代码不按预期运行的情况。这时&#xff0c;你就需要用到“debug”了。简单来说&#xff0c;“debug”就是能再程序中设置中断点并支持一行一行地运行代码&#xff0c;观测程序中变量的变化&#xff…...

(家用)汽车充电桩项目总结分析

1. 项目选题背景 &#xff08;1&#xff09;社招&#xff1a;公司想做这个方向&#xff0c;先让学习测试一下&#xff0c;而且不做Web或者APP&#xff0c;以某一个模块或者某一个部分为主 &#xff08;2&#xff09;非社招&#xff1a;之前在学校做的一个学习的项目 2. 充电…...

JMeter接口测试:测试中奖概率!

介绍 Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具&#xff0c;用于对软件做压力测试。JMeter 最初被设计用于 Web 应用测试&#xff0c;但后来扩展到了其他测试领域&#xff0c;可用于测试静态和动态资源&#xff0c;如静态文件、Java 小服务程序、CGI 脚本、J…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...