呼吸机原理简介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的实际情况自身进行修正。