等精度频率计的设计.doc_第1页
等精度频率计的设计.doc_第2页
等精度频率计的设计.doc_第3页
等精度频率计的设计.doc_第4页
等精度频率计的设计.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

前言随着微电子技术和计算机技术的迅速发展,特别是单片微机的出现和发展,使传统的电子测量仪器在原理、功能、精度及自动化水平等方面都发生了巨大的变化,形成一种完全突破传统概念的新一代测量仪器。频率计广泛采用了高速集成电路和大规模集成电路,使仪器在小型化、耗电、可靠性等方面都发生了重大的变化。传统的频率计测量误差较大,等精度频率计以其测量准确、精度高、方便等优势将得到广泛的应用。传统的测频方法有直接测频法和测周法1,在一定的闸门时间内计数,门控信号和被测信号不同步,计数值会产生一个脉冲的误差。等精度测频法采用门控信号和被测信号同步,消除对被测信号计数产生的一个脉冲的误差。等精度频率测量方法消除了量化误差,可以在整个测试频段内保持高精度不变,其精度不会因被测信号频率的高低而发生变化。采用单片机作为控制核心的等精度频率计,可以充分利用单片机软件编程技术实现等精度测频。通过单片机对同步门的控制,使被测信号和标准信号在闸门时间内同步测量,为了提高精度,将电子计数功能转为测周期,采用多周期同步测量技术,实现等精度测量。一 等精度频率计的测量原理1.1等精度频率计的测量原理基于传统测频原理的频率计的测量精度将随被测信号频率的变化而变化。传统的直接测频法其测量精度将随被测信号频率的降低而降低,测周法的测量精度将随被测信号频率的升高而降低,在实用中有较大的局限性,而等精度频率计不但具有较高的测量精度,而且在整个频率区域能保持恒定的测试精度。等精度频率的测量原理图1 所示2。频率为fx 的被测信号经通道滤波、放大、整形后输入到同步门控制电路和主门1(闸门),晶体振荡器的输出信号作为标准信号(时基信号)输入到主门2。被测信号在同步控制门的作用下,产生一个与被测信号同步的闸门信号,被测信号与标准信号(时基信号)在同步门控制信号的控制下。在同步门打开时通过同步门分别输入到事件计数器和时间计数器的信号输入端,计数器开始计数。同步门关闭时信号不能通过主门,计数器停止计数,单片机发出命令读入计数器的数值,并进行数据处理,将处理后的结果送显示。等精度频率测量方法是采用多周期同步测量。如图1的测量原理图所示由单片机发出预置门控信号GATE,GATE的时间宽度对测频精度影响较少,可以在较大的范围内选择,即在高频段时,闸门时间较短;低频时闸门时间较长。实现了全范围等精度测量,减少了低频测量的误差。在同步门的控制下,一方面保证了被测信号和时基信号的同步测量;另一方面在同步门打开后计数器并不是马上计数,而是在被测信号的下一个上升沿开始计数,同步门关闭后计数器也不是马上停止计数,而是在被测信号的下一个上升沿停止计数。即在实际闸门时间计数,从而提高了测量精度。由于采用D 触发器实现的同步门的同步作用,事件计数器所记录的Nx 值已不存在误差的影响,但由于时钟信号与闸门的开和关无确定的相位关系,时间计数器所记录的N0 的值仍存在1 误差的影响,只是由于时钟频率很高,误差的影响很小。所以在全频段的测量精度是均衡的,从而实现等精度频率测量。12 等精度频率计计数测量误差由上述测量原理可知,公式 fx=f0Nx/N0 成立。设所测频率的准确值为f x0。在一次测量中,由于fx 计数的起停时间是由该信号的上升沿控制的,因此,在T 时间内对fx 的计数NX无误差。在此时间内f0 的计数N0 最多相差一个脉冲,即N0 l,则下式成立:fx/Nx = f0/N0 (1)fx0/NX = f0/(N0+N0) (2)由此可分别推得: fx= (f0/N0)Nx (3)fx0=f0/(N0+N0)Nx (4)根据相对误差公式有: f x0/f x0=f x0-fx/f x0 (5)将式(3)和式(4)代人式(5)整理后可得:f x0/f x0=N0/N0 (6)因为 N0l (7)所以 N0/N01/N0 (8)即相对误差: f=f x0/f x01/N0 (9)其中: N0 = Tf0 (10)由此可知, 增大Tp 或提高fx,可以增大Nx,减少测量误差,提高测量精度;相对测量误差与被测信号频率的大小无关,仅与取样时间及时基信号(标准信号)频率有关,可以实现被测频带内的等精度测量;取样时间越长,时基信号频率越高,分辨率越高。二 等精度测频的硬件电路设计及测量过程21 硬件电路设计等精度测频的硬件电路如图2 所示3 4,其主要由以下几部分组成:单片机控制部分、同步门控制电路、计数和键盘与显示电路。单片机控制部分主要完成测量过程的控制、测量结果的处理和显示。单片机选用AT89C52,其中P1.0 用于控制同步门D 触发器74LS74 产生同步的闸门信号,P1.2 用于对74LS393 组成的计数器清零,一次计数完成后单片机通过控制两片74LS244 读取被测信号与标准信号的低8 位计数值,高位计数值在单片机的T0、T1 中。然后单片机对计数值进行运算处理,并送出显示。AT89C52 P1.3、 P1.4、 P1.5 和 P1.6用于和串行接口8 位LED 数码管及键盘控制芯片HD7279A 的连接,控制和管理键盘及显示。同步门控制电路主要由D 触发器74LS74(同步门控制)、六反相器74LS04 和二输入或非门74LS02 组成(主门1、主门2)。主门1 控制被测信号fx 的通过,主门2 控制时钟信号f0 的通过,两门的启闭都由同步门控制电路控制。计数器包括事件计数器和时间计数器两部分,它们是两组完全相同的计数电路。分别由前后两级组成。前级由双4 位异步计数器74LS393 级联构成八位二进制计数器;后级由AT89C52 单片机内的定时/计数器构成十六位二进制计数器。标准信号部分采用10MHz 石英晶体振荡器来提供测量所需要的标准脉冲信号。键盘与数码显示部分采用串行接口方式8 位LED 数码管及64 键键盘管理芯片HD7279A与单片机连接,驱动八位LED 共阴极数码管和键盘接口,键盘与数码显示部分主要完成测量功能的选择和测量频率的数据显示。22 测量过程AT89C52 单片机的P1.3 引脚发出复位信号,使两个计数器清零,同时P1.1 也发出复位信号,使同步门控制器的Q端为低电平,则主门1 和主门2 都关闭。这时P1.0 的初始状态为“1”,使D 触发器的D 端为高电平。根据D 触发器的功能,Q端与D 端的逻辑状态不同,触发器处于闭锁状态,这时被测信号即使到达CK 端,也不能使其触发翻转,保证了同步门可靠关闭。AT89C52 单片机的P1.0 从高电平跳到低电平,使D 触发器的D 端为“0”,这样Q端与D 端的逻辑状态相同,触发器解除闭锁,这时被测信号一旦到达CK 端,触发器立即翻转,Q由“0”变为“1”,于是同步门被打开,被测信号和时间信号分别进入到相应的计数器进行计数。P1.0 从高电平跳到低电平的同时,也启动了计时系统开始计量闸门时间。当预定的闸门时间结束时,使P1.0 又从低电平恢复到高电平,D 触发器再次解除闭锁。随后紧跟而来的被测信号再次触发D 触发器使之翻转,Q端由高电平转为低电平,使同步门关闭,计数器停止计数。三软件设计3.1 单片机等精度频率计程序系统软件的设计主要是和硬件电路相结合,正确地实现等精度测量。整个系统软件的设计采用了自顶向下的模块化的结构方式,将各个功能分成独立模块,由系统的程序统一管理执行。它主要完成各种功能,如测量、 数据运算、显示等。如图3 所示为频率测量主程序流程图,在计数前对计数器清零。然后,发出命令打开闸门进入闸门时间,计数器在闸门时间内计数。延时子程序结束后,发出命令关闭闸门使计数器停止计数;单片机再依照程序读取计数器的值,并与单片机内部计数器所计的值合并在一起。由公式(1),即被测频率fx=f0Nx/N0 来进行运算,由于精度要求,Nx 和N0 都由24 位二进制数来计数。因此,要在单片机内部进行多字节无符号二进制数的乘法和除法运算,并将运算结果转换成BCD 码,显示运算结果。 /-函数声明,变量定义- #include sbitGATE=P30;/预制门限 sbitCLR=P31;/请零 sbitRGATE=P32;/实际门限 sbitSEL0=P34;/数据选择位0 sbitSEL1=P35;/数据选择位1 sbitSEL2=P36;/数据选择位2 #definedata_inP1 unsignedcharNx4;/待测频率计数值 unsignedcharNs4;/标准频率计数值 unsignedcharGATE_time=1;/门限时间,预定义为1S unsignedchartime_count; bitPRE_judge=1; /-变量声明- voidsystem_init(void);/初始化,设置定时器0的工作方式,供主程序调用 voidTIMER0_SCANkey();/定时器0中断处理函数 /- /函数名称:system_init() /函数功能:初始化设置 /设定INT0的工作方式 /- voidsystem_init(void) TMOD=0x01;/定时器0工作在方式1 ET0=1;/定时器0中断允许 TH0=-5000/256;/12M时钟时,定时0.01秒 TL0=-5000%256; TR0=1;/定时器0开始计数 EA=1;/系统中断允许 /- /函数名称:read_result /函数功能:将计数值读出到Nx、Ns /- voidread_result() GATE=0; while(RGATE);/等待实际门限的结束 SEL0=0; SEL1=0; SEL2=0; Nx0=data_in;/SEL=000 SEL0=1; Nx1=data_in;/001 SEL1=1; Nx3=data_in;/011 SEL0=0; Nx2=data_in;/010 SEL0=0; SEL1=0; SEL2=1; Ns0=data_in;/100 SEL0=1; Ns1=data_in;/101 SEL1=1; Ns3=data_in;/111 SEL0=0; Ns2=data_in;/110 /- /函数名称:judge_Prage /函数功能:判断频率范围, /大于1M即Nx0x000F4240,GATE=1 /小于1M大于1k即0x000003E8Nx0x000F4240,GATE=5 /小于1k即Nx0x000003E8,GATE=10 /- voidjudge_Prage() if(Nx3=0)&(Nx2=0) if(Nx13)|(Nx1=3)&(Nx00xE8) GATE_time=10; elseGATE_time=5; elseif(Nx3=0)&(Nx20x0f) GATE_time=5; elseif(Nx3=0)&(Nx2=0x0f) if(Nx10x42) GATE_time=5; elseif(Nx1=0x42)&(Nx00x40) GATE_time=5; else GATE_time=1; elseGATE_time=1; /- /函数名称:calcu_Fx /函数功能:计算频率,根据Fx=(Nx/Ns)Fs计算结果 /- voidcalcu_Fx() /- /函数名称:TIMER0_intrupt /函数功能:定时器0中断处理程序 /- voidTIMER0_intrupt()interrupt1using1 EA=0;/系统中断禁止 GATE=1; TH0=-5000/256;/12M时钟时,定时0.01秒 TL0=-5000%256; time_count+; if(+time_count=100)GATE_time-; while(GATE_time=0) GATE=0; read_result(); if(PRE_judge)/预测,判断频率范围 judge_Prage(); PRE_judge=0; if(GATE_time)/如果频率大于1M,直接计算,无须再测 calcu_Fx(); else calcu_Fx();/不是预测,直接计算结果 EA=1; /- /函数名称:main /函数功能:主函数 /- voidmain() CLR=0; GATE=1; system_init(); 3.2等精度频率计的程序与仿真 -文件名:PLJ.vhd。-功能:4位显示的等精度频率计。-最后修改日期:2010.9。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity PLJ is port(clk:in std_logic; -基准时钟(10KHz) tclk:in std_logic; -被测信号 start:in std_logic; -复位信号 alarm0,alarm1:out std_logic; -超量程,欠量程显示 dian:out std_logic_vector(3 downto 0); -小数点 data1:out integer range 0 to 9999); -频率数据end PLJ; architecture behav of PLJ is signal q:integer range 0 to 9999; -预置闸门分频系数signal q1:integer range 0 to 10000; -被测信号计数器signal q2:integer range 0 to 20000; -基准信号计数器signal en,en1:std_logic; -预置闸门,实际闸门signal qq,qqq:integer range 0 to 200000000; -运算器 signal data0:integer range 0 to 9999; -频率数据中间信号beginprocess(clk) -此进程得到一个预置闸门信号begin if clkevent and clk=1 then if start=1 then q=0;en=0; elsif q=9999 then q=9999;en=0; else q=q+1;en=1; end if; end if;end process;process(tclk) -此进程计被测信号脉冲数,和得到一个实际闸门信号begin if tclkevent and tclk=1 then if start=1 then q1=0;en1=0; elsif en=1 then q1=q1+1;en1=1; else en1=0; end if; end if;end process;process(clk) -此进程完成在实际闸门时间内,计基准脉冲数 begin if clkevent and clk=1 then if start=1 then q2=0; elsif en1=1 then if q2=20000 then q2=20000; else q2=q2+1; end if; end if; end if;end process; process(clk) -此进程完成等精度频率计的运算begin if clkevent and clk=1 then if start=1 then data0=0;dian=0000;alarm0=0;alarm1=0;qqq=0;qq=1000 then qq=q1*10000; -根据q1的大小来判断小数点的位置 if qqqqq then qqq=qqq+q2;data0=data0+1;dian=10000 then alarm0=1; -超量程显示 else data1=100 then qq=q1*100000; if qqqqq then qqq=qqq+q2;data0=10000 then data1=1000;dian=0000; else data1=data0;dian=10 then qq=q1*1000000; if qqqqq then qqq=qqq+q2;data0=10000 then data1=1000;dian=0010; else data1=data0;dian=1 then qq=q1*10000000; if qqqqq then qqq=qqq+q2;data0=10000 then data1=1000;dian=0100; else data1=data0;dian19999 then alarm1=1; -欠量程显示 else alarm1=0; end if; end if;end process;end behav;四 心得体会进行系统设计的时候遇到了很多的问题,一个是硬件电路的系统设计,在掌握了主要的思想之后,只设计了整体电路的框架,还有一些小的方面总是存在问题,在查了课本和参考书后还有写问题没有解决,在同学的帮助下解决了很多问题;其次就是程序了,在程序中,主要的问题不是实现功能,而是地址的分配,地址能分配好,那么写出来的程序错误就比较少,即使有,差错也是很容易的,但是要是地址出错了,检查错误的工作量就很大了,所以首先就是要把地址分配好。过程虽然是艰难的,但是收获也是很大的,作为电信专业的一名学生,通过这次工程训练可以检验出理论知识有很多的东西都没有掌握,其中包括有很多重要的,在设计电路图时发现对单片机的串行口工

温馨提示

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

评论

0/150

提交评论