简易数字频率计
简易数字频率计
论文摘要:
本系统用单片机89C51为核心, 设计了能够测量频率、周期、脉宽和占空比的简易数字频率计。本系统包括前端放大整形、分频处理和单片机数据处理三大模块。前级放大整形模块采用74HC04做放大器对信号进行放大;分频处理模块提高测量的频率范围;单片机数据处理模块利用软件分频的方法,克服了±1误差在高低频段精度不等的缺陷,提高了测量系统的精度。
本系统实现了测量频率、周期、脉宽和占空比的测量要求,且测量的频率可以达到0.1Hz —10MHz 。频率和周期的测量误差小于0.01%,脉宽的测量误差小于1%。基本完成了任务设计的要求。
引言
设计并制作一台简易的数字显示频率计。
基本要求:对幅度为0.5V —5V ,频率为1Hz —1MHz 的正弦波和方波信号进行频率和周期的测量,测量误差≤0.1%。能对幅度为0.5—5V ,脉冲宽度≥100μS 的脉冲波进行测量,测量误差≤1%。
发挥部分:扩展频率测量范围为0.1Hz —10MHz (信号幅度0.5V —5V ),测试误差降低为0.01%(最大闸门时间≤10s )。测量并显示脉冲信号(幅度0.5V —5V 、频率1Hz —1kHz )的占空比,占空比变化范围为10%—90%,测量误差≤1%。在1Hz —1MHz 范围内及测试误差≤0.1%的条件下,进行小信号的频率测量,提出并实现抗干扰的措施。
一.方案比较与论证
方案一:系统测频部分采用中小规模数字集成电路,用机械式功能转换开关换档,完成测频率、测周期及测脉宽等功能。该方案的特点是中小规模集成电路应用技术成熟,能可靠的完成频率计的基本功能,但由于系统功能要求较高,所以电路过于复杂。而且多量程转换开关使用不便。原理框图如图1所示。
图1 方框图
方案二:采用直接测频法,把被测频率信号经脉冲形成电路后加到闸门开通时间T (以秒计)内,被计数的脉冲被送到十进制计数器进行计数。设计数器的值为N ,由频率定义式可以计算得到被测信号频率为f=N/T。经过分析,本种测量方法在低频段的相对测量误差较大。增大T 可以提高测量精度,但在低频段仍不能满足设计的要求。
方案三:系统采用89C51单片机为核心,门控信号由单片机内部的计数定时器产生。由于单片机的计数频率上限较低(12M晶体振荡器时约为500KHz), 所以需对高频被测信号进行硬件预分频处理,89C51则完成运算、控制及显示功能。由于使用单片机使整个系统具有极为灵活的可编程性,能方便地对系统进行功能扩展和改进。系统方框图如图2所示。
图2 系统方框图
比较以上三种方案,都有一个共同就是为了提高系统的测量精度和灵敏度,三中方案都使用了小信号放大整形电路。但是每个方案各有不同,方案一由于电路复杂,系统实现起来不方便,而且调试困难。对于方案二从系统设计的测量范围0.1Hz —10MHz ,以频率下限0.1Hz 来说,要达到误差
二.测量原理
1.频率测量
由于单片机具有程序运算功能,且频率为周期的倒数,使频率测量与周期测量可以互通。按照频率的定义,即单位时间内周期信号的发生次数,通过参考晶体振荡提供了测量的时间基准,分频后通过控制电路去开启与关闭时间闸门。闸门开启时,经放大整形后的测量信号进入计数器进行计数,闸门关闭时,停止计数。若闸门开放时间为T g , 计数值为N ,则被测频率f x =N/Tg 。
测频的框图如图3所示。
图3 测频框图
用这种频率测量原理,对于频率较低的被测信号来说,存在着测量实时性与测量精度之间的矛盾,由分频系数M=Tg /Tr (T r 为参考晶振的周期)本身是没有
误差的(若电路工作正常的话),测量误差主要由以下两种因数产生的:计数误差和参考晶体振荡的误差,也即
∆f /f =(∆N /N ) +(∆f r /f r ) =(∆Nf r /M f ) +(∆f r /f r )
为减小第二项误差,可采用高精度的参考晶体振荡器。对于第一项误差∆N 为计数相对误差,其最大可达±1,属于不可避免的系统误差,若要减少∆N /N ,就必须增大N ,在被测信号频率很低,为达到一定的测量精度,就要求闸门开放时间大得难以忍受,即一次测量过程的时间很长,失去了使用意义。
例如若被测频率为10Hz ,精度要求为±0.01%,则最短闸门开放时间为
N =∆Nf /∆f =1/0.0001=10000
T g =N /f =1000s
像这样的测量周期根本不可能接受的,可见频率测量法不适用于低频信号的测量,在同样精度下10MHz 的测量仅需要1ms ,即对于高频信号适宜用此方法测量。
2.周期测量
周期测量的基本原理方框图如图4所示。
图4 测周期框图
它与测频基本结构是相同的,只是把晶体振荡产生的基准信号与被测信号的位臵互换了一下,由此得T =N /M f r =N T r /M ,计数值N 与被测信号的周期成正
比,N 反映了M 个信号周期的平均值。利用周期测量法在一定信号频率范围内,通过调节分频系数M ,可以较好地解决测量精度与实时性的矛盾。由上式可得:
∆T /T =∆N /N +∆T r /T r =∆N /TM f r +∆T r /T r
第二项误差取决于晶体稳定度,第一项为计数的量化误差,故该项主要取决于N 的大小。在平均周期测量法中,N 值的大小与测量时间的长短成正比,可根据测量精度要求而定。假设∆N /N 的允许误差为±0.001%,则N=105,在T r 选定时测量时间等于105T r ,,若T r =2μS ,则测得时间等于0.2s 。对于不同范围的被测
周期信号,可以通过调节分频系数M 的大小,达到相近的测量精度,也就有相近的测量时间,且不会太长。
当然,对于高频信号,测量周期的方法就需要很大分频系数M ,增加了硬件的复杂性,不宜采用测周期的方法。
3.脉宽和占空比测量
在脉冲周期T p 、脉冲宽度T w 、占空比T w /Tp 、两个脉冲的时间间隔T a-b 等测量中,都要应用时间测量。实际上,时间间隔测量法与周期测量法类同,只是增加了一个信号通道而已。如图5中A 、B 通道的波形与闸门开闭关系,由单片机的内部运算即可得占空比。
图5 通道的波形与闸门开闭关系图
三.硬件电路设计与说明
为了测量小信号,需要在输入端加前臵信号处理电路,将小信号放大整形后,送入后级分频电路进行处理。使用分频电路是因为门控信号由89C51内部的计数定时器产生,单位为1us 。由于单片机的计数额定上限较低(12MH2晶振时约500 kHz ),所以需对高频被测信号进行硬件预分频处理。又因为对频率较低的信号,我们不必分频,只是对高频信号要分频,因此我们使用模拟开关4052对不同频率的信号进行不同的分频。
1.小信号放大电路
根据任务的要求,对与一些小信号也应该准确地测出其频率,所谓的小信号即是电压幅值小,约几百毫伏或是几十毫伏的信号。对于这么小的信号,要求对其进行放大,必须能让后面的单片机识别出其频率的变化,这就要求电路有足够的放大倍数,而且要有较高的稳定度。
对于信号放大,我们不仅要考虑到对信号的放大作用,还应该注意频率的带宽。由NE5534构成电压跟随器起到增大输入阻抗的目的。然后有两个二极管对输入信号进行限幅,使其幅度限制在大约0.7V ~-0.7V。再由NE5534将信号
进行放大,最大的放大倍数为10倍。NE5534的增益带宽积GB =10MHz,在输入信号的频率为1MHz 时,我们对它进行放大10倍是可以的。但是这种方案只能达到任务设计的基本要求,并不能达到任务的发挥部分的要求。
由此我们可以利用反向器的线形区作为放大器,它的增益带宽积有10MHz 以上,频响范围很宽,能达到测量10MHz 信号的任务要求。又由于反向器74LS04的转换速度低,不适用本系统,所以我们采用转换速度更快的74HC04。反向器的传输特性如图6所示。
图6 反向器的传输特性
由图我们可以看出,图中的线形区的斜率很大,传输特性变化比较急剧,我们也就是利用了这种特性,用反相器作为放大器来使用,而且电路反应速度也很快。只要将静态工作点设臵在图中的反相器线形区域中,调节输入输出的电压值相同,就能将电路工作于放大状态。具体的实现电路如图7所示。
图7 小信号放大电路
这种电路实现简单,便于调试。图中使用了三级放大,保证了小信号的放大倍数,使单片机能识别出小信号的频率。最后在输出端加了一个7414施密特触发器作为输出波形的整形。
2.分频器
门控信号由89C51内部的计数定时器产生,单位为1us 。由于单片机的计数额率上限较低(12MH2晶振时约500 kHz),所以需对高频被测信号进行硬件预分频处理。本设计对f i ≥100Kz 的被测信号先进行100分频或是10分频再送入单
片机进行数据处理;对于1Hz ≤f i ≤100KHz 的信号直接送入单片机进行数据处
理。由单片机的P1.0口和P1.1口控制74LS151的A 、B 端来进行选择。74LS151的输出端接单片机的T1计数器,对信号进行计数。对被测信号的100分频,则是由两个4017芯片来实现的。电路如图8所示。
图8 分频器电路
3.按键与显示
系统的输入设备采用4位带上拉电阻的按键和控制4个LED 指示灯。由单片机的P0.0—P0.3作为按键输入端口,P1.2—P1.5端口控制4个LED 指示灯的亮灭。输出显示采用8位的串行显示。电路如图9所示。
图9 串行显示电路
4.CPU 主电路
电路如图10所示。
图10 CPU主电路图
四.软件设计与流程图
1.系统流程设计
系统的主流程图如图11所示。
图11 系统主流程图
由软件完成各部分的控制和协调,下面对图11的流程图进行介绍。
初始化系统:系统上电后完成硬件和系统变量的初始化。其中包括外围器件的端口设定、臵中断和定时器状态、设臵控制口P0和P1的状态。
等待功能键输入:由键盘输入测频、测周、测脉宽和测占空比的显示选择。
相应量的测量计算:单片机读入计数值M 、N ,通过单片机的内部编程,选用适应的准确算法,计算出频率和周期。测量脉宽时只读入计数器的值进行处理,计算出脉宽的值。占空比的计算只是将脉宽值与周期的比值。
显示:89C51通过控制P3.0和P3.1两个端口,让输出结果通过串行显示的方式,输出显示出来。
2.频率和周期中的自动量程转换
频率和周期是可以互相转换的,测出其中一个参数就可以靠高精度的算法算出另一个参数。因此,在测量频率或周期中,实际上是采用频率测量法还是周期测量法,并不取决于最后要求显示的是频率还是周期,而是取决于用哪一种测量方法精度更高。系统将根据信号的频率范围来自动选择测量方法,信号频率较高时将采用频率测量法,并根据不同频率改变计数闸门开放的时间(定时时间),较低时将采用周期测量法,并根据不同频率自动改变周期扩展倍数,以满足精度要求。
五.系统误差分析与抗干扰措施
1.系统误差分析
该系统的测量误差主要由以下两种因素产生:计数误差和参考晶体振荡的误差,也即
∆f /f =(∆N /N ) +(∆f r /f r ) =(∆Nf r /Mf ) +(∆f r /f r )
因为采用了高精度的参考晶体振荡器,所以参考晶体振荡的误差减小到很小,可以忽略。对于计数误差,ΔN 为计数绝对误差,其最大可达±1,属于不可避免的系统误差,若要减小ΔN/N,就必须增大N 。
本系统为了提高测量精度,采用了直接与间接测量结合的方法进行测量。根据任务书提出的要求上面已经算出临界频率为10KHz 。
当f i 在10KHz ≤f i ≤10MHz 时,我们对10KHz ≤f i ≤300KHz 的信号采用测频
的方法测量;对300KHz ≤f i ≤10MHz 的信号先进行10分频或100分频后再用测
频法测量(即把300KHz ≤f i ≤10MHz 的信号变为10KHz ≤f i ≤300KHz 的信号进
行测量,再将测量结果乘于100)。在分频电路工作正常的情况下,分频不产生误差。我们采用闸门时间为1S ,当被测频率为1KHz 时,可计数1000个,这时由±1量化误差而导致的相对测试误差为0.l %;当被测信号为10KHz 和100KHz 时,可分别计数10000个和100000个,这时由±1量化误差而导致的相对测试误差分别为0.0l %和0.001%。为了进一步提高测试精度,我们可以对相应的频段改变闸门时间,让测试误差为0.001%。这样该系统在测量10KHz ≤f i ≤10MHz
的信号时,系统所产生的误差也都会小于0.01%。
当f i 在10KHz 以下时,用测周期的方法测量,时标频率采用1MHz 。要满足
0.01%的误差对10KHz 以下的频率再进行分段:0.1Hz —1Hz , 1Hz—10Hz ,10Hz —100Hz ,100Hz —1KHz ,1KHz —10KHz 。测量周期的误差公式如下式所示:
∆T /T =∆N /N +∆T r /T r =∆N /TM f r +∆T r /T r (M 为分频系数)
由上式可知,计数器测量周期时,其测量误差主要决定于量化误差,被测周期越大即频率越小时,误差越小,被测周期越小时误差越大。∆T r /T r 为参考晶体振荡
的误差,可以忽略。所以上式可以改写为:
∆f /f r =f r /10M 6
所以为了减小测量周期的误差,对于10KHz 以下不同的频段,我们可以改变分频系数M ,让相对测试误差为0.00l %,这样该系统在测量10KHz 以下的信号时,系统所产生的误差都会小于0.01%。
任务书要求测量脉宽≥100us ,并且占空比10%~90%。该系统在测量脉宽时时标频率采用1MHz ,在测量100us 的脉宽时可以计100个数,这时由±1量化误差而导致的相对测试误差为l %。该系统测量脉宽时为了提高精度,当被测信号频率大于1KHz 时,先对其进行100分频后在进行测量。则所以该系统测量脉宽时所产生误差满足任务书的要求(误差≤1%)。
2.抗干扰措施
在高频情况下,线路之间的干扰对频率测量结果影响很大,因此,我们采用了一些高频线路抗干扰措施。
测量电路的电路板采用自制印刷电路板,减小了引线交叉,降低了高频引线干扰,效果明显。例如,在模块初步设计和调试期间,我们在实验板上采用直线连接方式,因电路工作不稳定而出现了很大的测量误差。在自制印刷电路板上完成设计时,这个现象消失了。被测信号经过前臵处理后,引向测量部分的引线全部采用屏蔽线。
在高频时的误差来源还来自于分频时的频率损失,分界处误差最大,但仍在设计要求的范围之内,即全频段误差达标;产生误差的原因是在这些分界点两边所采用的运算方法不同所致,解决问题的办法是尽量不分频,而增加计数器的位数;也可采用频率值平均等方法减小误差。
脉宽测量误差的原因是由门电路延时、施密特整形引起的,可采用减小施密特滞回电压和改用高速AHCT 系列门电路以及选用晶振频率更高的单片机等措施,使测量误差减小。
六.系统测试方法与结果
1.系统测试方法
小信号放大整形:用信号发生器提供几十毫伏至几百毫伏的方波或正弦波信号,用示波器观察电路的输出端,调节电路中的精密电位器,使输出有较好的方波信号。经调试,此电路符合任务要求。
分频器:用信号发生器输出500KHz 的方波信号,经分频后,控制74151的A 、B 控制端,用示波器观察信号的输出频率是否有1分频、10分频、和100分频三种方式输出。经调试,此电路可以正常工作。
串行显示电路:将显示电路与仿真机相连,编制一简单程序进行调试,并观察显示数码管的变化是否正确。通过这种方法可以看出显示模块能够正常工作。
各单元均调试通过后,进行整机调试,其过程如下:将调好的各模块连接在一起,用函数信号发生器产生0.1Hz —3MHz 中的任意频率,先用仿真机代替98C51单片机进行模拟调试,各个模块的控制端是否正确,再由按键控制测量量,观察串显的显示值是否与信号发生器的输出频率相同。再用示波器观察信号发生器的脉宽和占空比是否与系统的测量值相同。信号调试成功后再将程序写入到单片机中进行调试。调试结果显示,整个系统能够正常工作。
2.测试仪器
SP1641B 型函数信号发生器 SS-7802A型示波器 3.测试数据与结果
表1 频率测量数据
表2 周期测量数据
表3 脉宽测量数据
表4 占空比测量数据
七.总结
本系统以89C51为核心,实现了测量频率、周期、脉宽和占空比的测量要求。对于频率、周期、脉宽的测量满足设计的要求,只是占空比的测量误差较大。完成了任务书中的大部分要求。
论文现在有了很大进步,希望再接再厉!对误差分析和数据处理可以参考书上的,但自己一定要弄明白。对测试数据应该给出一些结论性的语句,表达设计效果,不要认为放一些测试数据表格就可以了。