FPGA报警系统的制作

电子说

1.2w人已加入

描述

步骤1:所需的设备/程序

能够处理的计算机

Quartus II网络版

Altera FPGA开发板DEs-115 Cyclone IV系列( )

红外光束中断传感器(该部分的第二张图片)

Arduino LilyPad蜂鸣器(该部分的第三张图片) )

用户手册(参考部分提供了链接)

面包板

电线

一个上拉电阻; 10K欧姆

耐心; Verilog代码并非总是容易做到的

步骤2:框图和模块故障

请参阅底部的PDF

警报系统由三个模块组成;主模块,显示模块和声音模块。系统可以处于三种状态:布防,撤防和触发。

主模块监视输入并更改状态变量的值。设防和撤防状态的输入是开关。触发状态的输入是断线传感器。如果光束入射到传感器,则输入为1。相反,如果光束中断并且没有光入射到传感器,则输入为0,触发状态变为1。

显示模块将从主模块获得布防和撤防状态的值。如果设防输入变为高电平(1),则设防状态将变为1,并且单词‘on’将显示在七段显示器(SSD)中,该显示器位于FPGA板上滑动开关上方。如果输入变为低电平(0),则撤防状态将更改为1,并且SSD会显示“关闭”字样。

声音模块还将获得撤防,撤防和撤防的值。从主模块触发状态。如果布防状态为1,触发状态为1,则警报声将响起。仅在撤防状态更改为1时,声音才会关闭。

步骤3:显示模块

报警系统

报警系统

如果警报为“ ON”或“ OFF”,则显示模块将使用SSD进行显示。这使用了布防和撤防状态变量的值。根据输入,模块将点亮显示器的某些部分。请参阅本节的第二张图片,以了解哪些片段将被点亮。请参阅本节的第一张图片,以查看分段点亮时SSD的外观。

在布防状态为打开(输入为1)时,将使用两个显示器,每个字母一个上的单词。第一次显示时,除数字6外的所有段均将点亮。第二个显示屏将点亮0、1、2、4和5段(也可以使用2、4和6段)。

在撤防状态为打开(输入为1)时,三个显示器将被使用;单词“ off”的每个字母一个。第一个显示屏将与系统打开时的第一个显示屏相同。第二个和第三个显示器的段0、4、5、6都将点亮。

SSD是低电平敏感的,这意味着当它们为0时它们会点亮。第二张图片中的标签表明您位置,其中应放置0以形成所需的形状。例如,要使字母“ n”,段0、1、2、4和5必须点亮,这意味着所有这些位置都为零。其他位置(在这种情况下为位置3和6)将为1。因此,为了使字母“ n”成为要馈送到引脚的7位二进制数是0001001。由于每个板都不同,因此您可能必须保留

此项目所需的引脚可以在Altera DE2-115用户手册的第36至38页上找到。请注意,SSD引脚每个显示器有7个引脚,例如HEX0 [0]至HEX0 [6]。 7位二进制数的每个位置都将获得这7个引脚之一。但是,尽管7位二进制数将从位置0到位置6,要获得正确的引脚顺序,它们必须递减计数。

HEX0 [6]的位置为0,HEX0 [5]的位置为1,依此类推。

代码如下:

模块 armedStatusDisplay(armedState,SSD,SSD1,SSD2);

输入武装状态; 《/p》

输出规则 [6:0] SSD,SSD1,SSD2;

始终 @(armedState)

开始

SSD2 = 7‘b0000001;

如果(armedState == 1)

开始

SSD = 7’b1111111;

SSD1 = 7‘b0001001;

否则

开始

SSD = 7’b0111000;

SSD1 = 7‘b0111000;

endmodule

步骤4:声音模块

声音模块使用LilyPad蜂鸣器。它接收来自主模块的输入,如果满足某些条件,它将发出警报。主模块可以识别警报是否已布防(布防状态= 1),以及在系统布防时(触发状态= 1)是否已经中断了撞击IR中断光束传感器的光。如果两者均为1,则警报将响起。

代码如下:

//警报模块中的代码来自

http://www.fpga4fun.com/MusicBox1.html并进行了修改

模块 AlarmSound(扬声器,clk,triggeredState);

输入 clk;

输入 triggerState;

输出扬声器;

参数 clkdivider = 25000000/440/2;

reg [23:0]音调;

总是 @(摆姿势 clk)

如果(触发状态== 1)

音频《=音频+1;

reg [14:0]计数器;

始终 @( posege clk)

如果(triggeredState == 1)

