等精度频率计设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
等精度频率计设计报告
创新2班(电气0515班)李柱炎
一、频率计的原理
测量频率的方法有三种:
一是测频法,原理是在给定的时间内(比如1s)的时间内,统计被测信号脉冲的个数,即可得出频率。此方法适用于测量高频信号。
二是测周法,原理是测量信号一个周期的时间,周期的倒数即为信号的频率。此方法适用于测量低频信号。
三是多周期同步法,等精度频率计即基于此原理。此方法适用于各种频率。
二、等精度频率计的原理
图1
多周期同步法中,实际的信号闸门时间不是固定的值,而是被测信号的整周期倍,即与被测信号同步,因此消除了对被测信号计数时产生的±1个字误差,测量精度大大提高,而且达到了在整个测量频段的等精度测量,其原理框图和波形图如图1所示。
设na、nb分别为计数器a和b记得的数值,τ'为闸门时间,则
na=τ'·fx(1)
nb=τ'·f0(2)
f X/f0=na/nb
计数器a的计数脉冲与闸门的开闭是完全同步的,因而不存在±1个字的计数误差,由式(3)微分可得:
dnb=±1,τ'=nb/f0(5)
得到测量分辨率:
dfx/fx=±1/(τ'×f0)(6)
由式(6)可以看出,测量分辨率与被测频率的大小无关,仅与取样时间及时基频率有关,可以实现被测频带内的等精度测量。取样时间越长,时基频率越高,分辨率越高。多周期同步法与传统的计数法测频比较,测量精度明显提高。
三、等精度频率计的架构
等精度频率计架构如图2所示。
频率计由一个D触发器,两个24位的计数器,控制部件,运算部件,输出转换与显示部件构成。计数器Stcount(Counter)(上面的那个)对标准信号进行计数,计数器UKcount(Counter)(下面的那个)对被测信号进行计数。运算部件由MoveBD、Div32、DivideIF 三个模块构成。BinToBCD模块为输出转换与显示部件。FreCon为控制部件,协调和控制触
发器、计数器、运算部件、输出转换与显示部件的工作。
图2
1、计数器的设计
由于标准信号的频率为10M,如果被测信号频率为1Hz,那么计数器的计数值可达107,24位计数器的最大计数值为1.6×107,故24位计数器满足要求。
2、运算部件的设计
频率计需要对计数器的计数值进行运算之后才能得到被测信号频率。
运算部件的核心部件是除法器,除法器是32位的。但由于被测信号的频率范围很大,两个计数器的计数器都无法预测,仅仅除法器,得到的结果精度不高。为了提高运算结果,设计了一个对被除数进行预处理的模块(MoveBD)和一个对运算结果进行后处理的模块(DivideIF)。MoveBD模块对被除数进行移位,以保证送到除法器的被除数的最高位为1,这样可以增加除法运算的商的有效位数。MoveBD模块输出两个数,一个为处理后的被除数(32位),另一个是左移位的次数。DivideIF模块对运算结果进行移位,以得到正确的无阶码的结果。输出结果分为两部分,一部分为整数部分(Iout,4位),另一部分为小数部分(Fout,32位)。该结果隐含了以被测信号的频率为指数(十进制)。
除法器的算法:
(1)、初始化RA、RB、RC、Res四个32位寄存器(RA存放被除数,RB存放除数,
Res存放商),移位次数寄存器i。RC=0,Res=0,i=0。
(2)、从高位到低位,把RA的一位移入RC的最低位,Res左移一位,i加1。
(3)、RC和RB比较,如果RC>=RB,Res加1。
(4)、如果i<32,则跳回(2)
(5)输出商,结束除法运算。
除法器模块(Div32)的代码见文件夹“Verilog HDL代码”下面的文件:Div32.v
MoveBD模块的代码见文件夹“Verilog HDL代码”下面的文件:MoveBD.v
DivideIF模块的代码见文件夹“Verilog HDL代码”下面的文件:DivideIF.v
3、输出转换与显示部件的设计
输出转换与显示部件的架构如图3所示。
图3
将二进制数转换为耳BCD码表示的十进数的算法:
假如要将一个32位二进制整数转换为BCD码表示的十进制数。
(1)、初始化寄存器Databuf、Dataout、DB,i,DB存放二进数每一位的BCD码形式十
进制数的权值(比如二进数01110000第5位的权为16,那么DB中的内容为
0000_0001_0110),Databuf、Dataout存放对两个BCD码形式十进制数相加后的中
间结果。i存放加法次数。DB的初始值为十进数2147483648(231)的BCD码,
Databuf,Dataout,i均初始化为32。
(2)、若第i位为1,则将DB和Dataout中的数送到BCD码加法器中相加,否则第i位为0,则将0和Dataout中的数送到BCD码加法器中相加。
(3)、待加法器中的结果稳定后,将结果保存到Databuf中。
(4)、待Databuf中数稳定后,将Databuf中的数保存到中Dataout。
(5)、将DB中的数右移一位,并对结果进行BCD码调整。调整方法为,若BCD码的每一个4位二进数的最高位为1,则将DB中的每一位BCD码减3。将i减1。
(6)、若i>0,则转到(2)。否则输出BCD码加法器中的结果,结束转换。
二进制数转换为耳BCD码表示的十进数部件,由计算二进数权值模块(BinToBCD_M1),二进制权值输出控制模块(BinToBCD_M4),12个一位BCD码加法器(BinToBCD_M3),时序控制模块(BinToBCD_CON),中间结果控制模块(BinToBCD_M6)组成。
BCD码加法器由两个4位加法器,和一个比较器组成,有9个输入端(两个4位加数输入端,一个低位进位输入端)和5个输出端(4位结果和1个高位进位输出端)。
BinToBCD_M1模块代码见文件夹“Verilog HDL代码\BinToBCD”下的文件:BinToBCD_M1.v
BinToBCD_M4模块代码见文件夹"Verilog HDL代码\BinToBCD"下的文件:BinToBCD_M4.v
BinToBCD_M3模块代码见文件夹"Verilog HDL代码\BinToBCD"下的文件:BinToBCD_M3.v
BinToBCD_M6模块代码见文件夹"Verilog HDL代码\BinToBCD"下的文件:BinToBCD_M6.v
BinToBCD_CON模块代码见文件夹"Verilog HDL代码\BinToBCD"下的文件:BinToBCD_CON.v
Display模块和Display1模块组成输出与数码管驱动部件。
Display模块代码见文件夹"Verilog HDL代码\BinToBCD"下的文件:Display.v
Display1模块代码见文件夹"Verilog HDL代码\BinToBCD"下的文件:Display1.v
时序控制模块(BinToBCD_CON)产生的时序控制信号见图4。
图4