数字频率计的设计与实现.docx

上传人:b****7 文档编号:11394587 上传时间:2023-02-28 格式:DOCX 页数:19 大小:389.83KB
下载 相关 举报
数字频率计的设计与实现.docx_第1页
第1页 / 共19页
数字频率计的设计与实现.docx_第2页
第2页 / 共19页
数字频率计的设计与实现.docx_第3页
第3页 / 共19页
数字频率计的设计与实现.docx_第4页
第4页 / 共19页
数字频率计的设计与实现.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

数字频率计的设计与实现.docx

《数字频率计的设计与实现.docx》由会员分享,可在线阅读,更多相关《数字频率计的设计与实现.docx(19页珍藏版)》请在冰豆网上搜索。

数字频率计的设计与实现.docx

数字频率计的设计与实现

基于单片机的数字频率计的设计

摘要本文论述了基于单片机的数字频率计的实现,介绍了开发频率计所需要的各种软件。

详细阐明了频率计的设计步骤以及方法,通过以89C52单片机为核心,利用单片机的算术运算和控制功能并采用LED数码管将所测频率显示出来。

本频率计设计简洁,适用范围广。

关键词单片机;数字频率计;计数器

引言

随着电子信息产业的发展,频率的测量在科技研究和实际应用中的作用日益重要。

频率是电子技术领域的一个基本参数,同时也是一个非常重要的参数。

由于科学技术的不断发展提高,人们对科技产品的要求也相应的提高,数字化的电子产品越来越受到欢迎。

频率计作为比较常用和实用的电子测量仪器,广泛应用于科研机构、学校、家庭等场合,因此它的重要性和普遍性勿庸质疑。

数字频率计具有体积小、携带方便,功能完善、测量精度高等优点,因此在以后的时间里,必将有着更加广阔的发展空间和应用价值。

比如将数字频率计稍作改进,就可制作成既可测频率,又能测周期、占空比、脉宽等功能的多用途数字测量仪器。

将数字频率计和其他电子测量仪器结合起来,通过传感器制成各种智能仪器仪表,应用于航空航天等科研场所,对各种频率参数进行计量;应用在高端电子产品上,对其中的频率参数进行测量等等。

研究数字频率计的设计和开发,有助于频率计功能的不断改进、性价比的提高和实用性的加强。

国际上数字频率计的分类很多。

按功能分类,因计数式频率计的测量功能很多,用途很广。

所以根据仪器具有的功能,电子计数器有通用和专用之分。

通用型计数器是一种具有多种测量功能、多种用途的万能计数器。

专用计数器指专门用来测量某种单一功能的计数器。

数字频率计按频段分类

(1)低速计数器:

最高计数频率<10MHz;

(2)中速计数器:

最高计数频率10—100MHz;(3)高速计数器:

最高计数频率>100MHz;(4)微波频率计数器:

测频范围1—80GHz或更高。

1频率计概述

1.1频率计原理

频率就是周期性信号在单位时间(1s)内变化的次数。

若在一定时间间隔T内测得这个周期性信号的重复变化次数N,则其频率可表示为f=N/T。

数字频率计是计算机、通信设备、音频视频等科研生产领域中不可缺少的测量仪器,它是一种用十进制数字显示被测信号频率的数字测量仪器。

它的基本功能是测量正弦信号,方波信号及其他各种单位时间内变化的物理量。

1.2频率计设计方法

以前的频率计大多采用TTL数字电路设计而成,其电路复杂、耗电多、体积大、成本高。

随后大规模专用IC(集成电路)出现,使得频率计开发设计变得简单,但由于价格较高,因此利用IC设计数字频率计的较少。

单片机自问世以来,性能不断提高和完善,其资源又能满足很多应用场合的需要,加之单片机具有集成度高、功能强、速度快、体积小、功耗低、使用方便、价格低廉等特点,因此,在许多领域被广泛的应用,并且正在逐步取代现有的多片微机应用系统。

单片机的潜力越来越被人们所重视。

特别是当前用CMOS工艺制成的各种单片机,由于功耗低,使用的温度范围大,抗干扰能力强、能满足一些特殊要求的应用场合,更加扩大了单片机的应用范围,也进一步促使单片机性能的发展。

