cpld数字频率计综合设计Word文档下载推荐.docx
《cpld数字频率计综合设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《cpld数字频率计综合设计Word文档下载推荐.docx(27页珍藏版)》请在冰点文库上搜索。
![cpld数字频率计综合设计Word文档下载推荐.docx](https://file1.bingdoc.com/fileroot1/2023-4/29/83ea8c32-8694-4836-8acf-966336e66afb/83ea8c32-8694-4836-8acf-966336e66afb1.gif)
100Hz~100MHz,测量相对误差:
≤1%;
测量信号:
方波峰峰值3~5V(与TTL兼容),闸门时间:
1s;
显示控制:
静态8位七段LED显示,且要求显示稳定,刷新时间与闸门时间相同。
提高要求:
100Hz~100MHz和1Hz~1MHz两档,相应的闸门时间为1s和100ms,用一开关量选择控制。
动态扫描8位七段LED显示,且要求显示无闪烁,内容刷新时间与闸门时间相同。
三、设计方案的选
根据频率计的设计要求,电路系统可划分为几个基本模块,如图1.1所示
计数方式
频率输出
被测信号
脉冲宽度测量电路
译码器
数据转换
显示器
量程1HZ~1MHZ和100HZ~100MHZ由开关K选择
图1.1频率计组成模块框图
3.1频率测量方案比较
3.1.1直接测量法
大家都知道,如果根据基本原理实现对频率的数字化测量,是一种直接测量的手段,这种方法比较简单,如果能满足设计要求的话,应该作为首要的选择方案。
下面我们简单分析一下使用该方法是否能满足设计要求,把被测频率信号经脉冲整形电路处理后加到闸门的一个输入端,只有在闸门开通时间T(以秒计)内,被计数的脉冲送到十进制计数器进行计数。
设计数器的值为N,则可以得到被测信号频率为f=N/T,经过对照数字化直接测量频率的原理我们可以发现,本测量在低频率段的相对测量误差较大,即在低频率段不能满足本设计的要求。
3.1.2组合测频法
是指在高频时采用直接测量法,低频时采用直接测量周期法测信号的周期,然后换算成频率。
这种方法可以在一定程度上弥补方法
(1)的不足,但是难以确定最佳分测点,而且电路实现比较复杂。
3.1.3倍频法
是指把频率测量范围分成多个频率段,使用倍频技术,根据频率段设置倍频系数,将经过整形的低频信号进行倍频后再进行测量,对高频率段则直接进行测量,倍频法比较难以实现。
经过分析我们选择第二种方法测量,在1HZ~1MHZ量程上采用直接测量周期法测信号的周期,然后换算成频率,在100HZ~100MHZ量程上采用直接测量法。
3.2理论误差分析
3.2.1直接测量误差
若所测频率值为fx,被测频率的真实值为fxe,标准频率为fs,在一次测量中,预置门时间为Tpr,被测信号计数值为Nx,标准频率信号计数值为Nx.
由于fx计数的起停时间都是由该信号的上升沿触发的,因此在Tpr时间内对fx的计数Nx无误差,在此时间内的计数Ns最多相差一个脉冲,即∆et≤1,则下式成立:
fx/Nx=fs/Ns----------(式3.1)
fxe/Nx=fs/(Ns+∆et)----------(式3.2)
可以分别推得
fx=fsNx/Ns----------(式3.3)
fxe=fsNx/(Ns+∆et)----------(式3.4)
根据相对误差公式有
|δ|=∆fxe/fxe=(fxe-fx)/fxe----------(式3.5)
经过整理可以得到
∆fxe/fxe=∆et/Ns----------(式3.6)
因为∆et≤1,故∆et/Ns≤1/Ns,即
∆et/Ns≤1/Ns
Ns=Tprfs----------(式3.7)
根据以上分析,可以知道在直接测量100Hz-100MHz中最大误差是测量100Hz频率是误差为1%,因此满足题目要求。
3.2.2标准频率误差
标准频率误差为∆fs/fs,因为晶体的稳定度很高,标准频率误差可以进行校准,相对于量化误差,校准后的标准频率误差可以忽略。
3.2.3脉冲宽度测量理论误差分析
根据方案中的脉冲宽度测量方法,分析脉冲宽度测量误差.
设被测信号的脉冲宽度为Twxe,标准频率信号频率为fs,则脉冲宽度的测量值为:
Twx=Nx/fs----------(式2.8)
在一次测量中,对标准频率信号的计数值Nx可能产生±
1个标准频率信号周期的计数误差,则脉冲宽度测量相对误差为:
|∆Twx/Twx|=(1∙fs)/(Nx∙fs)=1/Nx----------(式2.9)
其中Nx=Twx∙fs.可以看出,在fs一定的时候,脉冲宽度越小,误差越大.
在测量1HZ-1Mhz量程中最大误差在测量1MHz上,误差为:
当Twx=1μs,fs=100MHz时,Nx=100,则有:
|∆Twx/Twx|=1/100=1%
因此在测量1HZ-1Mhz量程中误差也满足题目要求。
四、单元电路设计
4.1整波电路模块
电路图如下,fin为输入被测信号,通过此模块,将信号二分频输出FS,并得到占空比为50%的方波信号。
FS
图4-1
4.2计数模块
电路图如下,计数器模块为该电路中的核心模块,它的功能是:
对系统40MHZ时钟进行分频得到1HZ的频率信号,在高电平时对输入信号进行计数,在低电平时将所计的数输出到量程选择模块锁存。
。
图4-2
4.3脉冲测量模块
此模块完成脉冲测量方式,为了提高测量精度,首先将系统时钟inclk分频得到1MHZ的时钟,在FS为高电平时计数,低电平时将测量数据输出。
图4-3
4.4数据变换模块
电路图如下,该模块完成脉冲测量数据到频率的转换,公式为:
f=1000000/采样值。
图4-4
4.5量程选择模块
电路图如下,此模块完成计数方式与脉冲测量方式得到的数据之间的切换,其中K为高电平时选择计数方式,K为低电平时选择脉冲测量方式数据。
图4-5
4.6译码模块
此模块由两个电路组成一个十六进制转换BCD码转换模块16tobcd和显示输出模块decode7s组成。
16tobcd模块电路图如下,完成十六进制到BCD码转换。
图4-6
decode7s模块电路图如下,主要完成7段共阴极数码管的译码及驱动,其中8位BCD码由mout[31..0]输入,7SA[6..0]、7SB[7..0]分别为两个扫描显示的段输出,sela[3..0]、selb[3..0]为八个扫描显示的位选择。
7sc[6..0]、6sd[6..0]为两个静态显示数码管的段输出,显示“HZ”字样。
整体设计采用高位灭零显示方式。
图4-7
五、方案的实现
8个七段数码管
CPLD
40MHZ晶振
电源
图5-1
整个方案我们在实验室进行仿真成功,通过将程序烧录到CPLD中,布置引脚观察实验结果。
六、测试和调试
6.1硬件调试
在软件设计编译成功后,我们进行了每个模块在实验装置上的调试,不断修改程序直至每个模块达到预计要求。
之后将所有模块连接好,进行整体调试,下图是调试成功结果,进行数码管测试,显示“8888888888”。
图6-1
6.2硬件测试
(1)为了得到不同频率的测试信号我们专门设计了一个分频模块来产生不同频率的信号,电路图如下。
图6-2
(2)量程1Hz-1MHz测试
调节分频模块输出信号的频率为20Hz,测试结果如下图所示。
图6-3
调节分频模块输出信号的频率为500Hz,测试结果如下图所示。
图6-4
调节分频模块输出信号的频率为5000Hz,测试结果如下图所示。
图6-5
(3)量程100Hz-100MHz测试
K为高电平
图6-7
调节分频模块输出信号的频率为10MHz,测试结果如下图所示。
图6-8
调节分频模块输出信号的频率为40MHz,测试结果如下图所示
图6-9
6.3测试数据记录表
量程
1Hz-1MHz
100HZ-100MHz
被测信号实际频率
20Hz
500Hz
5000Hz
10MHz
40MHz
测试频率
5000Hz
4999Hz
39.999999MHz
测试误差
0.02%
表6-1
6.4测量结果分析
通过在实验室硬件仿真结果可知基本完成了课程要求的任务,通过开关K对量程进行选择,在低量程1Hz-1MHz中可以经测量小于1Hz的频率。
在测量误差上小于1%,且显示无闪烁并采用高位灭零显示。
七、实验元器件清单
(1)开发系统MAX+PLUSⅡ10.0
(2)使用器件ACEXEP1K100QC2008-3
(3)实验系统CPLDEE—4使用开发系统。
八、实验程序
实验程序总图如下:
图8-1
8.1分频模块fp
subdesignfp
(inclk:
input;
outputf:
output;
)
Variable
ma[26..0]:
dff;
fd:
begin
ma[].clk=inclk;
fd.clk=inclk;
ifma[]==1then
ma[]=0;
fd=!
fd;
else
ma[]=ma[]+1;
fd=fd;
endif;
outputf=fd;
end;
8.2计数模块fsurveya
subdesignfsurveya
(inclk,fin:
mf[25..0]:
st[1..0]:
mc[25..0],mf[25..0]:
st[].clk=inclk;
mc[].clk=fin;
mf[].clk=inclk;
ifma[]==79999999then
casest[]is
when0=>
mc[]=0;
mf[]=mf[];
iffdthen
st[]=1;
st[]=0;
when1=>
MF[]=MF[];
Iffdthen
st[]=1;
mc[]=mc[]+1;
st[]=2;
mc[]=mc[];
when2=>
mf[]=mc[];
st[]=0;
endcase;
8.3脉冲测量模块fsurveyb
Subdesignfsurveyb
output;
ma[25..0],mf[25..0],mc[25..0]:
mfd:
dff;
mfd.clk=inclk;
mc[].clk=mfd;
ifma[]==19then
mfd=!
Mfd;
mfd=mfd;
endif;
when0=>
mf[]=mf[];
mc[]=0;
iffinthen
st[]=1;
mf[]=mc[];
8.4数据变换模块div10mc
include"
divide32.inc"
;
subdesigndiv10mc
(inclk,mf[25..0]:
mfo[25..0]:
variable
mdiv32:
divide32;
mdiv32.inclk=inclk;
mdiv32.a[]=100000000;
mdiv32.b[]=(0,mf[]);
mfo[]=mdiv32.c[25..0];
8.5量程选择模块sel
subdesignsel
(mf[25..0],mfo[25..0],k:
mfout[25..0]:
Ifkthen
mfout[]=mf[];
mfout[]=mfo[];
8.6十六进制转换BCD码模块16tobcd
subdesign16tobcd
(mf[25..0],inclk:
mout[31..0]:
ma[25..0],mout[31..0]:
moutx[31..0]:
moutx[31..0].clk=inclk;
mout[].clk=inclk;
ma[]=mf[];
mout[]=mout[];
mout[]=mout[];
ifma[]>
99then
ma[]=ma[]-100;
ifmoutx[11..8]==9then
moutx[11..8]=0;
ifmoutx[15..12]==9then
moutx[15..12]=0;
ifmoutx[19..16]==9then
moutx[19..16]=0;
ifmoutx[23..20]==9then
moutx[23..20]=0;
ifmoutx[27..24]==9then
moutx[27..24]=0;
moutx[31..28]=moutx[31..28]+1;
else
moutx[27..24]=moutx[27..24]+1;
moutx[31..28]=moutx[31..28];
moutx[23..20]=moutx[23..20]+1;
moutx[31..24]=moutx[31..24];
Else
Moutx[19..16]=moutx[19..16]+1;
moutx[31..20]=moutx[31..20];
Endif;
Moutx[15..12]=moutx[15..12]+1;
moutx[31..16]=moutx[31..16];
Else
Moutx[11..8]=moutx[11..8]+1;
moutx[31..12]=moutx[31..12];
Moutx[31..8]=moutx[31..8];
Ifma[]>
9then
St[]=1;
ma[]=ma[]-10;
Moutx[7..4]=moutx[7..4]+1;
Moutx[7..4]=moutx[7..4];
Moutx[3..0]=ma[3..0];
St[]=2;
When2=>
mout[]=moutx[];
moutx[]=moutx[];
8.7译码驱动模块decode7s
subdesigndecode7s
(mout[31..0],inclk,k:
7sa[6..0],7sb[7..0],sela[3..0],selb[3..0]:
7sc[6..0],7sd[6..0]:
ma[9..0],f,sta[1..0],stb[1..0],mda[3..0],mdb[3..0]:
7sc[]=h"
5b"
7sd[]=h"
76"
mda[].clk=inclk;
mdb[].clk=inclk;
sta[].clk=f;
stb[].clk=f;
f.clk=inclk;
ifma[]==1000then
ma[]=0;
f=!
f;
f=f;
sta[]=sta[]+1;
stb[]=stb[]+1;
casesta[]is
Mda[]=mout[31..28];
Ifmout[31..28]==0then
Sela[]=0;
Sela[]=8;
When1=>
Mda[]=mout[27..24];
Ifmout[31..24]==0then
Sela[]=4;
Mda[]=mout[23..20];
Ifmout[31..20]==0then
Sela[]=2;
When3=>
Mda[]=mout[19..16];
Ifmout[31..16]==0then
Sela[]=1;
Endcase;
Casestb[]is
When0=>
Mdb[]=mout[15..12];
Ifmout[31..12]==0then
selb[]=0;
selb[]=8;
Mdb[]=mout[11..8];
7sb[7]=gnd;
7sb[7]=vcc;
Ifmout[31..8]==0then
Selb[]=0;
Selb[]=4;
Mdb[]=mout[7..4];
Selb[]=2;
Mdb[]=mout[3..0];
Selb[]=1;
Table
Mda[]=>
7sa[];
0=>
h"
3f"
1=>
06"
2=>
3=>
4f"
4=>
66"
5=>
6d"
6=>
7b"
7=>
07"
8=>
7f"
9=>
6f"
Endtable;
Mdb[]=>
7sb[];
End;
九、结束语
在简易数字频率计的设计当中,基本完成了设计任务书中的基本要求。
在调试的实验中,简易数字频率计能够准确的测试频率和周期,而且测量精度基本上满足指标的要求。
本文的工作基础是基于CPLD的数字频率计,利用AHDL语言进行单片机应用系统的数字频率计的设计,并下载到CPLD中组成实际电路,这样可以简化硬件的开发和制造过程,而且使硬件体积大大缩小,并提高了系统的可靠性。
使用单片机完成整个测量电路的控制,数据处理和显示输出。
采用两个同步测周期计数器进行计数,并在CPLD中实现了系统集成,使设计更加灵活,可以在许多频率测量的设计中取代门控计数器。
文中设计的数字频率计,无需选择量程便可实现宽频段高精度的频率测量,同时在基本电路模块基础上,不必修改硬件电路,通过修改AHDL源程序,增加一些新功能,满足不同用户的需要,实现数字系统硬件的软件化。
在设计当中,由于硬件电路中和测试设备的固有的特性,加大了调试的难度,造成了一些性能指标,没有准确的达到任务书的要求,针对在设计中出现的问题,在今后的的工作中要避免,首先,要充分利用软件电路和集成电路,使单片机技术再此电路扮演重要的角色;
其次,要尽量解决电路的干扰问题,掌握一些常用的抗干扰技术;
再次,在以后的工作中要熟练使用电子测量设备,以提高测量效率。
参考文献
1.徐志军.大规模可编程逻辑器件及其应用[M].成都:
电子科技大学出版社,2000.
4.赵曙光.可编程逻辑器件原理、开发与应用[M].西安:
西安电子科技大学出社,2000.