量程自动转换数字式频率计的设计文档格式.docx
- 文档编号:21669963
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:15
- 大小:417.91KB
量程自动转换数字式频率计的设计文档格式.docx
《量程自动转换数字式频率计的设计文档格式.docx》由会员分享,可在线阅读,更多相关《量程自动转换数字式频率计的设计文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
)。
2.要求量程可根据被测量的大小自动转换。
即当计数器溢出时,产生一个换档信号,让整个计数时间减少为原来的1/10,从而实现换档功能。
3.要求实现溢出报警功能。
即当频率高于999
时,产生一报警信号,点亮LED灯,从而实现溢出报警功能。
二、设计方案
1、频率计的工作原理
常用的测量频率的方法有两种,一个是测周期法,一个是测频率法。
测周期法需要有基准系统时钟频率
在待测信号一个周期
内,记录基准时钟频率的周期数
,则被测频率可表示为:
=
/
测频率法就是在一定的时间间隔内
内,得到这个周期信号重复变化的次数
,则被测频率可表示为
本设计采用的是直接测频率的方法。
2、频率计的系统框图
频率计的系统设计可以分为4位10进制计数模块、闸门控制模块、锁存器模块、译码显示模块和可自动换档基准时钟模块,其系统框图如图2.1所示。
其中,可自动换档模块为闸门控制模块提供3个档也就是3个测量范围的基准时钟信号,通过计数器的最高位溢出情况来判定工作在第几档。
闸门控制模块根据基准时钟信号产生基准时钟信号周期2倍的周期使能信号,随后为锁存器产生一周期性地锁存信号,再然后为计数模块产生一周期性地清零信号。
4位10进制计数模块在使能信号和清零信号的控制下对被测信号的波形变化进行计数,若产生溢出则为自动换档模块输出一换档信号。
译码显示模块负责不闪烁的显示被测信号的频率以及数字频率计目前工作的档位。
三、详细设计
1、4位十进制计数器模块
4位十进制计数器模块包含4个级联十进制计数器,用来对施加到时钟脉冲输入端的待测信号产生的脉冲进行计数,十进制计数器具有计数使能、清零控制和进位扩展输出。
用于计数的时间间隔(计数允许周期T)由闸门控制模块的控制信号发生器所产生的使能信号来控制,使能十进制计数器的计数允许周期T可由闸门控制模块中的量程选择输入来决定。
这样允许用户选择所希望的被测频率范围,并有效地确定读出数据中十进制小数点的位置。
(1)、十进制计数器元件cnt10的设计
十进制计数器既可采用QuartusII的宏元件74160,也可用VHDL语言设计,本设计采用VHDL编写,其源程序如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYcnt10IS
PORT(clr:
INSTD_LOGIC;
clk:
cout:
OUTSTD_LOGIC;
en:
cq:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDcnt10;
ARCHITECTUREoneOFcnt10IS
BEGIN
PROCESS(clr,clk,en)
VARIABLEcqi:
STD_LOGIC_VECTOR(3DOWNTO0);
IFclr='
1'
THENcqi:
=(OTHERS=>
'
0'
);
ELSIFclk'
EVENTANDclk='
THEN
IFen='
IFcqi<
9THENcqi:
=cqi+1;
ELSEcqi:
ENDIF;
IFcqi=9THENcout<
='
;
ELSEcout<
cq<
=cqi;
ENDPROCESS;
END;
在源程序中cout是计数器进位输出;
cq[3..0]是计数器的状态输出;
clk是时钟输入端;
clr是复位控制输入端,当clr=1时,cq[3..0]=0;
en是使能控制输入端,当en=1时,计数器计数,当en=0时,计数器保持状态不变。
其仿真输出波形如图3.1所示:
图3.1:
十进制计数器模块仿真输出波形
在项目编译仿真成功后,将设计的十进制计数器电路设置成可调用的元件cnt10.bsf,用于以下的4位十进制计数器的顶层设计。
(2)、计数器的顶层设计
该顶层设计可以用原理图输入的方法完成。
在QUartusII中,新建一个原理图编辑窗,从当前的工程目录中调出4片十进制计数器元件cnt10,并按图所示的4位十进制计数器的顶层原理图完成电路连接,如图3.2所示。
图3.2:
计数模块电路图
(3)分频模块的设计
根据设计要求,最小一档的周期是10ms,即100Hz。
选用10MHz的晶振作为EPM7128的时针,为得到1000Hz的信号需要100分频,可知用2个cnt10级联就可以实现,图3.3是其电路图。
图3.3:
分频模块电路图
2、闸门控制模的设计
闸门控制模块主要根据输入的控制时钟脉冲,首先要产生一个锁存信号LOAD,用其上升沿控制锁存器将之前的计数结果存入锁存器中,并由显示模块将其显示出来,设置锁存器是为了让显示稳定,不会因为周期性清零信号使得显示的数值不断闪烁。
锁存之后须有一清零信号CLR_CNT将计数器清零,为了下一秒的计数操作做准备。
闸门控制模块的VHDL源程序如下:
ENTITYTESTCTLIS
PORT(clk,fin:
clr_cnt:
tsten:
load:
OUTSTD_LOGIC);
ARCHITECTUREoneOFTESTCTLIS
SIGNALa:
STD_LOGIC;
SIGNALcount:
STD_LOGIC_VECTOR(1downto0);
BEGIN
PROCESS(clk)
IFclk'
THEN
a<
=nota;
ENDPROCESS;
PROCESS(fin)
IFfin'
EVENTANDfin='
IFa='
then
IFcount="
11"
thenload<
clr_cnt<
ELSEload<
count<
=count+1;
ELSEcount<
="
00"
load<
tsten<
=a;
闸门控制模块的仿真波形如图3.4所示,图中clk是输入的时针信号,tesen是clk的二分频。
图中还有fin时针,它的频率要远小于clk,作用是作为一个计数器的时针,当tsten为低电平且计数器值不为3时,load等于1。
而当tsten为低电平且计数值为3时,产生一个清零信号CLR_CNT。
图3.4.闸门控制模块的波形仿真
3、可自动换挡基准时钟模块的设计
本设计通过控制基准时钟信号来时现量程的自动转换。
如果一个周期为0.1s的信号作为时钟信号通过一个进制计数器,从十进制计数器的进位输出端将会得到一个周期为1s的信号。
因此,频率计的三档位可以通过计数器相级联来实现,如图3.5所示:
CLK1K
O4
EN
图3.5:
可自动换挡基准计时模块图:
图中3选1的选择器可以根据十进制计数器模块的溢出情况来作为选择标准。
先使可自动变换档的基准计时模块工作在0挡,若被测频率高于0挡的范围。
则会使4位十进制计数器模块产生溢出,用这个溢出信号来使自动换挡基准时钟模块工作在一档;
同理,如果被测频率还是高出一挡的测量范围,就在自动换为二档。
若被测频率任高于二档的测量范围,则输出一报警信号。
可自动换挡基准计时模块的VHDL源程序如下:
ENTITYmux3IS
PORT(SEL:
INSTD_LOGIC_VECTOR(3DOWNTO0);
SOUT:
OVER:
IN0:
IN1:
IN2:
FLAG:
OUTSTD_LOGIC_VECTOR(2DOWNTO0)
);
ENDmux3;
ARCHITECTUREoneOFmux3IS
PROCESS(IN0,IN1,IN2,SEL)
CASESELIS
WHEN"
0000"
=>
SOUT<
=IN0;
OVER<
FLAG<
001"
0001"
=IN1;
010"
0010"
=IN2;
100"
WHENOTHERS=>
000"
ENDCASE;
图中将所有计数器的清零信号接地,因为清零信号为高电平有效,接地信号一直保持低电平,这样保证计数器不会被清零,一直正常工作。
所有计数器的使能端需要一个高电平信号EN使其一直保持正常工作。
最后一个计数器并不属于实现基准信号换挡功能的计数器组,它直接为三选一选择器mux3服务,统计来自4位十进制计数器模块的最高位进位信号的个数。
Y输出端输出已经调整了的适合于被测频率的基准时钟信号。
图3.6是其的波形仿真图。
图中SEL是通道选择控制端,当SEL为“0000”是选择IN0,为“0001”时选择IN1,为0010时选择IN2。
图中FLAG的作用是输出指示用,用于驱动发光二极管,显示当前频率计的档位。
OVER是报警信号,当测量范围溢出时,使报警电路工作。
图3.6可自动换挡基准计时模块的仿真波形图
3、锁存模块的设计
锁存模块的功能是将4个十进制计数器的数据,在LOAD信号有效时(LOAD=1)锁存到寄存器中,其VHDL源程序如图所示:
ENTITYREG16IS
PORT(DIN0:
DIN1:
DIN2:
DIN3:
LOAD:
DOUT0:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
DOUT1:
DOUT2:
DOUT3:
ENDREG16;
ARCHITECTUREoneOFREG16IS
PROCESS(LOAD)
IFLOAD'
eventandLOAD='
DOUT0<
=DIN0;
DOUT1<
=DIN1;
DOUT2<
=DIN2;
DOUT3<
=DIN3;
ENDone;
相对来说,锁存模块是最简单的,它的波形仿真如图3.7所示:
图3.7:
锁存模块的波形仿真图
4、译码显示模块的设计与实现
数字逻辑系统中常用的显示器件是数码管,半导体是数码管的外形和等效电路如图6-27所示,其每一个字段都是一个发光二级管(LightEmittingDiode,LED),因而也称之为LED数码管或LED显示器。
LED数码管用7段发光二极管(带小数点时为8段)来显示数字,每一段都是一个发光二极管,一般把所有段的相同一端相连,连接到地(共阴极接法)或者是连接到电源(共阳极接法)。
共阴级LED数码管的公共端连接到地,另一端分别接一个限流电阻后再接到控制电路的信号端,当信号端为高电平时,该段即被点亮,否则不亮。
共阳极接法则相反,公共端连接到电源,另一端分别接一个限流电阻后再接到控制电路的信号端,只有信号端为低电平时才被点亮,否则不亮。
数码管的扫描方式有两种:
静态扫描和动态扫描。
静态扫描方式简单,动态扫描方式节约资源。
从资源角度出发,这里采用动态扫描方式。
采用扫描方式来实现LED数码管动态显示,控制好数码管之间的延时是相当重要。
根据人眼视觉暂留原理,LED数码管每秒的导通16次以上,人眼就无法分辨LED数码管短暂的不亮,认为是一直点亮的(其实LED数码管是以一定频率在闪动的)。
但是,延时(导通频率)也不是越小越好,因为LED数码管达到一定亮度需要一定时间。
如果延时控制的不好则会出现闪动,或者亮度不够。
据经验,延时0.005秒可以达到满意的效果。
另外,显示的字符有变化时,可在延时到达后送一个低电平(共阴极数码管)让LED数码管先短暂熄灭,再显示下一个字符,可使在视觉上字符的变化更清晰。
7段数码显示译码器的VHDL设计
该模块将显示寄存器的四位BCD数字符译成7段码,其VHDL源程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitydisplayis
port(in3,in2,in1,in0:
instd_logic_vector(3downto0);
sout:
outstd_logic_vector(6downto0);
SEL:
OUTSTD_LOGIC_VECTOR(1DOWNTO0);
instd_logic
enddisplay;
architectureaofdisplayis
signals:
std_logic_vector(1downto0);
signallout4:
std_logic_vector(3downto0);
begin
process(clk)
if(clk'
eventandclk='
)then
if(s="
)then
s<
elses<
=s+1;
endif;
sel<
=s;
CASEsIS
WHEN"
lout4<
=in0;
01"
=in1;
10"
=in2;
=in3;
WHENOTHERS=>
NULL;
ENDCASE;
endif;
endprocess;
sout<
1111110"
whenlout4<
else
"
0110000"
1101101"
else
1011111"
011"
1110000"
1111111"
101"
1110011"
110"
111"
XXXXXXX"
;
enda;
程序中,din是0~9的BCD码输入,dout为译码后的7段数据信号,SEL是数码管的位选信号。
图3.8为其编译仿真后的输出时序波形图。
图中的CLK接1KHZ的输入时针,其由分频器分频后得到。
图3.8:
译码显示模块的仿真波形;
3、频率计电路顶层原理图的设计和仿真
(1)、频率计主体电路顶层原理图设计
在成功完成低层单元电路模块设计仿真后,可根据测频原理框图,可完成图3.7所示的频率计电路顶层原理图的设计文件。
该电路中定时信号模块、控制信号发生器模块、4位十进制计数器模块、寄存显示模块为前面设计低层单元电路模块。
clk为系统基准输入信号;
FIN为待测频率信号,本设计测试中用3个发光二级管表示量程状态显示;
OVER是进位扩展信号,用于超量程提示功能,在超出目前量程档次时发出报警信号,驱动LED发光报警。
在QuartusII利用原理图输入对频率计电路顶层原理图TOP.qpf编译仿真正确无误后,即可生成如图所示图3.9所示。
需要说明的是图中的输出LOAD并不需要,是为了便于仿真而添加的。
图3.9:
量程自动转换数字式频率计的顶层设计图
(2)、仿真设计
在QuartusII中选择波形编辑器,创建一个新的波形文件,考虑到再标准时针为10M下,至少要进行长达2S的波形仿真,这样仿真时间会很长,所以这里10MHz分频到1KHz部分不考虑,直接用1KHz信号作为时针。
图中,FIN为待测频率信号,在仿真时设其频率分别为100Hz、10KHz和0.9M;
CLK1K为标准频率信号,频率为1KHZ,图3.10的(a)(b)(c)分别给出1,2,3档的仿真波形图。
图3.10(a):
FIN=100Hz时的波形仿真图
图3.10(b):
FIN=10KHz时的波形仿真图
图3.10(c):
FIN=0.9M时的波形仿真图
四、总结
通过这次设计是我熟练地掌握了QUARTUSII软件的基本使用方法,对VHDL语言的编程方法和编程技巧有了更深层次的理解,对FPGA的了解及应用有了更深层的认识,对频率计有很更深的认识并掌握了频率计的设计过程。
在完成此次设计的过程中,遇到了很多困难,但最终都一一攻克。
通过这次课程设计,自己的EDA设计能力有了很大的提高。
参考文献
[1]潘松,黄继业.2006.EDA技术实用教程—VHDL版(第三版).北京:
科学出版社
[2]潘松,黄继业.2003.EDA技术与应用(第二版).北京:
清华大学出版社
[3]徐光辉,程东旭,2005.黄如.基于FPGA的嵌入式开发与应用.北京:
电子工业出版社
[4]杨龙麟.2009.电子测量技术(第三版)北京:
人民邮电出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 量程 自动 转换 数字式 频率计 设计