本文考虑以单片机为控制平台设计一种频率计,整个设计采用定时、计数的方法测量频率,不但切实可行,而且体积小、精度高、保密性强、设计简单,大大降低了设计成本和实现复杂度。

单片机实现的数字频率计的测频方法主要有以下几种:

脉冲数定时测频法,脉冲周期测频法,脉冲数倍频测频法,脉冲数分频测频法,脉冲平均周期测频法,多周期同步测频法。

本设计想设计一个低速计数器,用于对实验室的各种电子测量设备的本地振荡器进行校准。

所以设计中采用了相对简单的脉冲数定时测频法,利用STC89C52单片机的T0、T2的定时计数器功能,来完成对输入信号进行频率测量,频率结果通过5位八段数码管显示器显示出来。

2频率计的总体方案及硬件设计

本设计的是一种以单片机为主控制的频率计。

由单片机的计数器对输入进来的波形进行计数,由单片机的定时器进行内部定时,最后通过锁存器进入显示电路显示数值。

频率计是由不同功能电路组成的一个完整电路,常见的频率计由四部分组成:

被测时钟输入电路、计数电路、控制电路以及输出显示电路。

被测时钟输入电路的作用是将被测信号变成脉冲信号;计数电路是对被测信号进行精确的计数;输出显示电路是将计数得到的数值进行运算然后通过数码管或者液晶显示出来以供判断;控制电路是整个电路的控制部分,可以控制计数的开始与结束,或者对频率计增加新的功能。

频率计各个功能电路协调工作,使得能够比较精准的测量出信号的频率。

因为单片机内部振荡频率很高,所以一个机器周期的量化误差相当小,可以提高低频信号的测量的准确性。

本设计整体设计思路如框图2.1所示。

图2.1设计思路框图

 

2.1单片机部分

单片机诞生于20世纪70年代末,经历了SCM、MCU、SOC三大阶段。

单片机是一种集成在电路芯片,是采用超大规模电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。

本次设计采用了STC89C52单片机,STC89C52是低电压、高性能CMOS8位单片机,片内含可反复擦写的只读程序存储器。

如图2.2所示

图2.2单片机

系统板上硬件连线:

(1)把“单片机系统”区域中的P0.0-P0.7(实际焊接中用P1)与“动态数码显示”区域中SN74HC573锁存器端口D0—D7用排线连接。

(2)把“单片机系统”区域中的P2.6-P2.7与“动态数码显示”区域中的SN74HC573锁存器端口的LE相连。

(3)把“单片机系统”区域中的P3.4(T0)端子用导线连接到“频率产生器”区域中的WAVE端子上。

2.2控制电路

控制电路是整个电路设计成败的关键。

其核心就是单片机,单片机接受外部脉冲的控制命令响应中断,启动定时计数器,这样设计可以人工干预测频的开始,更具有人性化。

同时还通过端口控制锁存器实现动态显示电路,产生一锁存保持信号,使1S内的计数结果显示一段时间,以便观察,下一步输出一清零脉冲,使计数器的原纪录数据清零,准备下次计数。

控制电路产生的锁存信号应在1S计数结束,清零信号应在锁存信号产生后产生。

2.3锁存部分

锁存部分是由两个74HC573组成。

两个锁存器上的LE分别接单片机上的P2.6、P2.7口,用于传输段和位的数据。

当LE为1时,锁存器对于数据是透明的D0~D7的数据能够透明传输到Q0~Q7;当LE为0时,输入端D0~D7的数据将被锁存到输出端Q0~Q7。

加这两个锁存器的作用是对P1口的资源利用,可以通过2个锁存器同时对数码管的段和位同时选择,实现数码管的动态显示。

如图2.3所示。

 

图2.3锁存器

2.4显示部分

数据显示电路由八段数码管组成,采用器件LED数码管。

数码管分为共阴极和共阳极两种,本系统设计采用的是共阳极数码管。

数码管的显示分为静态显示和动态显示两种,静态显示稳定亮度高,但是比较复杂,动态显示的电路简单,反应灵敏,但是显示亮度比较低,本系统采用动态显示数码管。

如图2.4所示。

图2.4数码管

3频率计的软件设计

3.1相关开发工具简介

3.1.1KEIL软件简介

