此处贴密封纸,然后掀起并折向报告背面,最后用胶水在后面粘牢。
2015年全国大学生电子设计竞赛数字频率计(F题)2015年8月15日摘要数字频率计可以直接计数单位时间内被测信号的脉冲数,并以数字形式显示频率值。
主要由四个部分构成:输入电路、时基(T)电路、计数显示电路以及控制电路。
首先通过OP37G把输入信号进行放大,由施密特触发器CD40106整形,由于其对正向和负向增长的信号有不同的阀值电压,使得高低电平具有迟滞性,得到更稳定的方波。
接着通过74LS160对过高频率的信号进行分频;而后通过AT89S52控制闸门电路来控制计数器计数的标准时间,再由计数器对通过的高电平进行计数,用数码管显示计数后的高电平数,即得到被测信号的频率。
关键词:AT89S52、放大整形电路、施密特触发器、分频、时基电路、数码管目录1引言: (1)2系统理论分析与设计 (1)2.1放大电路的选择: (1)2.2整形电路: (1)2.3分频电路 (2)2.4计数模块 (2)2.5显示模块 (2)3电路与程序设计 (2)3.1电路的设计 (2)3.1.1系统总体框图 (2)3.1.2 电路原理图 (3)3.1.3电源 (4)3.2程序的设计 (4)3.2.1程序功能描述与设计思路 (4)3.2.2程序流程图 (4)4测试方案与测试结果 (6)4.1测试方案 (6)4.2 测试条件与仪器 (7)4.3 测试结果及分析 (7)4.3.1测试结果(数据) (8)4.3.2测试分析与结论 (8)附录1:电路原理图 (9)附录2:源程序 (10)数字频率计(F题)1引言:数字计数式频率计能直接计数单位时间内被测信号的脉冲数,然后以数字形式显示频率值。
数字计数器主要由四个部分构成:输入电路、时基(T)电路、计数显示电路以及控制电路。
首先通过宽带前置放大电路把输入信号进行放大,由CD40106整形得到能被计数器识别的脉冲波;接着通过74LS160对过高频率的信号进行分频;而后通过AT89S52控制闸门电路来控制计数器计数的标准时间,再由计数器对通过的脉冲信号进行计数,用LCD1602显示计数后的脉冲数,即得到被测信号的频率。
本系统主要由放大整形模块、分频模块、计数模块、显示模块、电源模块构成,整体流程框图如下:2系统理论分析与设计2.1放大电路的选择:因为输入的被测信号幅值不确定,在本设计中要求测量的幅值在50MV-1V之间,所以必须在对脉冲技术前必须对信号进行处理,使其转化为能被计数器识别的高电平。
方案一:三极管放大优势:放大的可调性更高,缺点:三极管的放大特性在高频时不稳定,只适用于中低频的放大。
且单个三极管的放大倍数有限,对于幅值极低的信号无法满足。
方案二:运算放大器放大优势:电路简单,集成度高,比较稳定缺点:运算放大器就是由多个三极管集成,单其参数固定,放大倍数足够。
且运算放大器的工作范围较大,对于较高频率的信号同样适用。
综合考虑本设计的需求,我们决定采用运算放大器进行信号的放大,因为本次设计的要求是达到10MHZ以上,采用三极管无法处理这么高的频率。
因此采用运算放大器。
2.2整形电路:由于输入的信号可以是正弦波,三角波。
而后面的闸门或计数电路要求被测信号为矩形波,所以需要设计一个整形电路则在测量的时候,首先通过整形电路将正弦波或者三角波转化成矩形波。
方案1:使用电压比较器优点:电路简单,使用方便,容易受到噪声干扰。
缺点:输出的方波不够平稳,在输入的波形不稳定的情况下,电压比较器不能在同样的地方开启,使得输出的方波占空比不稳定。
且当电流不够大时,波形边沿不够陡峭。
方案2:使用施密特触发器优点:因为对正向和负向增长的输入信号具有不同的阀值电压,从而使传输特性具有迟滞特性。
使得输出的波形保持在两种状态之间,较为稳定。
可避免噪声误触发电路。
缺点:对于以0V及以上为低电平的信号,施密特触发器处理效果不好。
综合考虑这两种整形电路,因为本设计只需要多方波和正弦波进行处理,所以决定采用施密特触发器,因其处理的波形更稳定,且能有效避免杂波的干扰。
2.3分频电路因为AT89S52单片机对于1MHZ以上的信号处理比较吃力,所以在对经过放大整形后的脉冲进行计数时,要先对高频的部分进行分频,使其降低到单片机可计数的频段,而后在显示时输出计数的数值乘以相应的分频倍数。
可以选用74LS160计数器对其进行分频,74LS160可以实现任意倍数的分频,比较方便。
我们将输入信号的频率范围分为三个频段:1HZ到100kHZ为低频段,此频段可直接输入单片机进行计数;100kHZ到1MHZ为中频段,放大整形后进行10分频,输入单片机计数;而1MHZ到10MHZ为高频段,放大整形后进行100分频再输入单片机计数。
最后的显示模块即由计数器得到的脉冲数再乘以相应的放大倍数输出显示,即为输入信号的频率。
2.4计数模块计数模块由T89S52单片机进行计数2.5显示模块显示模块由AT89S52单片机进行控制,我们考虑到了数码管显示和LCD1602显示这两种显示方式。
方案一:数码管显示优点:简单明了,数据一目了然缺点:只能显示数字,不能显示其他的提示。
方案二:LCD1602显示优点:可以显示其他提示,使得显示的内容更加全面缺点:成本稍高。
3电路与程序设计3.1电路的设计3.1.1系统总体框图系统总体框图如图1所示\图1 系统总体框图 3.1.2 电路原理图1、宽带放大模块系统框图图2 放大子系统框图2、整形、分频子系统电路图3 整形、放大子系统电路宽带放大、整形分频,脉冲信号 信号源AT89C532单片机 数码管显示3、显示电路图4、显示电路3.1.3电源电源由变压部分、滤波部分、稳压部分组成。
为整个系统提供5V电压,确保电路的正常稳定工作。
这部分电路比较简单,都采用三端稳压管实现,故不作详述。
3.2程序的设计3.2.1程序功能描述与设计思路1、程序功能描述根据题目要求软件部分主要实现自动分档和显示。
1)键盘实现功能:设置频率值、频段、电压值以及设置输出信号类型。
2)显示部分:显示频率、周期、档位。
2、程序设计思路3.2.2程序流程图1、主程序流程图2、显示模块子程序流程图4测试方案与测试结果4.1测试方案1、放大整流模块电路测试:图5 宽带放大电路如图是对放大模块的测试,当输入信号频率在200KHZ以下,波形显示正常,函数信号发生器发出的信号源经过OP37放大过之后,通过示波器观察输出的是频率与信号源相同,幅值为4V到5V的脉冲信号。
施密特触发器CD40106,得出的是频率与信号源相同,幅值为5V的方波,符合计数器的幅值要求。
但输入频率超过200KHZ,OP37输出波形严重失真,并逐渐归零,无法计数。
2、软件仿真测试采用Multisim仿真软件,用软件画好仿真电路,写入编号的程序,查看现象。
图6 输入信号波形图7 输出信号波形图8 软件仿真数码管示数3、硬件软件联调当输入信号频率在200KHZ以下,数码管显示正常与函数信号发生器输出波形的频率一致,误差极小。
当输入频率超过200KHZ,数码管显示数值不再与信号源一致,并逐渐归零。
4.2 测试条件与仪器测试条件:检查多次,仿真电路和硬件电路必须与系统原理图完全相同,并且检查无误,硬件电路保证无虚焊。
测试仪器:函数信号发生器、模拟示波器、数字万用表、数字频率计、5V直流电源、Multisim仿真软件4.3 测试结果及分析Multisim软件仿真结果与实际电路测试结果不同,推测应该是OP37的最大工作频率在200KHZ以下,所以在高频阶段OP37无法正常,故频率计无法正常显示。
而在我们实验室现有的器材中,OP37可以达到的工作频率已经是最高,故受器材限制,频率计无法更进一步,测量更高的信号频率。
4.3.1测试结果(数据)4.3.2测试分析与结论根据上述测试结果,当输入信号超过200KHZ时,频率计的误差就开始增大,当频率越来越大时,频率计示数越来越不稳定,当信号到达3MHZ是示数完全归零由此可以得出以下结论:1、当输入信号在200 KHZ以下时,数字频率计的示数很精确,误差极小,可以正常使用。
2、当输入信号超过200KHZ,数字频率计的示数开始不稳定,一直到2MHZ左右,越来越不稳定,当输入信号超过3MHZ,频率计示数完全归零。
3、频率计只可以在低于200KHZ的频率时能够实现信号频率的精准测量,即只能测量中低频的信号。
综上所述,本设计未达到设计要求。
附录1:电路原理图附录2:源程序#include <reg52.h>#define value P0#define place P1unsigned char d[4];unsigned char Num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f}; sbit clear=P2^3;sbit ledG=P2^4;sbit ledY=P2^5;sbit ledR=P2^6;unsigned char count=0;unsigned char gears;unsigned int tN;unsigned int fCnta;unsigned long regCnta;unsigned int fCntb;unsigned long regCntb;unsigned long pCnt;void Delay(unsigned int DelayTime){while(DelayTime--);}void display(){if(gears==1){d[3]=0;d[2]=pCnt/100;d[1]=(pCnt%100)/10;d[0]=pCnt%10;place=0x01;value=Num[d[3]];Delay(200);place=0x02;value=Num[d[2]];Delay(200);place=0x04;value=Num[d[1]];Delay(200);place=0x08;value=Num[d[0]];Delay(200);ledY=1;ledR=0;}if(gears==2){d[3]=pCnt/1000;d[2]=(pCnt%1000)/100;d[1]=(pCnt%100)/10;d[0]=pCnt%10;place=0x01;value=Num[d[3]];Delay(300);place=0x02;value=Num[d[2]];Delay(300);place=0x04;value=Num[d[1]]+0x80;Delay(300);place=0x08;value=Num[d[0]];Delay(300);ledG=1;ledY=0;ledR=1;}if(gears==3){d[3]=pCnt/1000;d[2]=(pCnt%1000)/100;d[1]=(pCnt%100)/10;d[0]=pCnt%10;place=0x01;value=Num[d[3]]+0x80;Delay(50);place=0x02;value=Num[d[2]];Delay(50);place=0x04;value=Num[d[1]];Delay(50);place=0x08;value=Num[d[0]];Delay(50);ledG=0;ledY=1;ledR=1;}if(gears==4){d[2]=0;d[1]=0;d[0]=0;place=0x01;value=Num[d[3]];Delay(100);place=0x02;value=Num[d[2]];Delay(100);place=0x04;value=Num[d[1]];Delay(100);place=0x08;value=Num[d[0]];Delay(100);ledG=0;ledY=0;ledR=0;}}void intialize(){clear=1;ledG=1;ledY=1;ledR=0;TMOD=0x66;gears=1;RCAP2H=(65536-62500)/256;RCAP2L=(65536-62500)%256;TH2=RCAP2H;TL2=RCAP2L;tN=16;ET2=1;TR2=1;ET0=1;TR0=1;ET1=1;TR1=1;TH0=0;TL0=0;TH1=0;TL1=0;EA=1;void main(){intialize();while(1){display();}}void timer2() interrupt 5{count++;TF2=0;if(count==tN){EA=0;regCnta=(long)fCnta*256+TL1;regCntb=(long)fCntb*256+TL0;TL1=0;TH1=0;TL0=0;TH0=0;fCnta=0;fCntb=0;count=0;clear=0;clear=1;if(gears==1){if(regCnta<1000){pCnt=regCnta;}else{gears=2;}else if(gears==2){regCntb=regCntb*10/100;if(regCntb>=10&®Cntb<10000){pCnt=regCntb;}else if(regCntb>=10000){gears=3;}}else if(gears==3){regCntb=regCntb*10/1000;if(regCntb<10000){pCnt=regCntb;}else if (regCntb>=10000){gears=4;}}else if(gears==4){if(regCntb<2500)gears=1;}EA=1;}}void tally1() interrupt 3{fCnta++;}void tally0() interrupt 1{fCntb++;。