综合设计数字频率计.docx
《综合设计数字频率计.docx》由会员分享,可在线阅读,更多相关《综合设计数字频率计.docx(10页珍藏版)》请在冰豆网上搜索。
![综合设计数字频率计.docx](https://file1.bdocx.com/fileroot1/2022-11/24/16fde180-ccc0-46e6-b089-241714cefa6c/16fde180-ccc0-46e6-b089-241714cefa6c1.gif)
综合设计数字频率计
数字频率计设计
摘要:
数字频率计是直接用十进制数字来显示被测信号频率的一种测量装置。
它不仅可以测量正弦波、方波、三角波、尖脉冲信号和其他具有周期特性的信号的频率,而且还可以测量它们的周期。
经过改装,可以测量脉冲宽度,做成数字式脉宽测量仪;可以测量电容做成数字式电容测量仪;在电路中增加传感器,还可以做成数字脉搏仪、计价器等。
因此数字频率计在测量物理量方面应用广泛。
本设计用VHDL在CPLD器件上实现数字频率计测频系统,能够用十进制数码显示被测信号的频率,能够测量正弦波、方波和三角波等信号的频率,而且还能对其他多种物理量进行测量。
具有体积小、可靠性高、功耗低的特点。
数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。
采用VDHL编程设计实现的数字频率计,除被测信号的整形部分、键输入部分和数码显示部分以外,其余全部在一片FPGA芯片上实现,整个系统非常精简,而且具有灵活的现场可更改性。
在不更改硬件电路的基础上,对系统进行各种改进还可以进一步提高系统的性能。
该数字频率计具有高速、精确、可靠、抗干扰性强和现场可编程等优点。
一.频率计概述
所谓频率,就是周期性信号在单位时间(1s)里变化的次数。
本频率计设计测量频率的基本原理是,首先让被测信号与标准信号一起通过一个闸门,然后用计数器计数信号脉冲的个数,把标准时间内的计数的结果,用锁存器锁存起来,最后用显示译码器,把锁存的结果用LED数码显示管显示出来。
根据数字频率计的基本原理,本文设计方案的基本思想是分为五个模块来实现其功能,即整个数字频率计系统分为分频模块、控制模块、计数模块、译码模块和量程自动切换模块等几个单元,并且分别用VHDL对其进行编程,实现了闸门控制信号、计数电路、锁存电路、显示电路等。
本频率计设计还可以测量周期性信号,其基本原理与测量频率的基本原理基本一样,首先让被测信号与标准信号一起通过一个闸门,然后用计数器计数信号脉冲的个数,把被测信号一个周期内标准基准信号的脉冲计数的结果,用锁存器锁存起来,最后用显示译码器,把锁存的结果用LED数码显示管显示出来,显示管的读数就是被测信号以标准信号的周期为单位乘积的周期。
二.技术性能指标
1.测量方波周期性信号的频率;
2.接用十进制数字显示测得的频率;
3.测量范围:
0HZ~999999HZ切量程能自动切换;
4.信号幅度范围为-1~+1V,要求一起自动适应;
5.时间:
T〈=1.5S;
6.用CPLD/FPGA可编程逻辑器件实现;
三..频率计的设计原理
1.频率计测量频率的设计原理
频率计测量频率需要设计整形电路使被测周期性信号整形成脉冲,然后设计计数器对整形后的脉冲在单位时间内重复变化的次数进行计数,计数器计出的数字经锁存器锁存后送往译码驱动显示电路用数码管将数字显示出来,需要设计控制电路产生允许计数的门闸信号、计数器的清零信号和锁存器的锁存信号使电路正常工作。
2.频率计测量周期的原理
频率计测量周期需要设计整形电路使被测周期性信号整形成脉冲,然后设计计数器对基准信号在被测信号一个周期内重复变化的次数进行计数,计数器计出的数字经锁存器锁存后送往译码驱动显示电路用数码管将数字显示出来,需要设计控制电路产生允许计数的使能信号、计数器的清零信号和锁存器的锁存信号使电路正常工作,再设计一个量程自动转换电路使测量范围更广。
四.频率计的模块设计
1.4位十进制计数器模块
4位十进制计数器模块包含4个级联十进制计数器,用来对施加到时钟脉冲输入端的待测信号产生的脉冲进行计数,十进制计数器具有集束使能、清零控制和进位扩展输出的功能。
使能信号和清零信号由闸门控制模块的控制信号发生器所产生来对4个级联十进制计数器周期性的计数进行控制。
十进制计数器元件的设计
十进制计数器的程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycount10is
port(clr,clk,en:
instd_logic;
q:
bufferstd_logic_vector(3downto0);
c10:
outstd_logic);
end;
architectureoneofcount10is
begin
process(clk,clr)
begin
ifclr='1'thenq<="0000";
elsifclk'eventandclk='1'then
ifen='1'then
if(q<9)thenq<=q+1;
elseq<="0000";
endif;
endif;
endif;
endprocess;
process(q)
begin
ifq="1001"thenc10<='1';
elsec10<='0';
endif;
endprocess;
end;
在源程序中c10是计数器进位输出;Q[3..0]是计数器的状态输出;CLK是始终输入端;clr是复位控制输入端,当clr=1时,Q[3..0]=0;EN是使能控制输入端,当EN=1时,计数器计数,当EN=0时,计数器保持状态不变。
编译成功后进行仿真,其仿真波形如下:
在项目编译仿真成功后,将设计的十进制计数器电路设置成可调用的元件jishu10.sym,用于以下的顶层设计。
4位十进制计数器的顶层设计
新建一个原理图编辑窗,从当前的工程目录中凋出4个十进制计数器元件jishu10.sym,并按如图所示的4位十进制计数器的顶层原理图完成电路连接。
完成4位十进制计数器的原理图编辑以后,即可进行仿真测试和波形分析,其仿真输出波形如图所示,当RST=0、EN=1是其计数值在0到9999之间循环变化,COUT为计数进位输出信号,作为后面的量程自动切换模块的输入脉冲。
因此仿真结果正确无误,可将以上设计的4位十进制计数器设置成可调用的元件jishu10_4.sym,以备高层设计中使用,其元件符号图如下图所示。
2.控制模块设计
闸门信号的设计
频率计电路工作时先要产生一个计数允许信号(即闸门信号),闸门信号的宽度为单位时间,如1S。
在闸门信号有效时间内,对被测信号计数,即为信号的频率。
该频率计电路的精度取决于闸门信号T。
本设计中选取的基准信号频率为1hz,为了得到1s高电平的周期性闸门信号,本设计采用对频率为1khz基准信号进行2分频,对分频出的信号进行取非变换,这样得到的门闸信号高电平为1秒钟
编译成功后生成元件图如下:
对照其仿真波形,其输出门闸信号高电平为1S,符合设计,将其电路生成如下元件图,以便顶层调用。
控制信号发生器模块
该模块主要根据输入高电平的1S闸门信号,产生计数允许信号EN,该信号的高电平的持续时间即计数允许时间,与输入的门闸控制时钟脉冲周期相同;产生清零信号RST,在计数使能前对计数器先清零;产生存储信号LOAD,在计数结束后,利用上升沿把最新的频率测量值保存在显示寄存器中。
3.锁存器模块
寄存器是在计数结束后,利用触发器的上升沿把最新的频率测量值保存起来,这样在计数过程中可不必一直看着数码管显示器,显示器将最终的频率读数定期进行更新,其输出将作为动态扫描电路的输入。
4位寄存器的VHDL源程序如下
在源程序中LOAD是锁存信号,上升沿触发;din[3..0]是寄存器输入;dout[3..0]
是寄存器输出。
编译仿真后生成元件图如下图,以便顶层模块的调用
五.原理图
仿真波形:
仿真结果中可看出频率计设计满足要求。
六.源程序
1.十进制计数器
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycount10is
port(clr,clk,en:
instd_logic;
q:
bufferstd_logic_vector(3downto0);
c10:
outstd_logic);
end;
architectureoneofcount10is
begin
process(clk,clr)
begin
ifclr='1'thenq<="0000";
elsifclk'eventandclk='1'then
ifen='1'then
if(q<9)thenq<=q+1;
elseq<="0000";
endif;
endif;
endif;
endprocess;
process(q)
begin
ifq="1001"thenc10<='1';
elsec10<='0';
endif;
endprocess;
end;
2.四位寄存器
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityreg4bis
port(load:
instd_logic;
din:
instd_logic_vector(3downto0);
dout:
outstd_logic_vector(3downto0));
end;
architectureoneofreg4bis
begin
process(load,din)
begin
ifload'eventandload='1'then
dout<=din;
endif;
endprocess;
end;
3.二分频模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitytestplis
port(clk:
instd_logic;
tsten:
outstd_logic;
clr_cnt:
outstd_logic;
load:
outstd_logic);
end;
architectureoneoftestplis
signaldiv2clk:
std_logic;
begin
process(clk)
begin
ifclk'eventandclk='1'then
div2clk<=notdiv2clk;
endif;
endprocess;
process(clk,div2clk)
begin
if(clk='0'anddiv2clk='0')then
clr_cnt<='1';
elseclr_cnt<='0';
endif;
endprocess;
load<=notdiv2clk;
tsten<=div2clk;
end;
七.总结
采用常规电路设计数字频率计,所用的器件较多,连线比较复杂,而且存在延时较大、测量误差较大、可靠性低的缺点。
采用复杂可编程逻辑器件,以EDA工具为开发手段、运用VHDL语言编程进行数字频率计的设计,将在系统大大简化的同时,提高仪器整体的性能和可靠性。
我们设计的用FPGA实现的6位数字频率计测频系统,能过用数码显示被测信号的频率。
我们采用VHDL语言编程,用Quartus集成开发环境进行波形仿真、编译,并下载到FPGA中,FPGA的功耗低、速度快。
经测试,该系统性能可靠、测量精确。
通过仿真可以看出,数字频率计的指标性能符合设计要求,所以整体来说还是达到了要求,自我感觉还不错,不过本系统还有以下缺点:
1)不能自适应量程,实现自动转换功能。
2)测量的频率范围有限。
八.心得体会
通过两周的专业综合设计,在复习和巩固课上学过的知识外,也学到了很多新的知识。
其实凭借自己掌握的知识,还是不能很好的做出这个数字频率计的,但是在这两周时间里,自己通过广泛的查阅相关图书,上网查找检索,找到了很多相关的知识和技术,并自己研究学习,把自己的想法和思路通过与资料的结合,做完了这个综合设计。
虽然不是完全自己做的,但是通过学习自己真正的理解和掌握了数字频率计的工作原理和设计思路。
还有就是把以前学习的知识复习了一下,虽然我以前学习过VHDL语言,但是这都实习中还是碰到了一些问题,通过向老师,向同学寻求帮助和在网上,在图书馆查找相关的资料来一点点解决遇到的问题,从中感觉自己对VHDL语言的理解又进了一步!
对硬件描述语言和纯元件语言,如c语言之间的差别又有了更深一层次的理解,不过自我感觉想要对VHDL语言要很熟练的掌握的话,还需要多多的联系才行的。
另外VHDL的系统描述能力虽强,不过编写程序的人也要对底层的电路有一定的了解才能更加得心应手的使用VHDL语言编写出高效率,准确的代码。
通过此次设计,也激发了对软件编程的热情,我们专业目前多数都是从事软件编程工作的,所以这也给我增加了信心,增添了兴趣,觉得自己还是很希望以后可以从事软件编程工作的,所以今后我也会更加努力,学习更多的相关知识,丰富自己。
虽然知识一个专业综合设计,虽然只有短短两周时间,但是却给了我很大的提高。
参考文献:
[1]潘松,黄继业.EDA技术实用教程.科学出版社
[2]楼兴华.FPGA数学电子系统设计与开发实例导航.人民邮电出版社
[3]边计年,薛洪熙译.用VHDL设计电子线路.清华大学出版社
[4]潘松,王国栋.VHDL实用教程.电子科技大学出版社
[5]王锁萍.电子设计自动化教程.电子科技大学出版社
[6]李宗伯.VHDL设计表示和综合.机械工业出版社
[7]宋万杰,罗丰,吴顺君.CPLD技术及其应用.西安电子科技大学出版社
[8]林明权.VHDL数字控制系统设计范例.电子工业出版社
[9]谭会生,瞿遂春.EDA技术综合应用实例与分析.西安电子科技大学出版社
[10]陈雪松,滕立中.VHDL入门与应用.人民邮电出版社