开始

if (counter == 0)

counter 《=(tone [23]?clkdivider-1:clkdivider/2-1);

其他

counter 《= counter-1;

结束

r 例如扬声器;

总是 @( posege clk)

如果(triggeredState == 1)

如果(counter == 0)

扬声器《=〜扬声器;

结束模块

步骤5:主模块

报警系统

该模块将所有其他模块拼凑在一起,以获取完整的警报系统。它直接从红外中断光束传感器接收信息,以确定触发状态,并识别系统是否处于布防或撤防状态。该系统通过FPGA板底部的滑动开关进行布防。一针打开系统,一针关闭系统。开关的引脚位于用户手册第36页上。

此模块为其他两个模块提供输入。

代码如下:

//主模块

模块 finalproject(armedIn,beam,clk,disarmedIn,armedState,beamOut,disarmedState,扬声器,SSD, SSD1,SSD2,triggertedState);

输入 //SW0

输入光束;

输入 clk;

输入 disarmedIn; //SW1

输出 regarmedState = 0; //LEDR17

输出 beamOut; //LEDG0

输出 regdisarmedState = 1; //LEDR16

输出扬声器;

输出 [6:0] SSD,SSD1 ,SSD2;

输出 reg 触发状态= 0;

参数打开= 1;

参数关闭= 0;

分配 beamOut =梁; //如果光束断开则在ledg0上指示

//监视所有输入

始终 @(armedIn,disarmedIn,梁)

开始

如果(armedIn)

开始

武装状态《=开;

解除状态《=关;

结束

如果(已撤防)

开始

武装状态《=关闭;

disarmedState 《=开;

TriggeredState 《=关;

结束

如果((光束== 0)&&(armedState == 1)&&(disarmedState == 0))

TriggeredState 《= on;

end

ArmedStatusDisplay display1(armedState,SSD,SSD1,SSD2); //在SSD上显示警报的当前状态

alarmSound alarm1(扬声器,clk,triggeredState); //发出警报

endmodule

步骤6:演示

报警系统

报警系统

请观看随附的视频以观看我们的警报系统演示。

完整代码如下:

模块最终项目(armedIn,beam,clk,disarmedIn,armedState,beamOut,disarmedState,扬声器,SSD,SSD1,SSD2,triggerState);

输入 armarmIn ;

输入光束;

输入 clk;

输入 disarmedIn;

输出注册表武装状态= 0;

输出 beamOut;

输出注册表 disarmedState = 1;

输出扬声器;

输出 [6:0] SSD,SSD1,SSD2;

输出注册表,触发状态= 0;

参数开启= 1;

参数关闭= 0;

分配 beamOut =梁;//如果光束断开则在ledg0上显示

//始终注视所有输入

@(armedIn,disarmedIn,beam)

开始

如果(armedIn)

开始

武装状态《=开启;

撤防状态《=关闭;

结束

如果(

开始

武装状态《=关闭;

解除状态《=开启;

触发状态《= off;

结束

如果((beam == 0)&&(armedState == 1)&&(disarmedState == 0))

TriggeredState 《= on;

end

ArmedStatusDisplay display1(armedState,SSD,SSD1,SSD2) ;//在SSD上显示警报的当前状态

alarmSound alarm1(speaker,clk,triggedState);//发出警报

endmodule

///警报模块中的代码来自http://www.fpga4fun.com/MusicBox1.html和修改

模块 alarmSound(扬声器,clk,triggerState);

输入 clk;

输入 triggerState;

输出扬声器;

参数 clkdivider = 25000000/440/2;

reg [23:0]音调;

始终 @( posege clk)

如果(triggeredState == 1)

tone 《= tone + 1;

reg [14:0]计数器;

始终 @(姿势 clk)

如果(triggeredState == 1)

开始

如果(计数器== 0)

计数器《=(音调[23]?clkdivider-1:clkdivider/2-1);

其他

counter 《= counter-1;

结束

reg 扬声器;

始终 @(《如果(triggeredState == 1)

如果(counter == 0),则

扬声器《=〜扬声器;

终端模块

模块武装状态显示(armedState,SSD, SSD1,SSD2);

输入 armedState;

输出注册表 [6:0] SSD,SSD1,SSD2;

始终 @(armedState)

开始

SSD2 = 7’b0000001;

如果(armedState == 1)

开始

SSD = 7‘b1111111;

SSD1 = 7’b0001001;

结束

否则

开始

SSD = 7‘b0111000;

SSD1 = 7’b0111000;

结束

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分