在频率计设计过程中的软件设计部分主要采用KEILSoftware公司出品KEILuv4for80c51编译系统,这款软件是51系列兼容单片机的软件开发系统,它可以使用汇编语言和C语言作为输入源程序,当然C语言和汇编语言相比,在功能上、结构性、可读性、可维护性上有明显的优势,但是编译效率和代码的优化性上都不如汇编语言,输入的源程序分别由C51及C51编译器编译生成目标文件(.OBJ),无论用C语言还是用汇编语言编写的源程序KEILC51都能够高效率的生成目标代码,目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成Intel标准的Hex文件,Hex文件是单片机能够识别并且可以执行的文件。

Hex文件可以使用编程器下载到单片机中。

如图3.1为KEIL的进入界面。

图3.1KEIL界面

3.1.2STC-ISP简介

前面提到STC公司的单片机能够执行KEIL编译系统生成的Hex文件,那么如何将Hex文件下载到单片机中呢,我们采用的是STC公司自主研发的一款STC-ISP单片机下载编程烧录软件,主要是针对STC系列单片机而设计的,可下载STC89系列、12C2052系列和12C5410等系列的STC单片机,使用过程中只要将单片机通过USB接口电路和电脑主机相连接,装上驱动程序,打开STC-ISP软件就可以识别到单片机,选择好芯片型号和要下载的程序就可以完成下载功能,现已被广泛使用。

如图3.2为STC-ISP下载界面。

图3.2STC-ISP下载界面。

3.1.3PROTEL99se简介

在频率计设计的硬件电路设计部分中,主要使用的是PROTELTechnology公司开发的PROTEL99SE软件。

这款软件是基于Windows环境下的电路板设计软件,PROTEL99SE主要由电路原理图设计(AdvancedSchematic)和印刷电路板设计(AdvancedPCB)两大部分组成,功能强大,人机界面友好,易学易用,能够提供单片机等常用的一些电子器件原理图,使用软件能够画出频率计的设计原理图,并能够进行原理图的电气规则检查和信号完整性分析,如果条件允许的话,还可以自己设计PCB做出一个完整的硬件产品。

如图3.3为PROTEL设计页面。

图3.3PROTEL设计页面

3.2软件程序设计

基于单片机的频率计是一种硬件+软件的模式,也就是一种嵌入式产品,所以在频率计的设计过程中要考虑到硬件和软件两方面的设计,具体的软件要根据硬件电路来编写(),为了高质量的完成设计,一般都是首先搭建硬件电路,再电路完成的基础上再编写软件。

用单片机设计频率计通常采用两种计数办法,第一种方法是使用单片机自带的计数器对输入脉冲进行计数;第二种方法是单片机外部使用计数器对脉冲信号进行计数,计数值再由单片机读取。

第一种方法的好处是设计出的频率计系统结构和程序编写简单,成本低廉,不需要外部计数器。

因此本文采用第一种方法。

3.2.1程序流程图

开始

 

入口

 

系统初始化

频率计数

显示

3.2.2程序的功能实现过程

(1)单片机定时计数原理和设置

单片机内部定时是晶振的12分频计数,计数源是内部的脉冲信号。

计数器是在每个机器周期的S5P2状态时采样T1端口,当前一个机器周期采样为1且后一个机器周期采样为0时,计数器加1计数。

计算机需用两个机器周期来识别1次计数,因而最大计数速率为振荡频率的1/24。

在采用12MHz晶振的情况下,单片机最大计数速度为0.5MHz即500kHz。

另外,此处对外部事件计数脉冲的占空比无特殊要求,但必须保证所给出的高电平在其改变之前至少被采样1次,即至少保持1个完整的机器周期。

由此可见,从T0口输入脉冲信号,T0可实现对脉冲个数的计数。

当定时计数器T0设定为计数方式时,其计数脉冲是来源T0端口的外部事件。

当T0端口上出现由“1”(高电平)到“0”(低电平)的负跳变脉冲时,计数器则加1计数。

将定时器/计数器的方式寄存器TMOD,用软件赋初值0x06。

这时定时器/计数器T0采用工作方式2,即T0为8位自动重装初值计数器。

采用定时器/计数器T2作为自动重装初值定时器,设计一次中断定时62.5ms,在定时中断程序中定义变量计数16次达到1s定时。

当达到1s时进入定时器2中断,使计数值被记录到缓冲数据数组,最后通过主函数显示出来。

见程序如下。

voiddelay(unsignedinta)

