6039|7

14

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

基于FPGA的呼吸灯 [复制链接]


基于FPGA的呼吸灯

一、目标

1、占空比(pwm)的理解。

2、计数器的应用。

3、分频的应用。

二、要求

四个LED灯从暗逐渐变亮,然后从亮逐渐变暗形成呼吸的效果。

三、思路导航

    要做出呼吸的led(初始值为高电平)要求led的低电平逐渐积累至完全为低电平,然后将生成的改波形取反即可。我们要求LED灯从亮到暗需要2s,期间我们要进行1000份,故每一份为2ms,因此低电平时间为20us,系统时钟为50MHz

四、思路框架

  
file:///C:/Users/wwt/AppData/Local/Temp/msohtmlclip1/01/clip_image002.png
  


五、代码

  
module led_breath(
  
    input       wire            sclk,//50MHz
  
    input       wire            rst_n,//系统复位
  
   
  
    output      wire    [3:0]    led//输出的led
  
);
  
  
parameter   CNT_2US_MAX = 7'd99;//计数20us
  
parameter   CNT_2MS_MAX = 10'd999;//计数2ms
  
parameter   CNT_2S_MAX = 10'd999;//计数2s
  
  
  
reg [6:0]       cnt_2us ;
  
reg              cnt_2us_flag;
  
reg [9:0]       cnt_2ms ;
  
reg              cnt_2ms_flag;
  
reg [9:0]       cnt_2s;
  
reg              cnt_4s;
  
  
reg             pwm;
  
wire            pwm_r;
  
wire            pwm_led;
  
  
assign          pwm_r = ~pwm;
  
  
//计数2us进程
  
always@(posedge sclk or negedge rst_n)
  
    if(!rst_n)
  
         cnt_2us <= 7'd0 ;
  
    else if(cnt_2us == CNT_2US_MAX)
  
         cnt_2us <= 7'd0 ;
  
    else
  
         cnt_2us <= cnt_2us + 1'b1;      
  
  
//产生2us标志信号
  
always@(posedge sclk or negedge rst_n)
  
    if(!rst_n)
  
         cnt_2us_flag <= 1'b0    ;
  
    else if(cnt_2us == CNT_2US_MAX)
  
         cnt_2us_flag <= 1'b1    ;   
  
    else
  
         cnt_2us_flag <= 1'b0    ;   
  
         
  
//计数2ms进程
  
always@(posedge sclk or negedge rst_n)
  
    if(!rst_n)
  
         cnt_2ms <= 10'd0        ;
  
    else if((cnt_2ms == CNT_2MS_MAX) && (cnt_2us_flag))
  
         cnt_2ms <= 10'd0        ;
  
    else if(cnt_2us_flag)
  
         cnt_2ms <= cnt_2ms + 1'b1;      
  
         
  
//产生2ms标志信号
  
always@(posedge sclk or negedge rst_n)
  
    if(!rst_n)
  
         cnt_2ms_flag <= 1'b0    ;
  
    else if((cnt_2ms == CNT_2MS_MAX) && (cnt_2us_flag))
  
         cnt_2ms_flag <= 1'b1    ;
  
    else
  
         cnt_2ms_flag <= 1'b0    ;           
  
         
  
//计数2s进程
  
always@(posedge sclk or negedge rst_n)
  
    if(!rst_n)
  
         cnt_2s <= 10'd0;
  
    else if((cnt_2s == CNT_2S_MAX) && (cnt_2ms_flag))
  
         cnt_2s <= 10'd0;
  
    else if(cnt_2ms_flag)
  
         cnt_2s <= cnt_2s + 1'b1;
  
         
  
//4s产生标志信号
  
always@(posedge sclk or negedge rst_n)
  
    if(!rst_n)
  
         cnt_4s <= 1'b0;
  
    else if((cnt_2s == CNT_2S_MAX) && (cnt_2ms_flag))
  
         cnt_4s <= ~cnt_4s;                  
  
  
//产生呼吸灯效果
  
always@(posedge sclk or negedge rst_n)
  
    if(!rst_n)
  
         pwm <= 1'b0;
  
    else if(cnt_2ms >= cnt_2s)  
  
         pwm <= 1'b1;
  
    else
  
         pwm <= 1'b0;
  
                        
  
assign pwm_led = (cnt_4s == 1'b0) ? pwm : pwm_r;        
  
assign led = {pwm_led,pwm_led,pwm_led,pwm_led};
  
  
endmodule
  
  

六、仿真图

  
file:///C:/Users/wwt/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg
  

由仿真图和我们的思路框架相对比可得,两者一样。




10-25基于FPGA的呼吸灯.pdf

352.07 KB, 下载次数: 102

此帖出自FPGA/CPLD论坛

最新回复

谢谢分享,正准备开始pwm  详情 回复 发表于 2016-11-14 11:11
点赞 关注(1)
 

回复
举报

6423

帖子

17

TA的资源

版主

沙发
 
多谢楼主分享
此帖出自FPGA/CPLD论坛
个人签名training
 
 

回复

297

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
顶一下
此帖出自FPGA/CPLD论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(中级)

4
 
顶一个,以前想自己写一个,结果效果不是很理想,等着试试楼主的程序
此帖出自FPGA/CPLD论坛
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(初级)

5
 
hljjxzhla 发表于 2016-10-26 16:26
顶一个,以前想自己写一个,结果效果不是很理想,等着试试楼主的程序

可以   ,如果实现不了   可以交流
此帖出自FPGA/CPLD论坛
 
 
 

回复

18

帖子

1

TA的资源

一粒金砂(中级)

6
 
顶一下
此帖出自FPGA/CPLD论坛
 
 
 

回复

128

帖子

1

TA的资源

一粒金砂(中级)

7
 
用16M的时钟实现了一下
此帖出自FPGA/CPLD论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

8
 
谢谢分享,正准备开始pwm
此帖出自FPGA/CPLD论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表