第八讲 等精度测频
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第八讲三、设计实例等精度频率、占空比测量仪
1.综述
传统频率测量方法是对设定的闸门时间内脉冲进行计数,有两个主要因素影响精度,其一是闸门时间的准确度,其二是对低频信号的取整误差,为了消除以上两个因素的影响可选择等精度测频法。但等精度测频法占用可编程器件资源量大,如选用24位计数器的频率计,仅测频部分就占用了EPM7128芯片的百分之九十以上的资源;若选用100MHz标准时钟,其闸门时间仅能选择在0.168s以下,测频范围在6Hz以上,限制了对低频的测量。若要扩大低频量程,需要相应增大可编程器件容量,则体积、功耗和价格相应增加。
本文所述等精度频率、占空比测量仪采用将复杂可编程逻辑器件(CPLD)与低功耗单片机相结合,由CPLD完成高频信号计数,单片机完成低频信号计数、频率和占空比计算和显示控制等功能,即简化了仪器的结构,又扩大了低频量程。如单片机采用长整形变量计数(32位),再加上CPLD中16位计数器,等效为48位计数器构成的等精度测量仪,当选用100MHz标准时钟时,低频范围可达3.55×10-7Hz。
本文所述等精度频率、占空比测量仪结构框图如图8-1所示,CPLD可编程逻辑器件选用的是EPM7064芯片,单片机可根据实际情况选用。
图8-1 等精度频率、占空比测量仪结构框图
单片机发出如下所示控制信号:
CLEAR:SLCE为高时CPLD芯片内各计数器清零信号;SLCE为低时占空比清零和测量启动信号。
SLCE:功能选择控制信号。高电平测频;低电平测占空比。
CONTRL:闸门时间信号。高电平测频;低电平测占空比。
S[2..0]:输出选择控制信号。000—CPLD 输出标准时钟信号四位计数值最低位;001—CPLD 输出标准时钟信号计数值次低位;010—CPLD 输出标准时钟信号计数值第三位;011—CPLD 输出标准时钟信号计数值第四位;100—CPLD 输出被测信号四位计数值最低位;101—CPLD 输出被测信号计数值次低位;110—CPLD 输出被测信号计数值第三位;111—CPLD 输出被测信号计数值第四位。
单片机读入如下所示信号:
BZTC :标准时钟信号计数值进位位。 BCTC :被测信号计数值进位位。 CPEND :测频或测占空比结束信号。 DOUT :测量结果输出值,4位二进制数。
2.等精度测频工作原理
等精度测频工作原理如图8-2所示。闸门时间控制信号Contr 并不直接作用于计数器计数使能端ENA ,而是经D 触发器再作用于ENA ,D 触发器的触发信号为被测频率信号BCclk ,通过此D 触发器消除了被测频率信号取整误差,仿真波形图如图8-3所示。
图8-2 等精度测频工作原理图
图8-3 等精度测频闸门控制信号波形图
由于被测频率信号BCclk 计数值N C 与标准频率信号BZclk 计数值N B 是同一时间计数值,可得如下关系式:
N f
N f
B
B
C
C
(1)
其中:f C 为被测频率信号BCc lk 频率;N C 为被测频率信号BCclk 计数值;f B 为标准频率信号BZclk 频率;N B 为标准频率信号BZc lk 计数值。f B 、频率为已知量,N C 、N B 为测得量,通过关系式(1)即可计算出被测频率。对标准频率信号取整是影响测频精度的重要因素,可通过选择合适闸门时间和提高标准频率信号频率加以抑制。
占空比测量原理是测得被测脉冲高电平标准频率信号计数值N1和低电平标准频率信号计数值N2,占空比q 为:
2
11N N N q +=
(2)
3.CPLD 功能设计
根据以上原理,采用图形法与VHDL 语言混合设计方法对CPLD 进行功能设计,整体功能图如图8-4所示。其中各单元模块功能、内部结构分别介绍如下:
图8-4 CPLD 整体功能图
(1)UP_COUNT 单元:带进位、使能和清零端16位加计数器。具体VHDL 语言程序如下所示。
LIBRARY ieee;
USE ieee.std_logic_1164.ALL; USE ieee.std_logic_unsigned.ALL;
ENTITY up_count IS
PORT (clk,clr,ena : IN Std_logic; tc : OUT Std_logic;
q: INOUT Std_logic_vector(15 DOWNTO 0)
);
END up_count;
ARCHITECTURE behav OF up_count IS
BEGIN
PROCESS( clk,clr )
BEGIN
IF clr = '0' THEN q <= (OTHERS=> '0');
ELSIF clk'EVENT AND clk = '1' THEN
IF q = "0000000000000000" THEN
tc <= '0';
END IF;
IF q = "1111111111111111" THEN
tc <= '1';
END IF;
IF ena = '1' then q <= q + 1; END IF;
END IF;
END PROCESS;
END behav;
(2)MUX32_4单元:32位—4位多路数据输出选择器。具体VHDL语言程序如下所示。
library IEEE;
use IEEE.std_logic_1164.all;
entity mux32_4 is
port (
q: in STD_LOGIC_VECTOR (31 downto 0);
s: in STD_LOGIC_VECTOR (2 downto 0);
Y: out STD_LOGIC_VECTOR (3 downto 0)
);
end mux32_4;
architecture behav of mux32_4 is