等精度频率计_第1页
等精度频率计_第2页
等精度频率计_第3页
等精度频率计_第4页
等精度频率计_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、等精度频率计一、设计任务与要求设计并制作一台能测量频率和周期的等精度频率计,即在整个频率测量和周期测量范围内可获得同样高的测量精度。电路示意图如图所示。 (1 频率测量范围:1Hz 10MHz (7位数字显示); (2 周期测量范围:0.01s1s ;(3 信号及信号幅度:矩形波,TTL 电平; (4 测量误差10-7(仅考虑计数误差); (5 预置闸门时间:1s(6为了达到能对相关知识点进行练习的目的,要求按图1所示的电路结构设计,除应包括单片机、数字电路部分外,还应按发挥部分的要求增加模拟通道电路部分。二计数测量误差等精度频率计电路示意图经整形后被测信号f X闸门时间由晶体振荡器多次倍频或

2、分频获得,所以,标准频率误差就是频率计中晶体振荡器的准确度。为了使标准频率误差对测量结果产生影响足够小,应认真选择晶振的准确度。一般说来,频率计显示器的位数愈多,所选择的内部晶振准确度就应愈高。例如七位数字的通用计数器一般采用准确度优于107数量级的晶体振荡器。这样,在任何测量条件下,由标准频率误差引起的测量误差,都不大于由±1误差所引起的测量误差。 设单片机在同一闸门时间T G 内,测得被测信号f x 的个数是N x ,测得时钟信号f s 的个数是N S ,则可得图2 等精度频率计的示意波形图被测信号f x Y G 0预置闸门Y G 1闸门时钟f SQ 1Q2(SS SS XX X

3、X SS SSXXS S XXX XSSX X G SS X X f f N N N N f f f df N dNN dNf d N d N d f d f dff N N f T f N f N +-=+-=+-=ln lnlnln ,上式表明频率测量的相对误差由三项组成,前面两项是量化误差,也称为计数误差,后面一项是标准频率的误差。由于电路中同步控制D 触发器的同步作用,已经消除了被测信号N X 的量化误差N X ,因此频率测量计数(量化)相对误差的绝对值仅为:SG SSS f T N N N =<=11此时,虽然量化误差N S 依然存在,但由于标准频率f s 较高,即N S 较大

4、,而|N S |<1,所以很小;若取f s=10MHz,在T G =1s时,量化误差10-7,并且量化的相对误差与被测信号的频率f x 无关。三电路设计原理频率为fx 的被测信号经通道放大整形后输入到同步门控制电路和主门1,晶体振荡器的输出信号作为标准信号(时基信号)输入到主门2. 被测信号在同步控制门的作用下,产生一个与被测信号同步的闸门信号,被测信号与标准信号在同步门控制信号的控制下。在同部门打开时通过同步门分别输入到事件计数器和时间计数器的信号输入端,计数器开始计数。同步门关闭时信号不能通过主门。计数器停止计数吗,单片机发出命令读入计数器的数值,并进行数据处理,将处理后的结果送到单

5、片机中显示。 等精度测量方法是采用的多周期同步测量。由单片机发出预置门控制信号gate,gate 的时间宽度对测量频率的精度影响较少,可以在较大的范围内选择,即在高频段时,闸门时间较短,低频是闸门时间较长。实现了全范围等精度测量,减少了低频测量的误差。 在同部门的控制下,一方面保证了被测信号和时基信号的同步测量;另一方面在同步们打开后计数器并不是马上停止计数,而是在被测信号反的下一个上升沿停止计数。即在实际闸门时间计数,从而提高了测量精度。由于采用D 触发器实现的同步们的同步作用,事件计数器所记录的Nx 值已不存在误差的影响,但由于时钟信号与闸门的开和关无确定的相位关系,时间计数器所记录的N0

6、的值仍存在1的误差影响,只是由于时钟频率很高,误差的影响很小。所以在全频段的测量精度是均衡的,从而实现等精度频率测量。 四硬件电路设计等精度频率计主要由以下几部分组成:单片机控制部分,同步门控制电路,计数与显示电路。其中P1.0用于控制同步门D触发器74HC74产生同步的闸门信号,P1.2用于对CD4040组成的计数器清零,高位计数值在单片机的T0,T1中。然后单片机对计数值进行运算处理,并送出显示。同步门控制电路由D 触发器,74HC04和74HC00组成(主门1,主门2)。主门1控制被测信号fx 的通过主门2控制时钟信号T0的通过,两门的启闭由同步门控制电路控制。计数器包括事件计数器和时间

7、计数器两部分,他们是两组完全相同的计数电路。分别由前后两级组成。前级由两个计数器CD4040级联构成八位二进制计数器;后级由单片机内的计数器构成十六位二进制计数器。标准信号部分采用10MHz 石英晶体振荡器来提供测量所需的标准脉冲信号。 五软件设计#include"reg52.h" #include"absacc.h" #include "intrins.h"#define uchar unsigned char #define uint unsigned int#include"LCD1602.h"/LCD160

8、2显示程序头文件 #include"LCD1602.c"/#define KEY_H XBYTE0xFC00/按键行地址 /#define KEY_L XBYTE0xFE00/按键列地址 #define Data_LL XBYTE0xFA00/Y2 #define Data_HL XBYTE0xF800/CS70 sbit CLK=P11;/闸门信号 /sbit PR=P11;/清零信号,D 触发器 sbit Q=P10 ;/判断用sbit MR=P13;/清零信号, 计数器 /定义下面所需变量unsigned long int cnt0=0,cnt1=0;float nu

9、m=0,numb=0;/,Tnum=0,Tnumb=0void main( /初始化 TMOD=0x55;/T0,T1都为计数模式1 C/T=1;M1M0=01; MR=1;/使两个计数器清零TL0=0;TL1=0; TH0=0;TH1=0; /PR=0;/关同步闸门RCAP2H=(65536-50000/256;/T2计数初值46080 RCAP2L=(65536-50000%256; ET2=1;/开T2中断 EA=1;/开总中断 TR2=1;/开T2定时nint_LCD(;/液晶初始化print("COME ON !-",0x40; while(1;void time

10、r2(interrupt 5 uchar i,date_l,date_h; unsigned long int dis0,dis1; TF2=0;ET2=0;TR2=0;MR=0;/PR=1;CLK=1;TR0=1;TR1=1;i+; if(i>=20 i=0;CLK=0;while(Q;/此处是等待电平的变换 TR0=0;TR1=0;dis0=TL0|(TH0<<8;dis1=TL1|(TH1<<8;date_l=Data_LL;date_h=Data_HL; cnt0=dis0*256+date_l;cnt1=dis1*256+date_h; /1000000

11、0 numb=(floatcnt0/(floatcnt1*10000000; / Tnumb=(floatcnt1/(floatcnt0/10; num=numb;/Tnum=Tnumb; /F=?if(numb>=10000000 num=num;dis_LCD(unsigned long intnum/10000000+0x30,0x02;dis_LCD(unsigned long intnum/1000000%10+0x30,0x03; print(".",0x04;dis_LCD(unsigned long intnum/100000%10+0x30,0x05

12、; dis_LCD(unsigned long intnum/10000%10+0x30,0x06; dis_LCD(unsigned long intnum/1000%10+0x30,0x07; dis_LCD(unsigned long intnum/100%10+0x30,0x08; dis_LCD(unsigned long intnum/10%10+0x30,0x09;/dis_LCD(unsigned long intnum%10+0x30,0x0a;print("MHz",0x0b;else if(numb>=1000000&&(numb

13、<10000000 num=num*10;dis_LCD(unsigned long intnum/10000000+0x30,0x02; print(".",0x03;dis_LCD(unsigned long intnum/1000000%10+0x30,0x04; dis_LCD(unsigned long intnum/100000%10+0x30,0x05; dis_LCD(unsigned long intnum/10000%10+0x30,0x06;dis_LCD(unsigned long intnum/1000%10+0x30,0x07;dis_LC

14、D(unsigned long intnum/100%10+0x30,0x08;dis_LCD(unsigned long intnum/10%10+0x30,0x09; /dis_LCD(unsigned long intnum%10+0x30,0x0a;print("MHz",0x0b; else if(numb>=100000&&(numb<1000000 num=num*100;dis_LCD(unsigned long intnum/10000000+0x30,0x02; dis_LCD(unsigned long intnum/100

15、0000%10+0x30,0x03; dis_LCD(unsigned long intnum/100000%10+0x30,0x04; print(".",0x05;dis_LCD(unsigned long intnum/10000%10+0x30,0x06; dis_LCD(unsigned long intnum/1000%10+0x30,0x07; dis_LCD(unsigned long intnum/100%10+0x30,0x08;dis_LCD(unsigned long intnum/10%10+0x30,0x09;/dis_LCD(unsigned

16、long intnum%10+0x30,0x0a;print("kHz",0x0b; else if(numb>=10000&&(numb<100000 num=num*1000;dis_LCD(unsigned long intnum/10000000+0x30,0x02; dis_LCD(unsigned long intnum/1000000%10+0x30,0x03; print(".",0x04;dis_LCD(unsigned long intnum/100000%10+0x30,0x05; dis_LCD(uns

17、igned long intnum/10000%10+0x30,0x06; dis_LCD(unsigned long intnum/1000%10+0x30,0x07; dis_LCD(unsigned long intnum/100%10+0x30,0x08;dis_LCD(unsigned long intnum/10%10+0x30,0x09; /dis_LCD(unsigned long intnum%10+0x30,0x0a;print("kHz",0x0b;else if(numb>=1000&&(numb<10000 num=nu

18、m*10000;dis_LCD(unsigned long intnum/10000000+0x30,0x02; print(".",0x03;dis_LCD(unsigned long intnum/1000000%10+0x30,0x04; dis_LCD(unsigned long intnum/100000%10+0x30,0x05; dis_LCD(unsigned long intnum/10000%10+0x30,0x06; dis_LCD(unsigned long intnum/1000%10+0x30,0x07;dis_LCD(unsigned long

19、 intnum/100%10+0x30,0x08;dis_LCD(unsigned long intnum/10%10+0x30,0x09;/dis_LCD(unsigned long intnum%10+0x30,0x0a;print("kHz",0x0b; else if(numb>=100&&(numb<1000 num=num*100000;dis_LCD(unsigned long intnum/10000000+0x30,0x02; dis_LCD(unsigned long intnum/1000000%10+0x30,0x03;

20、dis_LCD(unsigned long intnum/100000%10+0x30,0x04; print(".",0x05;dis_LCD(unsigned long intnum/10000%10+0x30,0x06;dis_LCD(unsigned long intnum/1000%10+0x30,0x07; dis_LCD(unsigned long intnum/100%10+0x30,0x08;dis_LCD(unsigned long intnum/10%10+0x30,0x09; /dis_LCD(unsigned long intnum%10+0x30

21、,0x0a;print(" Hz",0x0b;else if(numb>=10&&(numb<100 num=num*1000000;dis_LCD(unsigned long intnum/10000000+0x30,0x02; dis_LCD(unsigned long intnum/1000000%10+0x30,0x03; print(".",0x04;dis_LCD(unsigned long intnum/100000%10+0x30,0x05;dis_LCD(unsigned long intnum/10000%

22、10+0x30,0x06; dis_LCD(unsigned long intnum/1000%10+0x30,0x07; dis_LCD(unsigned long intnum/100%10+0x30,0x08;dis_LCD(unsigned long intnum/10%10+0x30,0x09; /dis_LCD(unsigned long intnum%10+0x30,0x0a;print(" Hz",0x0b;else/ if(numb<10 num=num*10000000;dis_LCD(unsigned long intnum/10000000+0

23、x30,0x02; print(".",0x03;dis_LCD(unsigned long intnum/1000000%10+0x30,0x04; dis_LCD(unsigned long intnum/100000%10+0x30,0x05;dis_LCD(unsigned long intnum/10000%10+0x30,0x06; dis_LCD(unsigned long intnum/1000%10+0x30,0x07; dis_LCD(unsigned long intnum/100%10+0x30,0x08;dis_LCD(unsigned long

24、intnum/10%10+0x30,0x09; /dis_LCD(unsigned long intnum%10+0x30,0x0a;print(" Hz",0x0b;/*/T=?if(Tnumb>=1000000 Tnum=Tnum*10;dis_LCD(unsigned long intTnum/10000000+0x30,0x02; print(".",0x03;dis_LCD(unsigned long intTnum/1000000%10+0x30,0x04; dis_LCD(unsigned long intTnum/100000%10

25、+0x30,0x05; dis_LCD(unsigned long intTnum/10000%10+0x30,0x06; dis_LCD(unsigned long intTnum/1000%10+0x30,0x07; dis_LCD(unsigned long intTnum/100%10+0x30,0x08; dis_LCD(unsigned long intTnum/10%10+0x30,0x09; dis_LCD(unsigned long intTnum%10+0x30,0x0a;print("s",0x0b;else if(Tnumb>=100000&a

26、mp;&(Tnumb<1000000 Tnum=Tnum*100;dis_LCD(unsigned long intTnum/10000000+0x30,0x02; dis_LCD(unsigned long intTnum/1000000%10+0x30,0x03; dis_LCD(unsigned long intTnum/100000%10+0x30,0x04; print(".",0x05;dis_LCD(unsigned long intTnum/10000%10+0x30,0x06; dis_LCD(unsigned long intTnum/10

27、00%10+0x30,0x07; dis_LCD(unsigned long intTnum/100%10+0x30,0x08;dis_LCD(unsigned long intTnum/10%10+0x30,0x09;dis_LCD(unsigned long intTnum%10+0x30,0x0a;print("kHz",0x0b;else if(Tnumb>=10000&&(Tnumb<100000 Tnum=Tnum*1000;dis_LCD(unsigned long intTnum/10000000+0x30,0x02; dis_L

28、CD(unsigned long intTnum/1000000%10+0x30,0x03; print(".",0x04;dis_LCD(unsigned long intTnum/100000%10+0x30,0x05; dis_LCD(unsigned long intTnum/10000%10+0x30,0x06; dis_LCD(unsigned long intTnum/1000%10+0x30,0x07; dis_LCD(unsigned long intTnum/100%10+0x30,0x08;dis_LCD(unsigned long intTnum/1

29、0%10+0x30,0x09; dis_LCD(unsigned long intnum%10+0x30,0x0a;print("kHz",0x0b; else if(Tnumb>=1000&&(Tnumb<10000 Tnum=Tnum*10000; dis_LCD(unsigned long intTnum/10000000+0x30,0x02; print(".",0x03; dis_LCD(unsigned long intTnum/1000000%10+0x30,0x04; dis_LCD(unsigned long

30、 intTnum/100000%10+0x30,0x05; dis_LCD(unsigned long intTnum/10000%10+0x30,0x06; dis_LCD(unsigned long intTnum/1000%10+0x30,0x07; dis_LCD(unsigned long intTnum/100%10+0x30,0x08; dis_LCD(unsigned long intTnum/10%10+0x30,0x09; dis_LCD(unsigned long intTnum%10+0x30,0x0a; print("kHz",0x0b; else

31、 if(Tnumb>=100&&(Tnumb<1000 Tnum=Tnum*100000; dis_LCD(unsigned long intTnum/10000000+0x30,0x02; dis_LCD(unsigned long intTnum/1000000%10+0x30,0x03; dis_LCD(unsigned long intTnum/100000%10+0x30,0x04; print(".",0x05; dis_LCD(unsigned long intTnum/10000%10+0x30,0x06; dis_LCD(unsigned long intTnum/1000%10+0x30,0x07; dis_LCD(unsigned long intTnum/100%10+0x30,0x08; dis_LCD(unsigned long intTnum/10%10+0x30,0x09; dis_LCD(unsigned long intTnum%10+0x30,0x0a; print(" Hz"

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论