等精度频率计设计<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
基于传统测频原理的频率计的测量精度将随被测信号的频率的下降而降低,在实用中有较大的局限性,而等精度频率计不但具有较高的测量精度,而且在整个频率区域能保持恒定的测试精度。在此完成的设计项目可达到的指针为:
(1) 频率测试功能:频率范围0.1Hz~100MHz。测量精度:测频全域相对误差恒为百万分之一。
(2) 脉宽测试功能:测试范围0.1μs~1μs,测量精度0.01μs。
(3) 占空比测试功能:测试精度1%~99%。
主系统组成
等精度频率计的主系统如图1所示,主要有5个部分构成:
(1) 信号整形电路。用于对待测信号进行放大很和整形,以便作为PLD器件的输入信号。
(2) 测频电路。是测频的核心电路模块,可以由FPGA等PLD器件担任。100MHz的标准频率信号(如果是由于优化问题,可接50M或更低频率的晶振)直接进入FPGA。
(3) 单片机电路模块。由于控制FPGA的测频操作和读取测频数据,并作出相应处理。单片机的P0口直接读取测试数据,P2口向FPGA发控制命令。
(4) 键盘模块。可以用5个键执行测试控制,一个是复位键,其余是命令键。
(5) 数码管显示模块。可以用7个数码管显示测试结果,最高可表示百万分之一的精度。考虑到提高单片机IO口的利用率,降低编程复杂性,提高单片机的计算速度以及降低数码显示器对主系统的干扰,可以采用串行静态现实方式。
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />图1 频率计主系统电路组成
测频原理
等精度测频的实现方法可以简单地用图2和波形图3来说明。图2中预置门信号CL可由单片机发出,CL的时间宽度对测频精度较小,所以可以在1秒至0.1秒间选择,在此设其宽度为Tpr。BZH和TF是两个可控的32位高速计数器,BENA和ENA分别是它们的计数允许信号端,高电平有效。标准频率信号从BZH的时钟输入端BCLK输入,设其频率为Fs;经整形后的被测信号从与BZH相似的32位计数器TF的时钟输入端BCLK输入,设其频率为Fxe,测量频率为Fx。
图2 等精度频率计主控结构
测频开始前,首先发出一个清0信号CLR,使两个计数器和D触发器置0,然后由单片机发出允许测频命令,即令预置门控信号CL为高电平,这时D触发器要一直等到被测信号的上沿通过时Q端才被置1(即令START为高电平),与此同时,将同时启动计数器BHZ和TF,进入图3所示的“计数允许周期”。
在次期间,BHT和TF分别对被测信号(频率为Fx)和标准频率信号(频率为Fs)同时计数。当Tpr秒后,预置门信号被单片机置为低电平,但此时两个计数器仍没有停止计数,一直等到随后而至的被测信号的上升沿来到时,才通过D触发器将这两个触发器同时关闭。由图3可见,CL的宽度和发生的时间都不会影响计数能使信号(STRAT)允许计数的周期总是恰好等于待测信号TCLK的完整周期数,这正是确保TCLK在任何频率条件下都能保持恒定精度的关键。而且,CL宽度的改变以及随机的出现时间造成的误差最多只有BCLK信号的一个时钟周期,如果BCLK由精确稳定的晶体振荡器(100MHz)发出,则任何时刻的绝对测量误差只有1亿分之一秒。
设在一次预置门时间Tpr中被测信号计数值为Nx,对标准频率信号的计数值为Ns,则下式成立:
Fx/Nx = Fs/Ns
不难看到测得的频率为:
Fx = (Fs/Ns)*Nx
最后通过控制SEL选择信号和64位至8位的多路选择器MUX64-8,将计数器BHZ和TF中的两个32位数据分8次读入单片机并按式1-2进行计算和结果显示。
FPGA/CPLD开发的VHDL设计
根据一逻辑原理图2、功能波形图3,以及以上给出的测频原理声明,可以比较容易地写出相应的VHDL功能描述了。例1即为等精度频率计的VHDL完整描述,以通过了综合和硬件测试,可直接应用。例1中还包括了脉宽和占空比的测试功能。
根据图1的连接方式,例1与单片机可以按照如下方式接口:
(1) 单片机的P0口接8为数据DATA[7..0],负责读取测频数据。
(2) 单片机可以通过信号START,了解计数是否结束,以确定何时可以读取数据。
(3) EEND的功能与START基本相同,当其由低电平变到高电平时指示脉宽计数结束。
(4) P2.2、P2.1、P2.0、和SEL[2..0]相接,用于控制多路通道的数据选择。当SEL分别为“100”、“101”、“110”、“111”时,由低8位到高8位读出标准频率计数值;当SEL分别为“100”、“101”、“110”、“111”时,由低8位到高8位读出标准频率计数值。
(5) P2.4接清0信号CLR,高电平有效。每一测频率周期开始时,都应该首先清0。
(6) P2.5和P2.6分别接控制信号CL和SPUL。C和SPUL协同控制测试操作。即当SUPL为‘1’时,CL作为预置门控信号,用于测频计数的时间控制(如可取0.5秒);当SPUL为‘0’时,CL作为测脉宽控制信号。这时,CL若为‘1’,测TCLK的高电平脉宽,而当CL为‘0’时,则测TCLK的低电平脉宽。然后分别从DATA 数据口读出BZH对标准频率的计数,即只需令SEL的取值分别为“000”、“001”、“010”、“011”即可。
对于占空比的测量,可以通过测量正反两个脉宽的计数值来获取。设BZH对正脉宽的计数值为N1,对负脉宽的计数值为N2,则周期计数值为N1+N2,于是占空比:
占空比 = N1/(N1+N2)*100% 1-3
例1
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY GWDVPB IS
PROT (BCLK : IN STD_LOGIC;
TCLK : IN STD_LOGIC;
CL : IN STD_LOGIC;
SPUL : IN STD_LOGIC;
START : OUT STD_LOGIC;
EEND : OUT STD_LOGIC;
SEL : IN STD_LOGIC_VECTOR ( 2 DOWNTO 0 );
DATA : OUT STD_LOGIC_VECTOR ( 7 DOWNTO 0 );
END GWDVPB;
ARCHITECTURE BEHAV OF GWDVPB IS
SIGNAL BZQ,TSQ : STD_LOGIC_VECTOR (31 DOWNTO 0 );
SIGNAL ENA,PUL : STD_LOGIC;
SIGNAL MA,CLK1,CLK2,CLK3 : STD_LOGIC ;
SIGNAL Q1,Q2,Q3,BENA : STD_LOGIC ;
SIGNAL SS : STD_LOGIC_VECTOR( 1 DOWNTO 0 );
BEGIN
START <=ENA;
DATA <=BZQ ( 7 DOWNTO 0 ) WHEN SEL = “000” ELSE
BZQ ( 15 DOWNTO 8 ) WHEN SEL = “001” ELSE
BZQ ( 23 DOWNTO 16 ) WHEN SEL = “010” ELSE
BZQ ( 31 DOWNTO 24 ) WHEN SEL = “011” ELSE
TSQ ( 7 DOWNTO 0 ) WHEN SEL = “100” ELSE
TSQ ( 15 DOWNTO 8) WHEN SEL = “101” ELSE
TSQ ( 23 DOWNTO 16 ) WHEN SEL = “110” ELSE
TSQ ( 31 DOWNTO 24 ) WHEN SEL = “111” ELSE
TSQ (31 DOWNTO 24 ) ;
BZH : PROCESS ( BCLK , CLR )
BEGIN
IF CLR = ‘1’ THEN BZQ <= ( OTHERS=>’0’ ) ;
ELSIF BCLK’ EVENT AND BCLK = ‘1’ THEN
IF BENA = ‘1’ THEN BZQ <= BZQ + 1 ;
END IF ;
END IF;
END PROCESS ;
TF : PROCESS ( TCLK , CLR ,ENA )
BEGIN
IF CLR = ‘1’ THEN TSQ <= ( OTHERS =>’0’ );
ELSIF TCLK’EVENT AND TCLK = ‘1’ THEN
IF ENA = ‘1’ THEN TSQ <= TSQ +1 ;
END IF ;
END IF ;
END PROCESS;
PROCESS ( TCLK, CLR )
BEGIN
IF CLR = ‘1’ THEN ENA <= ‘0’ ;
ELSIF TCLK’EVENT AND TCLK = ‘1’ THEN ENA <= CL ;
END IF ;
END PROCESS;
MA <= ( TCLK AND CL ) OR NOT (TCLK OR CL ) ;
CLK1 <= NOT MA ; CLK2 <= MA AND Q1 ; CLK3 <= NOT CLK2 ;
SS <= Q2 & Q3 ;
DD1 : PROCESS ( CLK1 ,CLR )
BEGIN
IF CLR = ‘1’ THEN Q1 <= ‘0’ ;
ELSIF CLK1’EVENT AND CLK1 = ‘1’ THEN Q1 <= ‘1’ ;
END IF ;
END PROCESS;
DD2 :PROCESS ( CLK2 ,CLR )
BEGIN
IF CLR = ‘1’ THEN Q2 <= ‘0’ ;
ELSIF CLK2’EVENT AND CLK2 = ‘1’ THEN Q2 <= ‘1’ ;
END IF ;
END PROCESS;
DD3 : PROCESS ( CLK3 ,CLR )
BEGIN
IF CLR = ‘1’ THEN Q3 <= ‘0’ ;
ELSIF CLK3’EVENT AND CLK3 = ‘1’ THEN Q3 <= ‘1’ ;
END IF ;
END PROCESS;
PUL <= ‘1’ WHEN SS = “10” ELSE
‘0’ ;
EEND <= ‘1’ WHEN SS = “11” ELSE
‘0’ ;
BENA <= ENA WHEN SPUL = ‘1’ ELSE
PUL WHEN SPUL = ‘0’ ELSE
PUL ;
END BEHAV ;
单片机程序中可以根据以上给出的控制方法进行测量控制,在读取相应的数据后,按照式1—2和1—3进行计算,可以用浮点或定点方法计算。
用户1644825 2009-10-16 13:17
用户217962 2009-8-22 11:16
用户176734 2009-5-15 09:31