简易数字频率计的设计与制作.docx
《简易数字频率计的设计与制作.docx》由会员分享,可在线阅读,更多相关《简易数字频率计的设计与制作.docx(18页珍藏版)》请在冰豆网上搜索。
简易数字频率计的设计与制作
简易数字频率计的设计与制作
作者:
赵玉龙
【摘要】:
本设计是基于单片机内部的两个定时器/计数器与外围硬件相结合,并通过一定的软件控制达到测量频率的目的的简易数字频率计,可以直接精确测量1KHZ到65.535KHZ的频率范围。
本设计的优点在于直接利用单片机进行频率的测量,更加的方便,实用。
【关键词】:
单片机频率测量
前言
单片机即单片微控制器单元,由微处理器,存储器,I/O接口,定时器/计数器等电路集成在一块芯片上构成,现在应用于工业控制,家用民用电器以及智能化仪器仪表,计算机网络,外设,通信技术中,具有体积小、重量轻、性价比高、功耗低等特点,同时具有较高的抗干扰性与可靠性可供设计开发人员灵活的运用各种逻辑操作,实现实时控制和进行必要的运算.目前单片机更朝着大容量、高性能与小容量、低廉化、外围电路内装化以及I/O接口的增强和能耗降低等方向发展.本设计的意义在于如何利用较少的硬件达到直接测量较高精度频率的目的,更加的方便,快捷,相对于传统的数字频率计实用性更高。
第一章系统硬件电路的设计
1.1方案的选择:
方案一.采用组合电路和时序电路等大量的硬件电路来构成,利用555多谐振荡产生闸门时间,两个D触发器来进行门控信号的选择,数码管,以及其他硬件电路组成。
方案二.利用一块AT89C51单片机芯片直接来驱动数码管。
比较方案一与方案二在实现功能一样的情况下,我们可以发现纯粹利用硬件电路来实现不仅产品体积较大,运行速度慢,而且增加了许多的硬件成本,而利用单片机体积小、功能强、性能价格比较高等特点,在实际使用时节约了很多的硬件成本,符合设计的要求,故而本设计选择方案二来实现频率的测量.
1.2系统功能分析
本系统是基于单片机的简易数字频率计,在硬件的基础上通过软件的控制达到频率测量的目的,整个系统工作由软件程序控制运行。
整个系统主要可以分为两个部分,频率测量单元和频率显示单元。
频率测量单元主要完成对被测信号的测量,而显示单元主要完成用数码形式将测量结果显示出来。
1.3.系统的方框图:
被测信号通过单片机的内部处理,完成对被测信号的测量,经过转换以数字形式显示出来。
图一系统方框图
具体情况如下:
将单片机定时/计数器0设置成定时器方式,由它对单片机机器周期信号计数定时,形成时间间隔T,去控制单片机定时/计数器1的启动和停止,单片机定时计数器1设置成计数器方式,由它对被测信号计数.这里需要说明能够的是单片机内的两个定时/计数器在同一时刻不能既作为计数器使用又作为定时器使用,如设置成定时器模式就不能作为计数器使用;如设置成计数器模式就不能作为定时器使用.
1.4.各功能部件单元电路设计
1.4.1单片机的选择
由于51系列的单片机的功能已经完全符合本设计的要求,考虑到性价比,本设计选择AT89C51作为电路的单片机,完成各项功能。
图二AT89C51
1.4.2单片机基本外围电路设计
1.振荡电路:
Mcs-51单片机的18、19脚为其内部反相放大器的两个引脚,这两个引脚外接一个石英晶振及电容构成自激振荡器,石英晶振可以在1.2-12MHZ之间选择,电容的大小通常为30pf左右,过大或过小都会影响振荡器的起振速度以及稳定性。
MCS-51单片机每个机器周期包含六个状态周期,一个周期包含两个振荡周期,因此一个机器周期可以产生12个机器周期,采用12MHZ的晶体振荡器每个机器周期恰好为1us.
图三振荡电路
2.复位电路:
RST是单片机复位引脚的输入端,在振荡器运行的情况下,要实现复位操作RST脚要至少保持有两个机器周期的时间,即2us的时间,但为了保险起见一般要保持10ms以上的高电平,如果采用的C为10uf,R采用8.2K,时间常数为10×10×8.2×10=82ms,这个时间完全符合要求。
图四复位电路
1.4.351系列的两个定时/计数器
1.结构
MCS-51单片机的51系列有两个定时/计数器,分别记为Timer0和Timer1.,每个定时/计数器有两个外部输入端(T0,INTO和T1,INT1),两个八位的二进制加法计数器(TH0,TL1和TH0,TH1).由两个内部特殊功能寄存器(TMOD,TCON)控制定时/计数器的工作,其中TMOD是定时/计数器模式控制寄存器,其格式如下
表一用于定时/计数器1用于定时/计数器0
TMOD被分成两部分,每部分四位,分别用于定数/计数器0和定时/计数器1,其中GATE和C/
用于控制信号的输入,M1,M0分别用于定义定数计数器的工作方式.
表二用于定时/计数器
TCON也被分成两部分,高四位用于定时/计数器.其中TR1,TR0用于控制计数信号的输入,TF1,TF0为计数器的溢出位.
2.原理
计数信号的选择和控制通过TMOD中的GATE,C/
和TCON中的TR0这三个控制位来实现.
TMOD中的C/
用于选择技术信号的来源:
C/
=0时,计数信号取自于内部,其计数频率为晶振的1/12,此时工作于定时器模式;C/
=1是,计数信号来自于外部T0(P3.4),此时工作于计数器模式.
TMOD中的GATE和TCON中的TR0用于控制计数脉冲的接通,通常有两种使用方法:
*GATE=0时,仅仅由程序设置TR0=1来接通计数脉冲,由程序设置TR0=0来停止计数.此时与外部INTO无关.
*GATE=1时,先由程序设置TR0=1,然后由外部INT0=1来控制接通计数脉冲,INT0=0时则停止计数.如TR0=0,则禁止INT0来控制接通计数脉冲.
所以,GATE是专门用来选择计数器启动方式的控制位,GATE=0时可由程序来启动计数器,GATE=1时可有外部硬件通过INTO端来启动计数.
定时/计数器的工作方式(M0,M1可设置四种内部计数的工作方式):
表三计数器的工作方式
工作方式0主要为兼容早期的MCS-48单片机所保留,一般可用工作方式1来替代.
工作方式1的特点是:
计数范围宽,但每次的初值都要由程序来设置.
工作方式2的特点是:
初值只需设置一次,每次溢出后,初值自动会从TH0加载到TL0或从TH1加载到TL1,但计数范围较工作方式1小.
工作方式3的特点是:
增加了一个独立的计数器,但只能适用于定时/计数器0,而且占用了定时/计数器1的TR1和TF1,所以此时的定时/计数器1只能用于不需要中断的应用.
四种工作方式对溢出的处理方式均相同,加法计数器超出范围后,溢出信号将使TCON中的TF0或TF1置位,计数器回到0或初值,重新开始计数.TF0或TF1置位后,可向CPU提出中断请求,TF0和TF1在CPU响应中断后会自动复位,而在禁止中断响应时,也可由软件来复位.本设计的工作方式将在软件设计中体现.
3.定时和计数范围的计算
由于本设计定时器到工作方式2所以我们只详细介绍工作方式2的定时和计
数范围的计算方法.
工作方式2的计数范围为
计数范围为
-初值=100-初值=256-初值,初值的取值范围为00H-0FFH,即0-255,当初值为0时,可得最大计数值N=255;而初值为0FFH=255时,可的最小计数值N=1.
定时时间T为计数范围乘上计数周期,即
T=(
-初值)×计数周期=(
-初值)×1/fosc×12=12(256-初值)/fosc
根据定时时间T可计算出应设置的初值为:
初值=256-T/计数周期=256-T×fosc/12
当晶振频率fosc=12MHZ时,计数周期为1us,当初值为0时,可得最大定时
时间为T为256us,即0.256ms.如果设定时间为T=0.1ms=100us
初值=256-100us×
1/fosc*12=256-100us*12MHZ/12=9CH,即TH0,TL0或TH1,TL1的初值可设为9CH.本设计的具体参数值在后文的软件设计中具体介绍.
4.定时/计数器中断
定时/计数器的中断源是由其溢出位引入的.当定时/计数器到达设定的时间
或检测到设定的计数脉冲后,其溢出位置位.
TF0和TF1分别为定时/计数器0和定时/计数器1的溢出位,当定时/计数器溢出时,相应的TF1和TM0就会置”1”,由此向CPU提出中断请求.CPU响应中断后,会自动清除这些中断请求标志位,
定时/计数器的计数脉冲由外部引脚T0和T1引入时,定时/计数器就变为计数器.当计数脉冲使得定时器计数溢出时,相应的TF0和或TF1就会置”1”,由此向CPU提出计数器的中断请求.当发生中断请求后,CPU会通过各中断源的屏蔽情况来决定是否响应中断请求,ET1和ET0分别为定时/计数器0,1的中断允许位,当允许为”0”,表示屏蔽相应的中断,即禁止CPU响应来自来自相应中断源提出的中断请求.允许位为”1”,表示允许CPU响应来自相应中断源提出的中断请求.
1.4.4显示单元
图五显示单元
数码管
1.工作原理
数码管使用时通过解码电路得到的数码接通相应的发光二极而形成相应的字。
2.分类
数码管按各发光二极管电极的连接方式分为共阳数码管和共阴数码管两种.
共阳数码管是指将所有发光二极管的阳接到一起形成公共阳极(COM)的数码管.共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮.当某一字段的阴极为高电平时,相应字段就不亮.共阳数码管内部连接如下图所示.
图六数码管
共阴数码管是指将所有发光二极管的阴接到一起形成公共阴极(COM)的数码管.共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮.当某一字段的阳极为低电平时,相应字段就不亮.
本设计采用的是共阳的数码管。
3.数码管的驱动方式:
数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示我们要的数字,因此数码管的驱动方式方式不同,可以分为静态显示和动态显示两类.
1.静态显示驱动:
静态驱动是指每个数码管的每一个段码都是由单片机的I/O口进行驱动,或者使用如BCD码二-十进制译码器进行驱动.静态驱动的优点是编程简单,较小的电流即可获得较高的亮度,占用CPU时间少,便于检测和控制,但占用I/O端口多,只适合显示位数少的场合,本设计中用到了5个数码管需要5*8=40根I/O端口来驱动,而一快8051单片机可用的I/O口才32个,实际使用时必须增加译码器进行驱动,电路复杂.且增加了硬件成本.
2.动态驱动:
所谓动态显示就是将数码管的8显示笔"a,b,c,d,e,f,g,h"的同名端连在一起,另外为每个数码管的公共极COM端增加位选通控制电路,位选通由各自独立的I/O线控制,单单片机输出字型码时,所有数码管都接受相同的字型码,但究竟是哪个数码管会显示字型,取决于单片机对位选通COM端电路的控制,只要我们将所需要显示的数码管的位选通打开,该数码管就显示出自字型,没有选通的数码管就不会亮,通过分时轮流控制各个数码管的COM端,就会使各个数码管轮流受控显示,这就是动态驱动.在轮流显示的过程中,每位数码管的点亮时间为都为一定设置时间,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果与静态显示的效果是一样的但能够节省大量放入I/O端口,硬件电路更加简单,成本低也较低.
在本设计中考虑到实际使用时要求效果相同但可以节省更多的成本,我们采用了动态显示驱动的方式。
从电路图中我们可以看出我们将数码管的段码分别和单片机的P1.0~P1.7相连来控制数码管显示的字型码,数码管的位选通由5个PNP三极管控制,分别接到单片机的P2.0~P2.4端口上,通过程序来控制P2.0~P2.4端口的输出电平就可以控制数码管的显示与关闭。
如P2.0输出低电平时,三极管T1导通,+5V的电源加到第一个数码管的COM端,那么第一个数码管DG1就会显示出相应的数字,显示的数字由P1.0~P1.7输出段码决定,当P2.0输出高电平时,三极管T1截止,数码管DG1就不显示,从而实现数码管的位选通控制。
同理,当P2.1输出低电平时,则数码管DG2显示....
例如要求DG1显示数字"1"时,首先我们将P2.0选通,然后由P1口将数字"1"送至数码管显示,那么数码管DG1显示"1",其他数码管不显示。
如果要求5个数码管显示不同的数字时,只需在程序中逐次选通,同时利用延时程序让各个数码管进行一定时间的延时,就会得到我们想要的看到的数字。
1.4.5.电源电路
图七电源电路
将220V交流电通过一个12V的变压器,经过四个整流二极管D1~D4接成电桥形式(故名桥式整流电路)进行整流,再用电容滤掉整流电路输出电压中的交流成份,保留其直流成份,达到平滑输出电压波形的目的,最后输出5V的驱动直流。
1.5原理图
图八原理图
频率就是单位时间内周期信号出现的次数,若用T表示一定的时间间隔,用N表示在该时间间隔内周期信号重复出现的次数,则周期信号的频率表达为
F=N/T
通过原理图我们可以看出,计数结果就是上式中的N,经单片机计算,测频的结果通过显示电路显示出来供大家观察和读数.
第二章软件的设计
1.1程序设计的步骤
1.分析问题,确定算法。
这一步是能否编好程序的关键,因此在拿到题目时应仔细分析和理解问题,找出合理的算法及适当的数据结构.
2.根据算法画出程序流程图。
一个程序可以分成若干个部分,通过流程图可以让人们清晰明白整个系统的工作过程,这样利于设计人员发现设计上的错误,也便于找出解决问题的途径。
3.根据流程图编写源程序。
在编写源程序时要注意如果加了注释部分一定要加分号“;”,在编写源程序时可以先编写一个测试程序,检测硬件电路是否有接错的地方。
4.上级调试程序,直至实现预定的功能。
通过上机调试可以尽可能的发现错误,并给予改变,在调试时我们先调试测试程序,测试程序证明硬件电路正常后再测试系统的源程序。
1.2编程的方法
可以采用模块化的设计方法,每一个模块都具有独立的功能,能产生一个明确的结果。
1.3.流程图
图九流程图
本次设计采用的为单片机语言,系统的工作过程按照上图所示,具体的工作过程如下:
将单片机复位,实现系统的初始化,将定时/计数器1清零。
利用软件使模式控制寄存器TMOD=52H,即TMOD=01010010H,从前文的叙述中我们可以看出GATE=0,可以得知此时计数脉冲仅由程序设置,TR0=1接通,TR0=0停止;定时器/计数器1的C/
=1,表示其工作于计数器模式,定时器/计数器0的C/
=0,表示其工作于定时器模式;定时器/计数器1的M1和M0为01,查表可知其工作于方式1;定时器/计数器0的M1和M0为1;查表可知其工作于方式2,这种可重置处值的方法可以有效的提高精度。
利用求初值的方法计算出定时器/计数器0的定时初值:
初值=256-250us×fosc/12=06H
由于计数器的容量为8位,最大计数范围为256,在12MHZ的晶振作用下,计数1代表的时间就是1us,最大的时间仅为256us,所以本设计中我们采用软件计数器的概念,先用定时/计数器做一个1s的定时器,定时时间到并不停止计数,而是将软件计数变量中的值加1,直到计满1S才停止,在此过程中我们通过查询定时/计数器0的溢出标志位TF0来查询1s的时间到否。
这种方式可以避免CPU中断响应处理所带来的测量误差,当查询到时间到我们将测量得到的结果送至系统内部处理,然后显示;时间未到则继续查询TF0直至时间到1s,即循环100次满。
在显示时我们也要查询TF0位,如果发现为溢出位0,那就可以直接显示测量结果,如果为1则说明定时时间未到,清除该标志位继续计数直至达到1s.
在数码管的选通时,通过程序设置P2.0-P2.4端口的电平来选择显示的数码管。
例如我们需要P2.0亮,则用程序设置P2.0=OFEH,即P2.0-P2.7为11111110H,P2.0为低电平,其他为高电平,则P2.0控制的三极管导通,最高位显示,而其他高电平的端口由于三极管处于截止状态,无法实现片选,所以无法显示。
其他数码管的显示原理与P2.0相同,P2.0-P2.4的显示值分别为OFEH、0FDH、0FBH、0F7H、0EFH。
本设计中选用的数码管为共阳极的,所对应的0-9的的显示如下表:
共阳LED数码管字型(段码表)
显示数字
P1.7
“dp”
P1.6
“g”
P1.5
“f”
P1.4
“e”
P1.3
“d”
P1.2
“c”
P1.1
“b”
P1.0
“a”
二进制代码
十六进制代码
0
1
1
0
0
0
0
0
0
C0H
1
1
1
1
1
1
0
0
1
F9H
2
1
0
1
0
0
1
0
0
A4H
3
1
0
1
1
0
0
0
0
B0H
4
1
0
0
1
1
0
0
1
99H
5
1
0
0
1
0
1
1
0
92H
6
1
0.
0
0
0
0
1
0
82H
7
1
1
1
1
1
0
0
0
F8H
8
1
0
0
0
0
0
0
0
80H
9
1
0
0
1
0
0
0
0
90H
表五
本设计的利用软件的方法使数码管循环显示测频结果,达到了随着计数信号的变化数码的显示也随之变化,突破了开始时计一次数复位一次的弊端,是本次设计的成功之一。
第三章电路的插接及后期调试。
在电路的插接过程中,由于使用了双个的数码管在接线时就要注意他们的引脚分布,要能够区分数码管的各个引脚功能;要注意各个原件与原件之间的引脚连接,特别是74LS373和数码管的连接以及数码管与数码管之间的连接,我们在接线时可以先将一个数码管与74LS373相连,再接其他数码管时就可以“a对a”“b对b”的连接了,三极管接线时也要注意引脚的区别.调试时可以先将仿真器关掉,将电源接入,用一根细导线一端接正5V电源,另一端逐个碰触接数码管的电阻,可以发现数码管的“a-f”分别点亮,然后用调试测试程序测试数码管能否正常显示“12345”,用以检测硬件电路的正确与否,这种方法的意义在于有效的判断了数码管是否能正常显示,最后再进行整机的整体调试,完成对频率的测量。
心得体会
在设计的过程中,我们一方面澄清了先前在单片机的一些错误理解,明白在设计过程中每一部步都是非常关键的,无论是前期的硬件准备还是后期的调试都是非常重要的,也明白了单片机其实自身并不具备很大的功能,但通过软件的设置,它可以完成很多工作,像频率计,数字钟,万年历等等;另一方面也真正的体会到了书本知识转化为实践时的困难,往往很不起眼的一件事情,就是设计的关键,必须得搞清楚。
为了查找相关的技术文献资料,我们研究课本,去上网,去学校图书馆,虽然辛苦一点,但是令人欣慰的是在这个过程中我们不仅将书本知识真正应用到实践中,掌握了设计的一般方法,而且学会了如何梳理检索知识,对我们以后的工作学习都有巨大的帮助。
。
一个月的时间很短,我们的能力也有限,很可能我们的设计存在这样或那样的不足,希望各位多多批评斧正。
我在这次设计中学到了很多东西,我认为最大的收获就是学会了和别人分工协作去完成一件事,明白了团队的力量是无可估量。
从这次的设计中就可以充分体现出来。
【参考文献】:
1.《单片微型计算机原理》苏州大学出版社邹丽新,翁桂荣主编
2.《单片微型计算机接口技术》苏州大学出版社邹丽新,翁桂荣主编
3.《基于单片机的测试技术原理与应用》机械工业出版社陈步月
4.PROTEL工具软件
致谢
一个月的时间很快过去了,本篇论文也已初步完成。
在这里首先要感谢院、系领导给予的大力支持,为本次设计提供了良好的设计环境和必要的设计装备,特别要感谢指导老师—史保华老师给予的悉心指导和不厌其烦的热情帮助,在史老师的悉心指导下让我们发现了许多存在于设计中的问题,最后得以成功的完成设计。
史老师以其渊博的知识、严谨的治学态度和高度的责任心,给我的学习、工作、生活以很大的影响,并将激励我奋发向上。
在此谨向老师表示最衷心的感谢、并致以崇高的敬意!
感谢本组同学积极的配合和其他同学的热情帮助。
另外,衷心感谢本文所引文献的作者和编者们!
附录一:
ORG0000H
SJMPSTART
START:
MOVTMOD,#52H
CLRET0
CLRET1
RR2:
MOVTL1,#00H
MOVTH1,#00H
MOVTL0,#06H
MOVTH0,#06H
MOV50H,#100
CLRTF0
SETBTR0
SETBTR1
AA:
JNBTF0,AA1
AA2:
DJNZ50H,AA3
CLRTR1
CLRTR0
SJMPWW
AJMPAA1
AA3:
CLRTF0
AA1:
SJMPAA
WW:
MOVR7,#5
MOVR0,TL1
MOVR1,TH1
LOOP1:
CLRC
MOVA,R0
RLCA
MOVR0,A
MOVA,R1
RLCA
MOVR1,A
DJNZR7,LOOP1
MOVR7,#3
MOVR5,TL1
MOVR6,TH1
LOOP2:
CLRC
MOVA,R5
RLCA
MOVR5,A
MOVA,R6
RLCA
MOVR6,A
DJNZR7,LOOP2
MOVA,R0
ADDA,R5
MOVTL1,A
MOVA,R1
ADDCA,R6
MOVTH1,A
MOVR5,#16
CLRA
MOVR2,A
MOVR3,A
MOVR4,A
LOOP:
CLRC
MOVA,TL1
RLCA
MOVTL1,A
MOVA,TH1
RLCA
MOVTH1,A
MOVA,R4
ADDCA,R4
DAA
MOVR4,A
MOVA,R3
ADDCA,R3
DAA
MOVR3,A
MOVA,R2
ADDCA,R2
DAA
MOVR2,A
DJNZR5,LOOP
QQ:
MOVDPTR,#TAB
MOVA,R2
ANLA,#0FH
MOVCA,@A+DPTR
MOVP2,#0FEH
MOVP1,A
ACALLDELAY
MOVA,R3
ANLA,#0F0H
SWAPA
MOVCA,@A+DPTR
MOVP2,#0FDH
MOVP1,A
ACALLDELAY
MOVA,R3
ANLA,#0FH
MOVCA,@A+DPTR
MOVP2,#0FBH
MOVP1,A
ACALLDELAY
MOVA,R4
ANLA,#0F0H
SWAPA
MOVCA,@A+DPTR
MOVP2,#0F7H
MO