当前位置:文档之家› 数字频率计的设计

数字频率计的设计

一:摘要在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量就显得更为重要。

测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。

电子计数器测频有两种方式:一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法。

频率计主要由四个部分构成:时基(T)电路、输入电路、计数显示电路以及控制电路。

在一个测量周期过程中,被测周期信号在输入电路中经过放大、整形、微分操作之后形成特定周期的窄脉冲,送到主门的一个输入端。

主门的另外一个输入端为时基电路产生电路产生的闸门脉冲。

在闸门脉冲开启主门的期间,特定周期的窄脉冲才能通过主门,从而进入计数器进行计数,计数器的显示电路则用来显示被测信号的频率值,内部控制电路则用来完成各种测量功能之间的切换并实现测量设置。

二:关键词周期;频率;数码管,锁存器,计数器,中规模电路,定时器三:概述EDA技术是以大规模可编程逻辑器件为设计载体,以硬件语言为系统逻辑描述的主要方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件设计的电子系统到硬件系统的设计,最终形成集成电子系统或专用集成芯片的一门新技术。

其设计的灵活性使得EDA技术得以快速发展和广泛应用。

以QUARTUSII软件为设计平台,采用VHDL语言实现数字频率计的整体设计。

伴随着集成电路(IC)技术的发展,电子设计自动化(EDA)逐渐成为重要的设计手段,已经广泛应用于模拟与数字电路系统等许多领域。

EDA的一个重要特征就是使用硬件描述语言(HDL)来完成的设计文件,VHDL语言是经IEEE确认的标准硬件语言,在电子设计领域受到了广泛的接受。

四:软件介绍在本设计中使用的软件有Protel99SE、Quartus II 4.04.1 .1Protel的简介Protel99 SE是Protel公司近几年来致力于Windows平台开发的拳头产品。

它能实现电学概念设计到输出物理生产数据,以及这之间的所有分析、验证和设计数据管理。

今天的Protel99 SE软件已不是单纯的PCB(印刷电路板)设计工具,而是一个系统工具。

它覆盖了以PCB为核心的全部物理设计。

4.1.2 Protel99 SE的划分Protel99 SE共分5个模块,分别是原理图设计、PCB设计(包含信号完整性分析)、自动布线器、原理图混合信号仿真、PLD设计。

4.1.3 Protel99 SE的功能Protel99 SE软件具有其它EDA工具软件(例:multisim)的功能。

这些功能是:(1)原理布图(2)PCB自动或人工布线(3)SPICE电路仿真革命性的特点:(1)互动的电路仿真 :用户甚至可以实时采用诸如RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件。

(2)仿真处理器及其外围电路 :可以仿真51系列、AVR、PIC、ARM、等常用主流单片机。

还可以直接在基于原理图的虚拟原型4.2.1Quartus IIQuartus II 是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。

具有运行速度快,界面统一,功能集中,易学易用等特点。

功能Quartus II提供了完全集成且与电路结构无关的开发包环境,具有数字逻辑设计的全部特性,包括:可利用原理图、结构框图、VerilogHDL、AHDL和VHDL完成电路描述,并将其保存为设计实体文件;芯片(电路)平面布局连线编辑;LogicLock增量设计方法,用户可建立并优化系统,然后添加对原始系统的性能影响较小或无影响的后续模块;功能强大的逻辑综合工具;完备的电路功能仿真与时序逻辑仿真工具;定时/时序分析与关键路径延时分析;可使用SignalTap II逻辑分析工具进行嵌入式的逻辑分析;支持软件源文件的添加和创建,并将它们链接起来生成编程文件;使用组合编译方式可一次完成整体设计流程;自动定位编译错误;高效的期间编程与验证工具;可读入标准的EDIF网表文件、VHDL网表文件和Verilog网表文件;能生成第三方EDA软件使用的VHDL网表文件和Verilog网表文件。

五:电路组成5.1 时基电路5.2 放大整形电路为保证测量精度,在整形电路的输入端加一前置放大器。

对幅值较低的被测信号经放大后再送入整形器整形。

如图3.2.2为放大整形电路原理图。

此电路采用晶体管3DG100与74LS00等组成,其中3DG100为放大器,可对周期信号进行放大再传入整形器中对信号进行整形。

