首页 > 其他分享 >FPGA知识基础之---呼吸灯实验

FPGA知识基础之---呼吸灯实验

时间:2024-07-29 16:56:57浏览次数:11  
标签:sys cnt FPGA clk 呼吸 --- PWM parameter reg

目录


一、呼吸灯简介

1.定义

呼吸灯是电子设备上的一种指示灯,通过周期性的亮暗变化来提示设备的状态或信息。

2.特点

  • 渐变效果:灯光由亮到暗或由暗到亮逐渐变化,形成柔和的视觉效果。
  • 可定制性:颜色、亮度、变化速度等可以根据需求进行设置和调整。
  • 广泛应用:广泛应用于手机、音响、汽车、电脑等各个领域。

3.工作原理

PWM(脉冲宽度调制)

在这里插入图片描述
通过改变高电平和低电平的占空比时间来达到渐变的效果

二、实验任务

使用开发板上的LED灯来实现呼吸灯的效果,由灭渐亮,然后由亮渐灭(渐亮和渐灭的时间为2s)

三、PVM(Pulse Width Modulation)简介

3.1工作原理

PWM信号是一种方波信号,其占空比(即高电平时间占整个周期时间的比例)可以调整。通过改变占空比,PWM信号可以模拟出不同的电压或电流水平,尽管实际上PWM信号只包含高电平和低电平两种状态。接收端通过滤波电路将PWM信号转换成平滑的直流电压或电流,从而达到模拟控制的效果。

3.2 优点

  • 高效能:PWM技术允许在开关模式下工作,减少了功耗,提高了效率。
  • 灵活性:通过调整占空比,可以轻松改变输出电压或电流,实现精确控制。
  • 简单性:PWM信号的产生和控制相对简单,易于通过微控制器等数字设备实现。
  • 低噪声:相比传统的模拟控制方法,PWM控制可以减少电磁干扰和噪声。

3.3 应用领域

  • 电机控制:PWM广泛应用于直流电机、步进电机和伺服电机的速度控制和方向控制。
  • LED照明:通过调节PWM信号的占空比,可以控制LED灯的亮度,实现调光功能。
  • 电源管理:在电源转换和稳压电路中,PWM技术被用于提高效率和稳定性。
  • 音频放大:在音频放大器中,PWM技术可以用来驱动扬声器,提高音质和效率。

四、程序设计

1、思路整理

在这里插入图片描述

2、系统框图

在这里插入图片描述

3、波形图

在这里插入图片描述

4、呼吸原理

在这里插入图片描述

五、RTL代码

module breath_led(
    input       sys_clk ,      //系统时钟 50MHz
    input       sys_rst_n ,    //系统复位,低电平有效
    
    output reg  led            //LED灯
);

//parameter define
parameter CNT_2US_MAX = 7'd100;    
parameter CNT_2MS_MAX = 10'd1000; 
parameter CNT_2S_MAX  = 10'd1000; 

//reg define
reg [6:0] cnt_2us; 
reg [9:0] cnt_2ms;   
reg [9:0] cnt_2s;     
reg       inc_dec_flag; //亮度递增/递减 0:递增 1:递减