{

unsignedchari;

while(a--!

=0)

for(i=125;i>0;i--);

}

延时程序为1ms。

由于执行一条for()语句为4us所以循环两次delay

(2)为1ms。

voidtimer_init(void)

{

TMOD=0x06;

TH0=0;

TL0=0;

TR0=1;

ET0=1;

RCAP2H=(65536-62500)/256;RCAP2L=(65536-62500)%256;

TH2=RCAP2H;

TL2=RCAP2L;

ET2=1;

TR2=1;

EA=1;

}

定时器/计数器初始化程序。

voidtimer2(void)interrupt5

{

unsignedinti;

time++;

TF2=0;

if(time==16)

{

time=0;

EA=0;

fre=(long)count*256+TL0;

for(i=0;i<=5;i++)

{

dis_buffer[i]=fre%10;

fre=fre/10;}

TL0=0;

TH0=0;

count=0;

EA=1;

}

}

定时器T2中断程序。

voidmain()

{

timer_init();

while

(1)

{inti;

for(i=0;i<=4;i++)

{

duans=1;

P1=dis_code[dis_buffer[i]];

duans=0;

weis=1;

P1=dis_bit[i];

weis=0;

delay

(2);

}

}

}

通过主函数显示出来

(2)外部中断的原理和设置

外部中断是程序在正常执行时,由于受到其它原因,暂时停止正常程序的执行去执行中断服务程序,再返回原来中断的地方继续执行的过程。

计数器T0设置成计数中断,当有被测频率脉冲负跳变时进入中断计数。

如下计数器T0中断。

voidtimer0()interrupt1

{

count++;

}

3.3程序的调试

编写好的程序最先在单片机开发板上调试,所使用的开发板是天翔TX-1C开发板,在此开发板上调试通程序以后外植到万能板上焊接。

如图3.4。

图3.4单片机

3.4设计过程中出现的问题

在最开始设计程序时没有考虑锁存器,直接编完程序以后从开发板的引脚引出到面包板上连接LED显示器,发现显示器的亮度不够,最开始认为是显示延时的问题,但是调试延时后没发现亮度有改善,后来以为是动态显示的缘故但是当改变完程序变为静态显示之后发现亮度没有显著的改善。

最后经过多方查询知道添加锁存器可以驱动LED显示器,使之亮度增加,当改变完程序之后发现亮度有明显的改善,由此我们设计出了亮度高的LED显示器。

我们设计的单片机的晶振是12M,在低频时比较准确但是到了频率大一些时输出显示就有了明显的误差。

基于这种误差,可以有几点解决方法:

第一,选用频率较高和稳定性好的晶振。

例如现在也会有40MHz甚至更高晶振频率的单片机。

第二,测量频率较高的信号时,可先对信号进行分频,再进行测量。

第三,改进定时计数原理或外加一种专门的计数器,从根本上减小误差。

由于定义计数变量fre为unsignedlongfre因此可知频率的计数范围为0~65535。

其设计出的成品最大频率可测65751Hz,显示为65284Hz。

误差比较大,如图3.5。

图3.5实物图

4频率计的功能扩展完善

(1)增加预处理电路部分

在实际工作中,需用两级NPN放大管对输入的频率进行放大,如果可以再级联一个NPN放大管或者采用放大能力更强的三极管或CMOS管代替。

后一种思路虽然在价格上有所增加,但却减少了电路的复杂程度,并且在电路板一旦出现问题时,能尽最大可能的减少元器件的更换和连接线路的修改,非常方便和实用。

(2)增加键盘控制

通过按键实现数字频率计的测频率,周期,占空比,脉宽等各项功能。

按不同的键起到不同的作用,也就是完成不同的功能。

还可以根据按键数的多少来选择不同的键盘。

所以我们可以从实际操作中知道键盘的扩展是非常方便的。

(3)增加液晶显示器(LCD)进行数据显示

LED显示管只能显示0~9和一些简单的英文字母,频率计的功能就受到极大的限制,而LCD显示管能够解决LED的不足,增强显示功能。

LCD具有体积小、低耗电量、无辐射危险,平面直角显示以及影像稳定不闪烁等优势,因此广泛应用于各种仪表设备中去。

LCD显示器主要有字符型和点阵型两种。

5结束语

本文是应用单片机设计的数字频率计。

