首页 > 编程知识 正文

fpga(呼吸灯原理简介 FPGA实现呼吸灯)

时间:2023-05-03 05:25:44 阅读:123053 作者:3947

呼吸机原理简介FPGA实现呼吸机的呼吸机,是指灯光在微机控制下由亮到暗,再由暗到亮,让人感觉像是在呼吸,主要起到提醒注意的作用。

本文简要介绍了呼吸机的原理,最后附上FPGA的呼吸机Verilog HDL代码。 希望能对读者有一点帮助。

呼吸机的效果是灯光变暗变亮,变亮变暗,就像人在呼吸一样返回。 如果能逐渐提高电压,逐渐降低电压,可能会被认为很容易实现。 但是,FPGA的端电压只有“0”和“1”两个等级。 因此,用FPGA引脚实现“正弦波”的信号输出是不现实的。 因此,实际上通过改变引脚单位时间内的高电平输出时间来实现呼吸灯。 也就是说,使FPGA引脚输出一系列PWM波信号,不断改变PWM波的占空比。

呼吸机分为两个阶段:

第一阶段:从黑暗到光明。 输出的一系列PWM波的占空比从0%到100%以1%间隔增加,共计100周期的PWM波。

第二阶段:从亮到暗。 输出的一系列PWM波的占空比从100%到0%以1%间隔递减,共计100周期的PWM波。

注意:

有两个100。 一个100是占空比100%; 另一个100从0%到100%或从100%到0%需要100个周期的PWM波。

FGA呼吸机代码Breath_LED.v :

/************/文档说明: led呼吸机代码//作者* * * * * * * * * * * * * * * * * */module breath _ led (输入reg [12:0]cnt1; reg [8:0]cnt2; reg [8:0]cnt3; reg标志; 初始标志=0; initial cnt1=0; 初始CNT2=0; 初始CNT3=0; Always@(Posedgeclk ) Beginif ) CNT1==5000 ) begincnt2=cnt2 1; cnt1=0; end else begincnt1=cnt1 1; ENDIF(CNT2==99 ) begincnt3=cnt3 1; cnt2=0; ENDIF(CNT3==99 ) beginflag=~flag; cnt3=0; ENDIF(CNT2=CNT3flag==0) beginled=1; endelseif(CNT2=CNT3flag==0) beginled=0; endelseif(CNT2=CNT3flag==1) beginled=0; endelseif(CNT2=CNT3flag==1) beginled=1; 结束模块代码说明:

该码实现2s呼吸机,1s由暗到亮,1s由亮到暗。

第二个100得到的一个PWM波的周期为1s/100=10ms;

从前100获得的1%占空比为10ms/100=100us;

cnt1与5000相加是因为该代码的默认时钟为50MHz,5000/50000000Hz=100us,能够根据FPGA的实际情况自身进行修正。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。