📄 基于vhdl语言的智能拨号报警器的设计.htm
字号:
src="基于VHDL语言的智能拨号报警器的设计.files/ShowClass_Menu.js"
type=text/JavaScript></SCRIPT>
</TD></TR></TBODY></TABLE><!--导航代码开始-->
<TABLE class=top_Path style="WORD-BREAK: break-all" cellSpacing=0 cellPadding=0
width=760 align=center border=0>
<TBODY>
<TR>
<TD align=middle width="5%"><IMG height=11
src="基于VHDL语言的智能拨号报警器的设计.files/arrow3.gif" width=29></TD>
<TD width="73%">您现在的位置: <A class=LinkPath
href="http://www.21control.com/">嵌入式控制研究室</A> >> <A
class=LinkPath
href="http://www.21control.com/FPGASOPC/Index.html">FPGA</A> >> 文章正文</TD>
<TD align=right width="22%"><IMG height=13
src="基于VHDL语言的智能拨号报警器的设计.files/User_Login.gif" width=13 align=absMiddle>
<A class=top_UserLogin href="http://www.21control.com/User/User_Login.asp"
target=_blank>用户登录</A> <IMG height=13
src="基于VHDL语言的智能拨号报警器的设计.files/User_Reg.gif" width=13 align=absMiddle> <A
class=top_UserLogin href="http://www.21control.com/Reg/User_Reg.asp"
target=_blank>新用户注册</A> </TD></TR></TBODY></TABLE><!--导航代码结束--><!-- ********网页顶部代码结束******** --><!-- ********网页中部代码开始******** --><!--文章显示代码开始-->
<TABLE class=center_tdbgall style="WORD-BREAK: break-all" cellSpacing=0
cellPadding=0 width=760 align=center border=0>
<TBODY>
<TR>
<TD colSpan=2>
<TABLE class=main_title_760 style="WORD-BREAK: break-all" cellSpacing=0
cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD vAlign=center width="3%"><IMG
src="基于VHDL语言的智能拨号报警器的设计.files/arrow.gif" align=absMiddle></TD>
<TD width="66%"><STRONG><SPAN
class=S_headline2>[组图]</SPAN>基于VHDL语言的智能拨号报警器的设计</STRONG></TD>
<TD
width="18%"> <FONT
color=#009999></FONT></TD>
<TD align=right width="13%">【字体:<A
href="javascript:fontZoomA();"><FONT color=#ffffff>小</FONT></A> <A
href="javascript:fontZoomB();"><FONT
color=#ffffff>大</FONT></A>】</TD></TR></TBODY></TABLE></TD></TR>
<TR vAlign=center align=middle>
<TD class=main_ArticleTitle style="WORD-BREAK: break-all" colSpan=2
height=50>基于VHDL语言的智能拨号报警器的设计</TD></TR>
<TR vAlign=center align=middle>
<TD class=main_ArticleSubheading style="WORD-BREAK: break-all"
colSpan=2></TD></TR>
<TR align=middle>
<TD class=Article_tdbgall colSpan=2>作者:<A title="刘桂华 马建国"
href="http://www.21control.com/ShowAuthor.asp?ChannelID=1004&AuthorName=刘桂华 马建国">刘桂华 马…</A> 文章来源:<A
href="http://www.21control.com/ShowCopyFrom.asp?ChannelID=1004&SourceName=电子设计应用">电子设计应用</A> 点击数:
<SCRIPT language=javascript
src="基于VHDL语言的智能拨号报警器的设计.files/GetHits.htm"></SCRIPT>
更新时间:2006-4-11</TD></TR>
<TR>
<TD class=main_tdbg_760 id=fontzoom style="WORD-BREAK: break-all" vAlign=top
colSpan=2 height=300>
<TABLE cellSpacing=0 cellPadding=10 align=left border=0>
<TBODY>
<TR>
<TD><!--插入广告JS代码--></TD></TR></TBODY></TABLE> <B>摘要:</B>介绍了以EDA技术作为开发手段的智能拨号报警系统的实现。本系统基于VHDL语言,采用FPGA作为控制核心,实现了远程防盗报警。该报警器具有体积小、可靠性高、灵活性强等特点。
<P> <B>关键词:</B>VHDL语言 FPGA ASIC DTMF</P>
<P>目前,智能拨号报警器大多采用单片机作为控制核心,这种传统设计方法的特点是硬件和软件截然不同,设计中不可相互替代;而且硬件连线复杂,可靠笥较差。</P>
<P>硬件描述语言(VHDL)和可编程ASIC器件的广泛应用第一次打破了硬件和软件的屏障。基于VHDL语言、以EDA技术作为开发手段、采用现场可编程门阵列FPGA(Field
Porogrammable Gate
Array)作为控制核心实现的与电话线连接的智能拨号远程报警器,与传统设计相比较,不仅简化了接口和控制,提供了系统的整体性能和工作可靠性,也为进一步提高系统集成创造了条件。</P>
<P><B>1 系统原理及组成</B></P>
<P>系统组成原理框图如图1所示。<IMG height=83 hspace=1
src="基于VHDL语言的智能拨号报警器的设计.files/20060411220446627.gif" width=189
align=right vspace=1
border=0>系统的控制核心是一片FPGA芯片,它由3个功能模块构成:电话信号音识别模块,DTMF收发时序仿真模块和摘机/挂机控制模块。3个模块的功能分别为识别电话系统送来的信号音、控制DTMF拨号电路自动拨号、控制摘挂机电路完成摘挂机操作。</P>
<P>系统工作原理:当有人进入室内时,人体检测传感器便采集盗窃信号,盗窃信号启动摘机/挂机控制模块控制摘挂机电路,实现电话摘机。电话信号音识别模块识别摘机后电话系统的状态是否处于可拨号状态。若为可拨号状态,DTMF收发时序仿真模块控制DTMF拨号电路以双音频DTMF方式拨预定的电话(或传呼机)号;若为不何拨号状态,通过摘机/挂机控制模块实现电话挂机,延时后再重拨。</P>
<P><B>2 PFGA功能模块设计</B></P>
<P>智能拨号报警器的控制核心FPGA的三个功能模块皆用VHDL语言编程实现,下面主要介绍FPGA的三个功能模块的设计。</P>
<P>2.1 电话信号音识别模块JUDGE</P>
<P>信号音判断的实现原理是:由于电话系统信号音的拨号音、<IMG height=61 hspace=1
src="基于VHDL语言的智能拨号报警器的设计.files/20060411220448832.gif" width=85 align=right
vspace=1
border=0>回铃音和忙音的音源频率均为450Hz(±25Hz)的正弦波,只是断续比不同且在时间上有明显的差异(拨号音为450Hz±25Hz连续信号,忙音为
0.35s通0.35s断,回铃音为1s通4s断)。要判断信号音,首先应将处理DTMF信号的MT8880芯片设置为呼叫处理模式,使电话呼叫过程中的各种信号音经MT8880滤波、限幅后得到方波,并由MT8880的IRQ端输出。然后对MT8880输出的IRQ信号计数5秒,拨号音的计数下限为(450-25)×5=2125,计数上限为(450+25)×5=2375,即计数范围为2125~2375。同理,忙音的计数范围为
1041~1212,回铃音的计数范围为425~475,无信号音的计数应为零。但在实际编程中,需要考虑一定的计时计数误差,并且使程序简化,因此采用不同信号音相邻计数界限的中间值为区分不同的信号音。同时,为合理利用FPGA硬件资源,中间值应尽量选为2的n次方(整数)。最后设定为计数值大于
1792为拨号音,在1024~1791之间的忙音,在256~1023之间的回铃音,小于255为无信号音。</P>
<P>基于此原理设计的信号音识别模块JUDGE如图2所示。CLK为时钟信号输入端;IRQ与MT8880芯片的IRQ输出端相连接,是IRQ信号的计数输入端;PICK是摘机信号输入端;BUSY为电话忙状态标志信号输出端;DIAL是拨号使能信号端。该模块的功能为:在摘机信号PICK产生大约1s后,即
MT8880芯片被设置为呼叫处理模式后启动该模块。在该模块的内部,设置了两个计数器。一个为对CLK时钟信号进行计数,产生5s控制信号;另一个对
IRQ送来的脉冲进行计数。两个计数器由摘机信号PICK启动,5s后判断第二个计数器的计数值。如果计数值大于1792,则说明电话交换机系统处于可拨号的状态,DIAL置为有效、BUSY置为无效,以触发DTMF收发时序仿真模块进行拨号操作。否则,电话处于不可拨号的状态,DIAL无效、BUSY有效,驱动摘/挂机模块产生挂机信号。拨号音识别的部分VHDL程序如下:</P>
<P>process(irq,pick,stop)<IMG height=122 hspace=1
src="基于VHDL语言的智能拨号报警器的设计.files/20060411220448623.gif" width=188
align=right vspace=1 border=0></P>
<P>variable cnt:integer;</P>
<P>constant lm_1792:integer:=1792;</P>
<P>begin</P>
<P>if(pick=‘0’);</P>
<P>dial<=‘0’;</P>
<P>cnt:=0;</P>
<P>elsif(stop and cnt<=lm_1792) then</P>
<P>dial<=‘0’;/*电话遇忙,发忙状态标志*/</P>
<P>busy<=‘1’;</P>
<P>elsif(stop and cnt>=lm_1792) then<IMG height=100 hspace=1
src="基于VHDL语言的智能拨号报警器的设计.files/20060411220449453.gif" width=136
align=right vspace=1 border=0></P>
<P>dial<=‘1’;/*电话通,拨号使能有效*/</P>
<P>busy<=‘0’;</P>
<P>elsif(irq)'event and irq=‘1’) then</P>
<P>cnt:=cnt+1;/*电话音检测计数*/</P>
<P>end if;</P>
<P>end process;</P>
<P>2.2 DTMF收发时序仿真模块RECEI-SEND</P>
<P>MITEL
公司生产的集成芯片MT8880是专门用于处理DTMF信号的专用集成电路,具有接受和发送DTMF信号的双重功能。在本系统中,MT8880的作用是:把电话系统送来的DTMF信号处理成FPGA能够识别的逻辑信号;将FPGA送出的用于拨号的TTL逻辑信号转换成电话系统能够识别的DTMF信号。</P>
<P>RECEI
-SEND用于控制MT8880以实现按DTMF方式自动拨预定的电话号码。RECEI-SEND模块与MT8880芯片的互连接口如图3所示。二者的接口信号线直接连接并由RECEI-SEND模块模拟产生MT8880芯片的各个接口信号,完成DTMF信号的接收以及对电话线路拨号。MT8880的工作模式由内部寄存器(CRA、CRB、SR、TDR和RDR)中的控制字决定,<IMG
height=99 hspace=1 src="基于VHDL语言的智能拨号报警器的设计.files/20060411220450541.gif"
width=136 align=right vspace=1
border=0>内部寄存器的数据写入和读出都由R-W、CS、CP、RS。信号控制。当MT8880芯片被访问时,CP脚应出现一次带上升沿的高电平,其周期应为1μs~1000μs。这是关键信号,其它信号均以此信号作为依据。因此,FPGA的RECEI-SEND模块模拟产生CP及其它信号的时序。图4为RECEI-SEND模块写MT8880内部寄存器CRA、CRB的时序。图5是RECEI-SEND模块控制MT8880发送DTMF信号时序。RECEI-SEND模块的VHDL程序结构如图6所示。</P>
<P>2.3 摘/挂机控制模块PICK</P>
<P>电话摘/挂机的实现是由摘/挂机控制模块PICK控制摘/挂机电路来完成的。设计的PICK模块如图7所示。CLK是系统时钟输入;EN是人体检测传输器采集的盗窃信号输入;RESET是系统复位信号输入;STOP为拨号完成的挂机控制信号输入;BUSY为遇忙信号输入;PICK为摘/挂机信号输出。当有盗窃发生时,EN输入信号有效,该模块使摘机输出信号PICK有效,从而驱动摘/挂机电路产生摘机动作。如果摘机后电话信号音识别模块JUDGE送来的是系统忙的信号,即UBSY输入信号有效时,输出挂机信号PICK。两秒钟后重新启动摘机,直到电话信号音为可拨号状态。拨号完成后,STOP信号有效,
PICK模块产生挂机信号。当RESET有效时,挂机输出信号有效。摘/挂机控制模块PICK的部分VHDL程序如下:</P>
<P>process(clk,stop,busy,en,delay)</P>
<P>begin</P>
<P>if(clk'event and clk='1') then</P>
<P></P>
<P><IMG src="基于VHDL语言的智能拨号报警器的设计.files/20060411220450412.gif" align=right
border=0>if(reset='1' or stop='1') then</P>
<P>/*复位或拨号完成后挂机*/</P>
<P>pick<='0';</P>
<P>elsif(en='1') then /*报警信号触发摘机*/</P>
<P>if(busy='0') then</P>
<P>pick<='1';</P>
<P>elsif(delay='1') then /*遇忙延时后重新摘机*/</P>
<P>pick<='1';<IMG height=86 hspace=1
src="基于VHDL语言的智能拨号报警器的设计.files/20060411220451329.gif" width=79 align=right
vspace=1 border=0></P>
<P>else</P>
<P>pick<='0'; /*遇忙挂机*/</P>
<P>end if;</P>
<P>end if;</P>
<P>end if;<B><IMG height=216 hspace=1
src="基于VHDL语言的智能拨号报警器的设计.files/20060411220452822.gif" width=252
align=right vspace=1 border=0></B></P>
<P>end process;</P>
<P><B>3 系统设计和逻辑仿真</B></P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -