雾盈重点笔记之一呼吸灯简单实验.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于FPGA呼吸灯简单试验程序(Verilog) 雾盈 1.呼吸灯 呼吸灯最早是由苹果企业发明并应用于笔记本睡眠提醒上,一经展出,立即吸引众多科技厂商争相效仿。将其广泛用于多种电子产品中,尤其是智能手机。 呼吸灯其实是微电脑控制下,由暗渐亮,然后再由亮渐暗,模拟人呼吸方法LED灯 2.呼吸灯原理 LED亮度和流过电流成正比。在一定频率之下,假如占空比是0,则LED不亮;假如占空比是100%,则LED最亮;假如占空比刚好是50%,则LED亮度适中。假如我们让占空比从0~100%改变,再从100%~0不停改变,就能够实现LED一呼一吸效果。 其波形占空比示意图以下所表示: 呼吸灯占空比示意图 3.呼吸灯程序设计思绪 (1)首先确定PWM频率为1Khz (2)由频率算出周期 T = 1/f = 1ms (3)依据每次呼1s,吸1s,算出计数值 1s/1ms=1000 (4)然后将1ms分成1000份,每一份是1us (5)写三个 1us、1ms、1s3个计数器count1、 count2、 Count3,最终count2和count3进行比较 4.程序框图 5.状态机设计 能够将呼吸灯运行过程归为两个状态:S0:由灭渐亮;S1:由亮渐灭。 这里就会有两个问题需要我们处理, 状态翻转 在一个状态里怎样使pwm波占空比实现逐增或逐减。 先说第一个问题,两个状态翻转 由下面时序图能够看出来,两个状态翻转只是由时间决定,S0状态和S1状态分别连续1s, 能够将它看成周期为2s时钟信号,每当flag_1s信号到来一次,状态就翻转一次。 然后再来说第二个问题,在一个状态下怎样实现PWM波占空比逐增逐减过程。 以S0状态下,LED由灭渐亮,PWM波占空比由百分之百逐步减小至零为例: 我们发觉让count2和count3比较,其结果clk_out会出现这种占空比逐步减小结果。 此段代码以下: 于是,由反逻辑能够轻易知道在S1状态下,怎样使其输出clk_out占空比由小到大方法,这么就能够实现LED 由亮渐灭。 记: 整个呼吸灯程序设计关键内容大致如此,末尾附上源代码及其仿真波形,以下为程序设计中我所碰到问题,给可能出现一样问题童鞋提供部分参考。 Q 1: flag_1us尖峰脉冲信号,仿真出现以下波形: 注:在用modelsim仿真波形时,我为了加紧仿真速度和方便查看波形,我将全部count计数最大值全部改为了9。 当count1 计数10拍后,count2 波形从9 跳为0 ,不过仔细一看就会发觉,count2 波形9 跳为 0 时,count1 只计数了一拍,中间少了9拍。 错误代码以下: 修改后代码: 加入那部分代码意思是当(count2 == 9 count1 == 9)时,count2 才计入下一拍。 正确波形以下: 同理,在count3 归零时也应如此。 Q 2:flag_1ms 和flag_1s 两个尖峰脉冲信号,高电平保持时间不是一个时钟周期。以下图所表示: 这里介绍一个老师讲技巧,让flag_1ms 波形和flag_1us 波形相和,就能够得到flag_1ms 波形为一个时钟周期尖峰脉冲。代码以下: 相关呼吸灯问题,我碰到就是这些了,还有其它问题欢迎童鞋们补充交流。 附:仿真波形图 全局图 附:源代码 module breathe_led( input clk, input rst_n, output reg [3:0] led ); parameter COUNT_MAX = 10d999; // parameter COUNT_LIT = 6d45; // parameter COUNT_LIT = 6d9; // parameter COUNT_MAX = 10d9; // reg [5:0] count1; reg [9:0] count2; reg [9:0] count3; wire flag_1ms; wire flag_1s; wire flag_1us; reg state; reg clk_out; //count1 always @ (posedge clk or negedge rst_n) begin if(!rst_n) begin count1 = 1b0; end else begin

文档评论(0)

181****8523 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档