FPGA的呼吸灯实现

news/2024/11/17 10:01:44/

呼吸灯的实现原理过去在初学电子技术的我的脑中一直是一个迷,后来知道了有PWM脉冲宽度调制这么一个方法可以实现呼吸灯,无奈因为本人过懒,没有在开发板上敲过呼吸灯的代码。恰巧本人最近在学FPGA,里面有一课专门讲呼吸灯,看来这次势必要敲一个呼吸灯的代码出来了。

1.设计思路

给LED灯输入PWM波,期间改变占空比即可实现呼吸灯的效果

假设
输入占空比为0%的PWM波 对应亮度为0%
输入占空比为33%的PWM波 对应亮度为33%
输入占空比为66%的PWM波 对应亮度为66%

PWM波占空比改变越细腻 呼吸灯的效果就越好

2.系统框图

在这里插入图片描述

3.代码

文章编辑器竟然没法添加Verilog代码 关键字高亮无法显示 晕

//设计文件
module breath_led(input clk,input res_n,output led);
reg [15:0] period_cnt;//1KHz
reg [15:0] duty_cycle;
reg        inc_dec_flag;//0为上升,1为下降assign led=(period_cnt>=duty_cycle)?1'b1:1'b0;always@(posedge clk or negedge res_n)beginif(!res_n)period_cnt<=16'd0;else if(period_cnt==16'd50000)period_cnt<=16'd0;elseperiod_cnt<=period_cnt+1'd1;
endalways@(posedge clk or negedge res_n)beginif(!res_n)beginduty_cycle<=1'd0;inc_dec_flag<=1'b0;endelse beginif(period_cnt==16'd50000)beginif(inc_dec_flag==1'b0)beginif(duty_cycle==16'd50000)inc_dec_flag=1'b1;elseduty_cycle<=duty_cycle+16'd25;endelse beginif(duty_cycle==16'd0)inc_dec_flag=1'b0;elseduty_cycle<=duty_cycle-16'd25;end         endend    
end
endmodule
//testbench文件
`timescale 1ns / 1nsmodule breath_led_tb();reg clk;
reg res_n;
wire led;breath_led breath_led(.clk(clk),.res_n(res_n),.led(led));always #20 clk=~clk;    initial begin
clk=1'b1; 
res_n=1'b0; 
#200
res_n=1'b1; 
endendmodule

4.代码讲解

assign led=(period_cnt>=duty_cycle)?1’b1:1’b0;

Verilog语言是并行执行,所以通过改变duty_cycle的值,再与period_cnt进行比较,即可改变输入LED灯的PWM方波占空比,实现呼吸灯效果。

5.仿真结果

可以看到led信号的占空比随着时间的推移而改变
在这里插入图片描述


http://www.ppmy.cn/news/701103.html

相关文章

定时器实现呼吸灯

文章目录 一.PWM介绍1.含义2.基本原理3.优点及应用范围 二.STM32上的PWM1.PWM产生2.PWM的一个周期 三.stm32cubeMX建立工程1.配置SYS和RCC2.配置定时器3.配置时钟树4.生成keil文件 四.添加代码1.定义变量2.使能TIM3、TIM4的PWM Channel1 输出3.在while循环中添加代码 五.线路连…

基于FPGA的呼吸灯设计

一&#xff1a;背景介绍&#xff1a; 网上类似的标题很多&#xff0c;有一些呼吸灯的设计是基于单片机的&#xff0c;还有一部分设计是基于FPGA的&#xff0c;我也一时手痒&#xff0c;将这两天自己重新写的verilog描述语句晒出来&#xff0c;免得压箱底放久了&#xff0c;出现…

FPGA入门(一)--呼吸灯

呼吸灯主要是利用PWM的方式&#xff0c;在固定的频率下&#xff0c;通过调整占空比的方式来控制LED灯的亮度的变化&#xff0c;从而实现由暗渐亮再由亮渐暗的过程。 呼吸灯的整个FPGA实现流程主要由四个模块组成&#xff0c;分别是计数器模块&#xff0c;调节值产生模块&#x…

Verilog实现呼吸灯效果

呼吸灯的效果采用PWM调波的形式&#xff0c;即快速的改变每个周期的占空比&#xff08;一个周期内高电平时间占一个周期时间的比值&#xff09;来实现点亮到熄灭的效果。示意如下图 而关于整个波形图&#xff0c;用50MHz的晶振&#xff0c;从0开始计数到49则为1us。 而1ms是1u…

android 关闭按键灯,安卓永久关闭键盘灯的方法

安卓永久关闭键盘灯的方法 用RE管理器进入到/system 1.在system里新建文件&#xff0c;文件名为“关灯.sh” ,注意&#xff0c;后缀一定为 .sh 2.输入下面的代码 chmod 666 /sys/class/leds/button-backlight/brightness echo 0 >/sys/class/leds/button-backlight/brightne…

通过矩阵键盘,用PWM来实现呼吸灯的效果

任务如标题&#xff0c;但是这个程序我现在并没有写对&#xff0c;先发上来&#xff0c;等到以后自己能找到问题了在进行修改 #include <hidef.h> /* common defines and macros */ #include "derivative.h" /* derivative-specific definitions */…

基于Verilog实现呼吸灯

时间的单位换算 首先掌握秒的单位换算&#xff0c;这里总结一些。因为笔者目前用的大多为50MHz&#xff0c;所以介绍以此为例。但关于秒的转换全世界都是一样的。 1MHz 1,000kHz 1,000,000Hz 频率&#xff1a;是用单位时间内完成的周期性变化的次数&#xff0c;是描述周期…

led实现呼吸灯

1.呼吸灯原理就是要让led灯的亮灭时间不同&#xff0c;需要多个计数器实现。从1us到1s钟&#xff0c;改变led呼吸灯的触发条件。 2.依旧把程序写出来&#xff0c;这次在写计数器的时候&#xff0c;发现自己很大问题&#xff0c;就是计数器条件写不全。要不就是只写计数不清零&a…