电子说
呼吸灯的效果是灯逐渐由暗变亮再逐渐由亮变暗,FPGA的引脚电压只有“0”和“1”两个等级。
因此通过改变引脚单位时间内高电平的输出时间来实现呼吸灯,也就是让FPGA引脚输出一系列PWM波信号并不断改变PWM波的占空比。
PWM(Pluse Width Modulation)脉冲宽度调制,是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。
占空比(Duty Cycle or Duty Ratio),可以解释为,在一脉冲序列中(方波),正脉冲序列的持续时间与脉冲总周期的比值。也可理解为,电路释放能量的有效时间与总释放时间的比值。
我们将led从亮到灭(从灭到亮)的过程设为1S.将周期设为1MS.就是有1000个周期,然后每相邻两个周期改变的差值为1us;如下图所示
波形图绘制如下:
按照这个撰写代码,因为50M时钟,一个周期是20ns,故50个单位为1us.
在框1中为1us模块;
在框2中为1ms模块,这里有个细节需要注意一下,第24行只有微妙的计数完成同时ms到达溢出值时,才进行置零。若当前ms为999,但us处于计数0-48时,ms仍不改变。
在框3中为1s模块,与框2同理;
在框4中为控制从亮到灭,从灭到亮的一个标志信号;
在框5中,当en为0,且当前ms小于S对应的时间段就是低电平时刻;同理当en为1,且当前ms大于S对应的时间段就是低电平时刻.
测试代码编写如下:
测试图如下:
注这里为消除前缀。CRTL+G为分组。CRTL+w为添加信号。
全部0条评论
快来发表一下你的评论吧 !