001_雾盈FPGA笔记之一呼吸灯简单实验(Verilog)

001_雾盈FPGA笔记之一呼吸灯简单实验(Verilog)

ID:47643644

大小:402.81 KB

页数:10页

时间:2019-09-08

001_雾盈FPGA笔记之一呼吸灯简单实验(Verilog)_第1页
001_雾盈FPGA笔记之一呼吸灯简单实验(Verilog)_第2页
001_雾盈FPGA笔记之一呼吸灯简单实验(Verilog)_第3页
001_雾盈FPGA笔记之一呼吸灯简单实验(Verilog)_第4页
001_雾盈FPGA笔记之一呼吸灯简单实验(Verilog)_第5页
资源描述:

《001_雾盈FPGA笔记之一呼吸灯简单实验(Verilog)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、基于FPGA的呼吸灯简单实验程序(Verilog)2016-07-27雾盈1.呼吸灯呼吸灯最早是由苹果公司发明并应用于笔记木睡眠提示上,一经展出,立刻吸引众多科技厂商争相效仿。将其广泛用于各种电子产品中,尤其是智能手机。呼吸灯其实是微电脑控制下,由暗渐亮,然后再由亮渐暗,模仿人呼吸方式的LED灯2.呼吸灯原理LED的亮度与流过的电流成正比。在一定的频率Z下,如果占空比是0,则LED不亮;如果占空比是100%,则LED最亮;如果占空比刚好是50%,则LED亮度适屮。如果我们让占空比从0〜100%变化,再从100%〜0不断变化,

2、就可以实现LED一呼一吸的效果。其波形占空比示意图如卜所示:Clk'11Rst_n■nnLEDuLL呼吸灯占空比示意图TimeGen2.呼吸灯程序设计思路(1)首先确定PWM的频率为lKhz(2)出频率算出周期T=l/f=1ms(3)根据每次呼Is,吸Is,算岀计数值ls/lms=1000(4)然后将1ms分成1000份,每一份是lus(5)写三个lus、lms>Is的3个计数器countl>count2>Count3,最后count2和count3进行比较3.程序框图4.状态机设计可以将呼吸灯运行过程归为两个状态:S0:由

3、灭渐亮;S1:由亮渐灭。这里就会冇两个问题需要我们解决,1.状态的翻转2.在一个状态里如何使pwm波的占空比实现逐增或逐减。先说第一个问题,两个状态的翻转由下面的时序图可以看出来,两个状态的翻转只是由时间决定的,so状态和S1状态分别持续Is,可以将它看成周期为2s的吋钟信号,每当flag_ls信号到來一次,状态就翻转一次。flaq1sstateIIIITimeGcnif(flag^ls)state<=-state;elsestate<=state;然后再來说第二个问题,在一个状态下如何实现PWM波占空比逐增逐减的过程。以S

4、O状态下,LED由灭渐亮,PWM波占空比由百分之百逐渐减小至零为例:我们发现让count2与count3比较,其结果clk_out会出现这种占空比逐渐减小的结果。此段代码如2case(statg)0:begin//1曰」::厂uifClflag^ls):beginif(count2

5、t占空比由小到大的方法,这样就可以实现LED的由亮渐灭。记:整个呼吸灯程序设计主要内容大致如此,末尾附上源代码及其仿真波形,以下为程序设计屮我所遇到的问题,给可能出现同样问题的童鞋捉供一些参考。Q1:flag_lus尖峰脉冲信号,仿真出现如下波形:±dk1£rst_n1count10Jflag_lms1count29'flag_ls0丄count33'flag_lus0'state0'dkjxjt1led1注:在用modelsim仿真波形时,我为了加快仿真速度和方便查看波形,我将所有的count的计数最大值都改为了9。当co

6、unt1计数10拍后,count2波形从9跳为0,但是仔细一看就会发现,count2波形的9跳为0时,count1只计数了一拍,中间少了9拍。错误的代码如下:/*if(flag_lus)beginif(count2==COUNT_MAX)begin

7、count2<=10'd0;endelsebegincount2<=count2+l'bl;

8、endendelsebegincount2<=10'd0;1end*/修改后的代码:if(flag_lus&count2

9、l;

10、endelseif(count2==COUNT_MAX&countl==COUNT_LIT)Ibegincount2<=l'b0;Iendend加入那部分代码的意思是当(count2二二9&countl==9)II寸,count2才计入下一拍。正确的波形如下:同理,在count3归零时也应如此。Q2:flag_lms和flag.Is两个尖峰脉冲信号,高电平保持时间不是一个时钟周期。如下图所示:这里介绍一个老师讲的技巧,让flag_lms的波形与flag_lus的波形相与,就可以得到flag_lms的波形为一个时钟周期的

11、尖峰脉冲。代码如下:assignflag_lms=(cour)t2==COUNT_MAX)?(11bl&flag_lus):11b0;assignflag_ls=(count3==COUNT_MAX)?(1'bl&flag_lms):1'b0;关于呼吸灯的问题,我遇到的就是这些了,还有其他

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。