资源描述
数字系统设计实践
——等精度频率测量技术
学 院:
专 业:
成 员:
学 号:
指导教师
完成日期
摘要:
频率计的主要功能是准确测量出待测频率的频率、周期、脉宽及占空比。在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量就显得更为重要。测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。
关键字:
频率、周期、标准时钟、乘除运算、分频、十进制显示、锁存
方案比较:
(1)用单片机实现:
等精度数字频率计涉及到的计算包括加,减,乘,除,耗用的资源比较大,用一般中小规模CPLD/FPGA芯片难以实现。因此,我们选择单片机和CPLD/FPGA的结合来实现。电路系统原理框图如图所示,其中单片机完成整个测量电路的测试控制,数据处理和显示输出;CPLD/FPGA完成各种测试功能;键盘信号由AT89C51单片机进行处理,它从CPLD/FPGA读回计数数据并进行运算,向显示电路输出测量结果;显示器电路采用七段LED动态显示,由8个芯片74LS164分别驱动数码管。
(2) FPGA的实现
频率计用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。通常情况下计算每秒内待测信号的脉冲个数,此时我们称闸门时间为1s。闸门时间也可以大于或小于1s。闸门时间越长,得到的频率值就越准确,但闸门时间越长则每测一次频率的间隔就越长。闸门时间越短,测得频率值刷新就越快,但测得的频率精度就受影响。
基于FPGA的等精度频率计有运算速度快、系统较稳定、测量范围广等特点。其中主要应用到EDA(电子设计自动化)技术。伴随着集成电路技术的发展,EDA逐渐成为重要的设计手段。已经广泛应用于模拟与数字电路系统等许多领域。EDA是一种实现电系统或电子产品自动化设计的技术,它与电子技术、微电子技术的发展密切相关,它吸收了计算机科学领域的大多数最新研究成果,以高性能的计算机为工作平台,促进了工程发展。本设计利用FPGA进行测频计数,单片机实施控制实现频率计的设计过程。该频率计利用等精度的设计方法,克服了基于传统测频原理的频率计的测量精度随被测信号频率的下降而降低的缺点。等精度的测量方法不但具有较高的测量精度,而且在整个测频区域内保持恒定的测试精度。
一、 设计任务与要求
1.1 设计任务:
设计一个简易等精度频率计。
1.2 要求:
a.测量原理 多周期同步测量(等精度测量)
b.测量范围 信号:方波;幅度:TTL电平
频率:1Hz~1MHz
c.测试误差 ≤0.1%(全量程)
d.闸门时间:~1s,响应时间:~2s
乘除运算:单片机、FPGA、计算器
计算:时钟频率
扩展:脉宽、周期、占空比测量
显示:十进制(分量程?显示位数?)
二、 方案说明
2.1基本原理说明:
在同步控制门的作用下,产生一个与被测信号同步的闸门信号来改进低频段测量的不准确性。由于同步控制门的同步作用,事件记录器记录的Nx值不存在误差,但时钟信号与闸门信号无确定的相位关系,时间记录器记录的N0值存在±1的误差。
2.2方案说明:
输入端:
显示器清零端clr
外部被测信号Fx
输出端:
以十进制的形式显示被测信号的频率
误差估计:
误差与被测频率fx无关,这就是等精度测量方法。
|误差|=1/(T*fs)≤0.1%,预闸门脉宽T为1s,fs为10KHz,误差约为万分之一。
预置闸门脉冲发生器
十进制显示
D Q
C
同步电路
计数器A
Nx=fx*T
输入信号FX
闸门A
同步化后的
清零端clr
运算电路
Fx=Nx*fc/Nc
闸门脉冲Q
时钟发生器Fc
计数器B
Nc=fc*T
闸门B
三. 系统设计
3.1系统模块:
1.输入模块:
图2-4
模块说明:
Res系统清零端
Fx由信号发生器产生被测的方波信号
Fc芯片外时钟发生器,根据误差要求设定为10KHz
2. 分频器模块:
图2-5
模块说明:
由Fc作为时钟脉冲,仿照单片机的延时电路和计数器,Tc=1/10000s,跳10K下控制输出翻转一下,从而产生脉宽为1s的门控信号。
library ieee;
use ieee.std_logic_1164.all;
entity fenpin is
port(
clk,nr: in std_logic;
clk1: out std_logic);
end fenpin;
architecture a of fenpin is
signal f: integer range 0 to 1048575;
signal c: std_logic;
begin
process (clk,nr)
begin
if nr = '1' then
f<=0;c<='0';
elsif (clk'event and clk = '1')then
if f<9999 then
f<=f+1;
else
f<=0;
c<= not c;
end if;
end if;
end process;
clk1<=c;
end a;
3. 同步电路模块:
图2-6
模块说明:
产生同步的闸门脉冲信号。
library ieee;
use ieee.std_logic_1164.all;
entity dchufa is
port(
cp,n: in std_logic;
q: out std_logic);
end dchufa;
architecture a of dchufa is
begin
process (cp,n)
begin
if (cp'event and cp = '1')then
q<=n;
end if;
end process;
end a;
4.门控闸门计数模块:
图2-7
模块说明:
利用计数器分别求出在1s的门控信号内被测信号fx与系统时钟fc所经过的个数Nx和Nc,等将数据存入寄存器后,经过三个非门的时钟闸门信号对计数器进行清零,以免计数器进行累加。位数说明见运算模块。
library ieee;
use ieee.std_logic_1164.all;
entity jicunqi1 is
port(
cp: in std_logic;
m: in integer range 0 to 1048575;
o: out integer range 0 to 1048575);
end jicunqi1;
architecture a of jicunqi1 is
begin
process (m,cp)
begin
if (cp'event and cp = '0')then
o<=m;
end if;
end process;
end a;
5.运算模块:
图2-8
模块说明:
Fx=Nx*fc/Nc,先将Nc*10K,然后放大1000倍,将小数部分升为整数部分,保证计算的精度。1M小于1024*1024,即2的20次方,而且十进制的1000000转成二进制的11110100001001000000需要20位,换言之二进制的11111111111111111111转成十进制的1048575为理论最大被测频率1.04MHz,同理10K——10011100010000,要14位。
6.除法器进制转化模块:
图2-9
模块说明:
该模块可处理最大111111111111111111111111111111(2进制)30位——1.07M(10进制),从运算模块出来的最大也就1.04M 48位,高位均为零,为了节省资源取后30位,不影响精度。
仿照十进制的处理方法,除数为10,一位一位的输出。
为了节省资源改进了除法器进制转化模块,说明如下:
被除数
序号
10进制
2进制
位数
余数
商
0
9999999999
1001010100000010111110001111111111
34
1
999999999
111011100110101100100111111111
30
9
99999999
2
99999999
101111101011110000011111111
27
9
9999999
3
9999999
100110001001011001111111
24
9
999999
4
999999
11110100001000111111
20
9
99999
5
99999
11000011010011111
17
9
9999
6
9999
10011100001111
14
9
999
7
999
1111100111
10
9
99
8
99
1100011
7
9
9
9
9
1001
4
9
0
10
0
0
0
0
表2-1
按照表格对除法器进行设计,避免了资源的浪费。
7.控制输出模块:
图2-10
模块说明:
参照表2-1,经过第九个除法器后的商即为data10,若data10大于0,那么结果的整数位数为(10-3)——减去前面用乘法器放大的位数,即7位,为1M级的,若data10不大于0,如表,结果为9-3=6位,最高位为data9,次位为data8,……直到data6,最后输出整数的位数。
library ieee;
use ieee.std_logic_1164.all;
entity shuchu is
port(
data1,data2,data3,data4,data5,data6,data7,data8,data9,data10:in integer range 0 to 15;
res: in std_logic;
q1,q2,q3,q4,q5: out integer range 0 to 15);
end shuchu;
architecture a of shuchu is
begin
process (data1,data2,data3,data4,data5,data6,data7,data8,data9,data10)
begin
if res = '1' then
q1<=0;q5<=0;q4<=0;q3<=0;q2<=0;
else
if data10>0 then
q1<=7;q5<=data10;q4<=data9;q3<=data8;q2<=data7;
elsif data9>0 then
q1<=6;q5<=data9;q4<=data8;q3<=data7;q2<=data6;
elsif data8>0 then
q1<=5;q5<=data8;q4<=data7;q3<=data6;q2<=data5;
elsif data7>0 then
q1<=4;q5<=data7;q4<=data6;q3<=data5;q2<=data4;
elsif data6>0 then
q1<=3;q5<=data6;q4<=data5;q3<=data4;q2<=data3;
elsif data5>0 then
q1<=2;q5<=data5;q4<=data4;q3<=data3;q2<=data2;
elsif data4>0 then
q1<=1;q5<=data4;q4<=data3;q3<=data2;q2<=data1;
else
q1<=0;q5<=0;q4<=0;q3<=0;q2<=0;
end if;
end if;
end process;
end a;
四、 系统测试
系统时钟fc
被测信号fx
显示结果
实测值fx
误差计算
10KHz
1.396 Hz
13951
1.395 Hz
-0.07%
9.356 Hz
93521
9.352 Hz
-0.04%
94.47 Hz
94462
94.46 Hz
-0.01%
944.8 Hz
94493
944.9 Hz
+0.10%
10.87 KHz
10875
10.87 KHz
0.00%
952.8 KHz
85276
952.7 KHz
+0.10%
1.003 MHz
10037
100.3 MHz
0.00%
经系统测试,所设计的等精度频率计测量范围达到:1Hz~1MHz,全量程误差≤0.1%。达到基本设计要求。
五. 参考文献:
[1]黄智伟.FPGA系统设计与实践[M].北京:电子工业出版社,2005.
[2]潘松.VHDL实用教程[M] .成都:电子科技大学出版社,2007.
[3] SOPC/EDA综合课程设计指导书
[4] 徐光军,徐光辉.CPLD/FPGA 的开发与应用. 北京:电子工业出版社,2002
[5]刘德亮,王竹林,尉广军.基于FPGA高精度频率测量仪的设计 [J].河北工业科技,2010-1:30-31.
展开阅读全文