利用C语言进行单片机应用系统数字频率计的设计,不仅编程简单,精度高,而且避免了汇编语言在进行乘除法运算时要考虑采用浮点运算的要求。

与汇编语言相比编程语句大大减少。

在这段时间里,我系统的学习了单片机的知识,也看到了单片机控制程序的广阔前景,选择这个课题,正是希望能加深自己对单片机各方面的理解,并在运用先前学到的知识进行设计的过程中,进一步的理解其实质和作用,巩固和拓展以前的学习成果,从而希望今后能在这个领域做出成绩。

设计的过程中,我们也真正的体会到了书本知识转化为实践时的困难,往往很不起眼的一件事情,就是设计的关键,必须得搞清楚。

为了查找相关的技术文献资料,我们上网,去学校图书馆查找资料,找老师咨询,从而学到了书本上学不到的东西,并且掌握了设计的一般方法。

时间很短,我们的能力也有限,很可能我们的设计存在很多的不足,但我在这次设计中学到了很多东西。

 

6致谢

 

参考文献

[1]频率计XX百科.

[2]Protel99SE电路设计与仿真教程.北京:

机械工业出版社.

[3]李广弟.单片机基础.北京:

北京航空航天大学出版社.

[4]彭伟.单片机C语言程序设计实训100例.北京:

电子工业出版社.胡烨.

[5]谭浩强主编.C程序设计教程.北京:

清华大学出版社.

[6]周润景等.基于PROTEUS的电路及单片机设计与仿真.北京:

北京航空航天大学出版社.

 

DigitalFrequencyMeterDesignBasedonMCU

ComputerandInformationEngineeringCollege@@

Directedby@@@Teacher

AbstractThispaperpresentsthedesignschemeofdigitalfrequencymeterbasedonMCU,andintroducesavarietyofsoftwareneeded by the frequencymeter,andexplainindetail the designsteps andmethods of the frequencymeterbySTC89C52asthecontrolcore, whichusearithmeticoperations andcontrolfunctions ofthe MCU ,andthendisplaybyLEDdigital displaytubes.Thisfrequencymeterissimpledesignforawiderange.

KeyWordsMCU;digitalfrequencymeter;Counter

附录

(1)成品实物图

(2)源程序代码

#include

unsignedcharcodedis_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,

0x80,0x90};//段选

unsignedcharcodedis_bit[]={0x10,0x08,0x04,0x02,0x01};//位选

unsignedchardis_buffer[]={0,0,0,0,0};//缓冲

unsignedcharcount=0;

unsignedchartime;

unsignedlongfre;

voidtimer_init();

voiddelay(unsignedinta);

sbitduans=P2^6;

sbitweis=P2^7;

//-----------------------------------------------------

voiddelay(unsignedinta)//延时约1ms(12Mhz晶振)

{

unsignedchari;

while(a--!

=0)

for(i=125;i>0;i--);

}

//------------------------------------------------------

voidtimer_init(void)//定时/计数器初始化

{

TMOD=0x06;//计数器0工作工作方式2,自动重装初值

TH0=0;//计数器初值为0

TL0=0;

TR0=1;//计数器开始计数

ET0=1;//打开计数器0中断

RCAP2H=(65536-62500)/256;//在程序初始化的时候给RCAP2L和RCAP2H值,

RCAP2L=(65536-62500)%256;

TH2=RCAP2H;//12M晶振下每次中断62.5ms

TL2=RCAP2L;

ET2=1;//打开定时器2中断

TR2=1;//定时器2开始计时

EA=1;//开总中断

}

//----------------------------------------------------------------

voidtimer2(void)interrupt5//定时器2中断(62.5ms)

{

unsignedinti;

time++;

TF2=0;//定时器2的中断标志位TF2不能够由硬件清零,所以要在中断服务程序中将其清零

if(time==16)//定时1s时间到

{

time=0;//计时清0

EA=0;//关中断

fre=(long)count*256+TL0;//count*256强制转换成long型,

否则将不产生进位

for(i=0;i<=5;i++)

{

dis_buffer[i]=fre%10;

fre=fre/10;

}

TL0=0;//清零计数器0计数

TH0=0;

count=0;//清零计数器0计数

EA=1;//开始中断

}

}

//--------------------------------------------

voidtimer0(void)interrupt1//计数器0中断

{

count++;}

//----------------------------

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1