5.2.1 译码器模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity display isport(data_in:in std_logic_vector(3 downto 0);data_out:out std_logic_vector(0 to 3));end entity display;architecture one of display issignal indata:std_logic_vector(3 downto 0);beginprocess(data_in)beginindata<=data_in;case indata iswhen"0000"=>data_out<="0000";when"0001"=>data_out<="0001";when"0010"=>data_out<="0010";when"0011"=>data_out<="0011";when"0100"=>data_out<="0100";when"0101"=>data_out<="0101";when"0110"=>data_out<="0110";when"0111"=>data_out<="0111";when"1000"=>data_out<="1000";when"1001"=>data_out<="1001";when others=>data_out<="1111";end case;end process; end one;5.3 逻辑控制电路逻辑控制电路的作用主要是控制主控门的开启和关闭,同时也控制整机逻辑关系。

本设计采用74LS123组成逻辑控制电路,先启动脉冲置成1,其余触发器置成0,然后时基电路传入脉冲,控制电路开始工作。

被测信号通过闸门进入计数电路,于是计数器译码器同时工作,从而记下所测信号频率值。

当控制电路转为其他状态时,闸门关闭,计数器停止工作,数码管继续显示所测频率值。

直到有一次循环,计数器清零,数码管显示消失,到此为止,频率计完成一次测量。

脉冲信号可由两个单稳态触发器74LS123产生,它们的脉冲宽度由电路的时间常数决定。

5.4 计数器各个挡之间的转换应遵循设计要求,要根据在时基有效时间内的计数值进行判断。

计数器可以直接定义成一个整型信号,这样计数器计数(即加1)就十分方便,只要使用语句“计数器<=计数器+1;”就可以。

但是这个计数值要作为显示输出,就要将这个计数器用个位、十位、百位分开表示,而且要遵循加法“逢十进一”的规则。

这样可以直接通过7段译码器进行显示。

因为在不同的挡位,小数点的位置是不同的,所以小数点的显示以所在挡为判断条件。

由于频率计的测量范围10~9999Hz,因此采用十进制计数器74LS90,它不仅可用于对脉冲进行计数,还可用于分频;此电路则需分频,N位进制计数器就是N 分频器。

被测信号由闸门开通送入计数器,记录所测信号频率值传入译码显示电路中,显示器显示测得频率值;待闸门关闭,计数器停止工作;电路则继续工作进行下次循环,计数器清零,显示器数值消失,频率计完成一次测量。

被测信号经过放大整形电路变成方波,加到门控电路产生闸门信号,若sTXμ1=。

则计数器记得的脉冲数10000个。

若以毫秒为单位,则显示器上的读数为10.000。

以上分析可见,频率计测周期的基本原理正好与测频相反,即被测信号用来控制闸门电路的开通与关闭,标准时基信号作为计数脉冲。

5.4.1 计数器模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity frequency isport(treset:in std_logic;tclk:in std_logic;tsig:in std_logic;tkeep1:out std_logic_vector(3 downto 0);tkeep2:out std_logic_vector(3 downto 0);tkeep3:out std_logic_vector(3 downto 0));end entity frequency;architecture one of frequency issignal tcou1:std_logic_vector(3 downto 0);signal tcou2:std_logic_vector(3 downto 0);signal tcou3:std_logic_vector(3 downto 0);beginctrcou:process(treset,tclk)beginif treset='1' thentcou1<="0000";tcou2<="0000";tcou3<="0000";elseif tclk'event and tclk='1' thenif tsig='1' thenif tcou3="1010" thentcou3<="1010";elseif tcou1="1001" and tcou2="1001" and tcou3="1001" thentcou1<="0000";tcou2<="0000";tcou3<="1010"; elsif tcou1="1001" and tcou2="1001" thentcou1<="0000";tcou2<="0000";tcou3<=tcou3+1;elsif tcou1="1001" thentcou1<="0000";tcou2<=tcou2+1;else tcou1<=tcou1+1;end if;end if;elsetcou1<="0000";tcou2<="0000";tcou3<="0000";end if;end if;end if;end process ctrcou;oputctr:process(treset,tsig)beginif treset='1' thentkeep1<="0000";tkeep2<="0000";tkeep3<="0000";elseif tsig'event and tsig='0' thentkeep1<=tcou1;tkeep2<=tcou2;tkeep3<=tcou3;end if;end if;end process oputctr;end one;5.5 锁存器锁存器(Latch)是一种对脉冲电平敏感的存储单元电路,它们可以在特定输入脉冲电平作用下改变状态。

相关主题