//cnt_2us:计数2us
always@(posedge sys_clk or negedge sys_rst_n) begin
    if(!sys_rst_n)
        cnt_2us <= 7'b0;
    else if(cnt_2us == (CNT_2US_MAX - 7'b1 ))
        cnt_2us <= 7'b0;
    else
        cnt_2us <= cnt_2us + 7'b1;
end

//cnt_2ms:计数2ms
always@(posedge sys_clk or negedge sys_rst_n) begin
    if(!sys_rst_n)
        cnt_2ms <= 10'b0;
    else if(cnt_2ms == (CNT_2MS_MAX - 10'b1) && cnt_2us == (CNT_2US_MAX - 7'b1))
        cnt_2ms <= 10'b0;
    else if(cnt_2us == CNT_2US_MAX - 7'b1)
        cnt_2ms <= cnt_2ms + 10'b1;
    else
        cnt_2ms <= cnt_2ms;
end

//cnt_2s:计数2s
always@(posedge sys_clk or negedge sys_rst_n) begin
    if(!sys_rst_n)
        cnt_2s <= 10'b0;
    else if(cnt_2s == (CNT_2S_MAX - 10'b1) && cnt_2ms == (CNT_2MS_MAX - 10'b1) && cnt_2us == (CNT_2US_MAX - 7'b1))
        cnt_2s <= 10'b0;
    else if(cnt_2ms == (CNT_2MS_MAX - 10'b1) && cnt_2us == (CNT_2US_MAX - 7'b1))
        cnt_2s <= cnt_2s + 10'b1;
    else
        cnt_2s <= cnt_2s;         
end

//inc_dec_flag为低电平,led灯由暗变亮,inc_dec_flag为高电平,led灯由亮变暗
always@(posedge sys_clk or negedge sys_rst_n) begin
    if(!sys_rst_n)
        inc_dec_flag <= 1'b0;
    else if(cnt_2s == (CNT_2S_MAX - 10'b1) && cnt_2ms ==( CNT_2MS_MAX - 10'b1) && cnt_2us == (CNT_2US_MAX - 7'b1))
        inc_dec_flag <= ~inc_dec_flag;
    else
        inc_dec_flag <= inc_dec_flag;
end

//led:输出信号连接到外部的led灯
always@(posedge sys_clk or negedge sys_rst_n) begin
    if(!sys_rst_n)
        led <= 1'b0;
    else if((inc_dec_flag == 1'b1 && cnt_2ms >= cnt_2s) || (inc_dec_flag == 1'b0 && cnt_2ms <= cnt_2s))
        led <= 1'b1;
    else
        led <= 1'b0;
end

endmodule

六、仿真分析

6.1 Testbench代码

`timescale 1ns / 1ns        //仿真单位/仿真精度

module tb_breath_led();

//parameter define
parameter CLK_PERIOD  = 20;       //时钟周期 20ns
parameter CNT_2US_MAX = 7'd2;
parameter CNT_2MS_MAX = 10'd10;
parameter CNT_2S_MAX  = 10'd10;

//reg define
reg           sys_clk;
reg           sys_rst_n;

//wire define
wire          led;

//信号初始化
initial begin
    sys_clk <= 1'b0;
    sys_rst_n <= 1'b0;
    #200
    sys_rst_n <= 1'b1;
end

//产生时钟
always #(CLK_PERIOD/2) sys_clk = ~sys_clk;

//例化待测设计
breath_led #(
    .CNT_2US_MAX     (CNT_2US_MAX),
    .CNT_2MS_MAX      (CNT_2MS_MAX),
    .CNT_2S_MAX       (CNT_2S_MAX)
)u_breath_led(
    .sys_clk          (sys_clk),
    .sys_rst_n        (sys_rst_n),
    .led              (led)
    );

endmodule



6.2 Modelsim仿真波形分析

在这里插入图片描述

在这里插入图片描述

七、上板验证

7.1 RTL原理图

在这里插入图片描述
在这里插入图片描述
因为引脚过多,笔者仅选取了输入输出两部分进行验证

7.2 XDC管教约束文件

#时序约束
create_clock -period 20.000 -name sys_clk [get_ports sys_clk]
#IO引脚约束
#------------------------------系统时钟和复位-----------------------------------
set_property -dict {PACKAGE_PIN R4 IOSTANDARD LVCMOS33} [get_ports sys_clk]
set_property -dict {PACKAGE_PIN U2 IOSTANDARD LVCMOS33} [get_ports sys_rst_n]
#-----------------------------------LED-----------------------------------------
set_property -dict {PACKAGE_PIN R2 IOSTANDARD LVCMOS33} [get_ports {led}]

7.3 综合

在这里插入图片描述
在这里插入图片描述

因为引脚过多,笔者仅选取了输入输出两部分进行验证


标签:sys,cnt,FPGA,clk,呼吸,---,PWM,parameter,reg
From: https://blog.csdn.net/2301_76707170/article/details/140766629

相关文章

  • springboot+vue基于web点餐小程序的个性化推荐演示录像【程序+论文+开题】-计算机毕业
    系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,餐饮业正经历着前所未有的变革。传统餐饮模式逐渐向智能化、数字化转型,其中,基于Web的点餐小程序凭借其便捷性、高效性和广泛的用户覆盖,成为了餐饮行业的重要服务形式。然而,在海量美食信息与多样化消费者需求......
  • [米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-20 读写I2C接口的RTC时钟芯片
    软件版本:Anlogic-TD5.9.1-DR1_ES1.1操作系统:WIN1064bit硬件平台:适用安路(Anlogic)FPGA实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板板卡获取平台:https://milianke.tmall.com/登录"米联客"FPGA社区http://www.uisrc.com视频课程、答疑解惑! 1概述    本节课继续利用I......
  • springboot+vue基于web的中草药信息管理系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着中医药在全球范围内的日益普及与认可,中草药作为中医药体系的核心组成部分,其信息的系统化、标准化管理显得尤为重要。然而,当前市场上缺乏一个全面、便捷且基于Web的中草药信息管理系统,导致中草药信息零散、不易获取,既不利于中医药......
  • [米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-17 I2C通信协议原理
    软件版本:Anlogic-TD5.9.1-DR1_ES1.1操作系统:WIN1064bit硬件平台:适用安路(Anlogic)FPGA实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板板卡获取平台:https://milianke.tmall.com/登录"米联客"FPGA社区http://www.uisrc.com视频课程、答疑解惑! 1概述    我们知道I......
  • [米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-18 I2C MASTER控制器驱动设计
    软件版本:Anlogic-TD5.9.1-DR1_ES1.1操作系统:WIN1064bit硬件平台:适用安路(Anlogic)FPGA实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板板卡获取平台:https://milianke.tmall.com/登录"米联客"FPGA社区http://www.uisrc.com视频课程、答疑解惑! 1系统框图I2CMaster控......
  • 脚本-字体woff做映射表
    fromfontTools.ttLibimportTTFontimportddddocrfromioimportBytesIOfromPILimportImage,ImageDraw,ImageFontdefconvert_cmap_to_image(cmap_code,font_path):img_size=1024img=Image.new("1",(img_size,img_size),255)#创建......
  • vue-simple-uploader 支持分片上传,多文件上传,断点续传等多种功能的文件上传组件
    vue-simple-uploader特性:1、支持文件、多文件、文件夹上传2、支持拖拽文件、文件夹上传3、统一对待文件和文件夹,方便操作管理4、可暂停、继续上传5、错误处理6、支持“快传”,通过文件判断服务端是否已存在从而实现“快传”7、上传队列管理,支持最大并发上传8、分块上传9、......
  • Linux shell mktemp -d命令生成临时文件
    前言全局说明一、说明二、mktemp命令2.1创建临时文件mktemp2.1创建临时目录mktemp-d三、命令行示例mktempll/tmp/tmp.fvi5gFbDgr四、sh脚本使用4.1创建tmpfile=$(mktemp)4.2删除rm"$tmpfile"免责声明:本号所涉及内容仅供安全研究与教学使用......
  • 搭建Home Assistant智能家居系统 - 家庭设备「内网穿透」
     文章目录前言1.安装HomeAssistant2.配置HomeAssistant3.安装cpolar内网穿透3.1windows系统3.2Linux系统3.3macOS系统4.映射HomeAssistant端口5.公网访问HomeAssistant6.固定公网地址6.1保留一个固定二级子域名6.2配置固定二级子域名......
  • flutter开发实战-go_router使用
    flutter开发实战-go_router使用一、go_router介绍与特性go_router是一个Flutter的第三方声明式路由插件,使用路由器API提供一个方便的、基于url的API,用于在不同屏幕之间导航。可以定义URL模式、使用URL导航、处理深度链接以及许多其他与导航相关的场景。GoRouter具有许多......