文档库 最新最全的文档下载
当前位置:文档库 › 基于单片机的六位数显频率计数器电路设计

基于单片机的六位数显频率计数器电路设计

本科生毕业论文(设计)系(院)物理与电子信息科学系专业电子信息工程论文题目六位数显频率计数器

学生姓名

指导教师)

班级2007级2班

学号

完成日期:2010 年11月

摘要

频率计是一种测量信号频率的仪器,在教学、科研、高精度仪器测量、工业控制等领域都有较广泛的应用。本设计采用单片机AT89S51作为系统控制单元,其结构主要包括单片机控制电路和数码管显示电路,软件编程主要是采用C语言。具有性能优良,精度高,可靠性好、设计产品成本低,性价比高等特点。

[关键词]单片机频率计频率测量

Significan6 Digitl Frequency Counter

[Abstract] The frequency meter is a kind of measuring signal frequency instrument, in teaching, scientific research, precision instrument measurement, industrial control domain has the widespread application. This design USES the A T89S51 single-chip microcomputer as the system control unit and its structure is mainly include single-chip microcomputer control circuit and digital tube display circuit, software programming is mainly using C language. Has good performance, high precision, good reliability and design products with low cost, high performance-cost ratio.

[Keywords] A T89S52 SCM frequency

前言

在现代社会中,随着电子工业的发展,能够精确测量各种设备仪器中电路的频率、电压、电流等参数已越来越重要。频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量就显得更为重要。传统的频率计通采用组合电路和时序电路等大量的硬件电路构成,产品不但体积较大,运行速度慢,而且测量低频信号时不宜直接使用。MCS—51系列单片机具有体积小,功能强,性价比比较高等特点,因此被广泛应用于工业控制和智能化仪器,仪表等领域。此设计是基于ATMEL 公司的AT89S51 单片机为核心,通过其T0 与T1的定时与计数功能,来测量输入信号的频率,并通过六位动态数码管显示出来,并且尽可能使用最少的元器件,在满足性能要求的前提下,节省成本,以期达到最大的性价比,性能优良,精度高,可靠性好等特点。

1方案的选择与论证

1.1 数字频率计的基本原理

频率计是一种测量信号频率的仪器,在教学、科研、高精度仪器测量、工业控制等领域都有较广泛的应用。随着单片机技术的不断发展,单片机能实现更加灵活的逻辑控制功能,具有很强的数据处理能力,可以用单片机通过软件设计直接用十进制数字显示被测信号频率,能克服传统频率计结构复杂、稳定性差、精度不高的弊端,而且频率计性能也将大幅提高。

频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。通常情况下计算每秒内待测信号的脉冲个数,此时我们称闸门时间为1秒。闸门时间也可以大于或小于一秒。闸门时间越长,得到的频率值就越准确,但闸门时间越长则没测一次频率的间隔就越长。闸门时间越短,测的频率值刷新就越快,但测得的频率精度就受影响。数字频率计是用数字显示被测信号频率的仪器,被测信号可以是正弦波,方波或其它周期性变化的信号。如配以适当的传感器,可以对多种物理量进行测试,比如机械振动的频率、转速、声音的频率以及产品的计件等等。因此,数字频率计是一种应用很广泛的仪器。

1.2 方案一

其工作原理如图l所示。该方法是使用单片机自带的计数器对输入脉冲进行计数,其好处是设计出的频率计系统结构和程序编写简单,成本低廉,不需要外部计数器,直接利用所给的单片机最小系统就可以实现。这种方法的缺陷是受限于单片机计数的晶振频率。本次设计使用的AT89S51单片机,将其内部定时/计数器Tl的功能设为定时。频率信号由T0端引入。由于检测一个由“1”到“0”的跳变需要两个机器周期。前一个机器周期测出“1”,后一个周期测出“0”。故输入时钟信号的最高频率不得超过单片机晶振频率的二十四分之一。而且由于定时不能达到ls,所以要多次引起片内定时器的溢出中断,由此会引起测频的误差。

图1 方案一原理框图

1.3 方案二

其工作原理如图2所示。该方法是单片机使用外部计数器对脉冲信号进行

计数,计数值再由单片机读取。此方法的好处是输入的时钟信号频率可以不受单片机晶振频率的限制,可以对相对较高频率进行测量,但缺点是成本比第一种方法高,硬件系统结构比较复杂。为了节省硬件成本,可以采用动态扫描的方法进行显示。

图2 方案二原理框图

1.4 方案三

其工作原理如图3所示。系统测频、测周期部分采用中小规模数字集成电路,用机械式功能转换开关换挡,完成测频率,测周期,测脉冲的功能。该方案的特P3.2

A T89S51

P1

P3.3

P3.4 闸门 十 进 制 计 数 器 数据缓冲器

数 码 管 显 示 输入信号 单

统 输入信号 数码管显示

电源

电源

点是中小规模数字集成电路应用技术熟悉,概念清楚,能可靠地完成频率计的基本功能,但由于系统功能要求较高,所以电路过于复杂 。而多量程转换开关使用不便。其测频原理图如图1。

图3方案三测频原理框图

方案比较:从以上三个方案中可知,内部计数器法测量频率受晶振频率的限制而且多次中断会引发误差,但硬件结构简单。外部计数器法测量频率不受晶振频率的限制,但硬件结构复杂。方案三是采用中小规模数字集成电路实现频率的测量,其电路结构复杂,且稳定性、可靠性不高。因此通过对这3种方法优缺点的比较,本设计选取方案一,因为其硬件结构简单、稳定性、可靠性高,易于实现,而且从软件编程方面可以尽量减少误差,所以采用单片机内部计数器法测量频率。 2 硬件的设计与实现

2.1 基本设计原理

本设计的基于 ATMEL 公司 AT89S51 单片机的频率计数器, 是利用该 51 单片机内部的定时/计数器来完成待测信号频率的测量。AT89S51 单片机内部具有 2 个 16 位的定时/计数器 T0 与 T1,其工作方法可以通过编程来实现所需的定时/计数与产生计数溢出中断要求的功能。定时/计数器 T0 与 T1 的核心都是 16 位的加 1 计数器, TH0 与 TL0构成在构成定时/计数器 T0 加 1 计数器的高 8 位和低 8 位; TH1 与 TL1构成在构成定时/计数器 T1 加 1 计数器的高 8 位和低 8 位。加 1 计数器的初值可以通过程序设定,这样就可以获得不同的计数值或定时时间。当加 1 计数器用作定时器时,每个机器周期加 1输入信号 晶振信号 放大

整形

显示器

译码器 计数器 主门 分频

整形 逻辑

电路

门控双隐

(使用 12MHz 时钟时,每 1us 加 1) ,这样以机器周期为基准可以用来测量时间间隔。当加 1 计数器用作计数器时,在相应的外部引脚发生从 1 到 0 的跳变时计数器加 1,这样在计数闸门的控制下可以用来测量待测信号的频率。外部输入每个机器周期被采样一次,这样检测一次从 1 到 0 的跳变至少需要 2 个机器周期(24个振荡周期),所以最大计数速率为时钟频率的 1/24。AT89S51 单片机的时钟频率可以在0Hz —33MHz 范围内自动调节,当使用 12MHz 时钟时,最大计数速率为 500KHz 。定时/计数器的工作由相应的运行控制位 TR 控制,当 TR 置 1 时,定时/计数器开始计数;当 TR 置 0 时,停止计数。在本设计方案中,我通过程序设定 T0 工作在计数状态下,T1 工作在计时状态下。T0 计数器对输入的信号经行计数,其最大计数值为 fOSC/24,当 fOSC=12MHz 时,T0 的最大计数频率为250kHz 。由于信号的频率就是每秒钟信号脉冲的个数,于是我让 T1 工作在定时状态下,定时时间为 1 秒。每定时 1 秒钟到,就停止 T0 的计数,然后从 T0 的计数单元中读取计数的数值,即完成了信号频率的测量。最后通过六位数码管显示出频率值。由于要尽可能的使用最少的元件,在满足设计要求的前提下,我尽可能的减少了元器件的使用。将被测信号不加任何处理,直接输入单片机的 T0 口。而将被测信号经行放大整形、倍频锁相等处理就不再进行了。这样做会使该频率计在测量信号频率时产生精度误差,但能够满足设计要求。

2.2 系统硬件模块关系

系统总体分为:中央控制芯片,时钟电路,上电复位电路,显示电路等部分。系统总体方框如图4所示。

A T89S51

单片机

输入信号

数码管显示电路

上电复位电路

时钟电路 电源电路

图4 系统总体方框图

2.2.1 AT89S51 单片机内部结构与原理

AT89S51 是一个低功耗,高性能CMOS 8 位单片机,片内含4k Bytes ISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用A TMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51 指令系统及80S51 引脚结构,芯片内集成了通用8位中央处理器和ISP Flash 存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。

AT89S51 具有如下特点:40 个引脚,4k Bytes Flash 片内程序存储器,128 bytes的随机存取数据存储器(RAM),32 个外部双向输入/输出(I/O)口,5 个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。此外,AT89S51 设计和配置了振荡频率可为0Hz 并可通过软件设置省电模式。空闲模式下,CPU 暂停工作,而RAM 定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM 的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP 和PLCC 等三种封装形式,以适应不同产品的需求。AT89S51 单片机内部结构如图5所示:

图5 AT89S51 单片机内部结构管脚说明:(如图6所示)

图6 AT89S51引脚分布图

P0:P0 口为一个8 位漏级开路双向I/O 口,每脚可吸收8TTL 门电流。当P1 口的管脚第一次写1 时,被定义为高阻输入。P0 能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH 编程时,P0 口作为原码输入口,当FIASH 进行校验时,P0 输出原码,此时P0 外部必须被拉高。

P1:P1 口是一个内部提供上拉电阻的8 位双向I/O 口,P1 口缓冲器能接收输出4TTL 门电流。P1 口管脚写入 1 后,被内部上拉为高,可用作输入,P1 口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH 编程和校验时,P1 口作为第八位地址接收。

P2:P2 口为一个内部上拉电阻的8 位双向I/O 口,P2 口缓冲器可接收,输出4 个TTL 门电流,当P2 口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2 口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2 口当用于外部程序存储器或16 位地址外部数据存储器进行存取时,P2 口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2 口输出其特殊功能寄存器的内容。P2 口在FLASH 编程和校验时接收高八位地址信号和控制信号。

P3:P3 口管脚是8 个带内部上拉电阻的双向I/O 口,可接收输出4 个TTL 门电流。当P3 口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0 外部输入)P3.5T1(记时器1 外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3 口同时为闪烁编程和编程校验接收一些控制信号。I/O 口作为输入口时有两种工作方式即所谓的读端口与读引脚读端口时实际上并不从外部读入数据而是把端口锁存器的内容读入到内部总线经过某种运算或变换后再写回到端口锁存器只有读端口时才真正地把外部的数据读入到内部总线上面图中的两个三角形表示的就是输入缓冲器CPU将根据不同的指令分别发出读端口或读引脚信号以完成不同的操作这是由硬件自动完成的不需要我们操心1 然后再实行读引脚操作否则就可能读入出错为什么看上面的图如果不对端口置1 端口锁存器原来的状态有可能为0Q端为0Q^为1加到场效应管栅极的信号为1该场效应管就导通对地呈现低阻抗,此时即使引脚上输入的信号为1 也会因端口的低阻抗而使信号变低使得外加的1 信号读入后不一定是1 若先执行置 1 操作则可以使场效应管截止引脚信号直接加到三态缓冲器中实现正确的读入由于在输入操作时还必须附加一个准备动作所以这类I/O口被称为准双向口89C51的P0/P1/P2/P3口作为输入时都是准双向口接下来让我们再看另一个问题从图中可以看出这四个端口还有一个差别除了P1 口外P0P2P3 口都还有其他的功能

RST:复位输入。当振荡器复位器件时,要保持RST 脚两个机器周期的高电平时间。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH 编程期间,此引脚用于输入编程脉冲。在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE 脉冲。如想禁止ALE 的输出可在SFR8EH 地址上置0。此时,ALE 只有在执行MOVX,MOVC 指令是ALE 才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE 禁止,置位无效。

/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN 信号将不出现。

/EA/VPP:当/EA 保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1 时,/EA 将内部锁定为RESET;当/EA 端保持高电平时,此间内部程序存储器。在FLASH 编程期间,此引脚也用于施加12V 编程电源(VPP)。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:来自反向振荡器的输出。

VCC:供电电压。

GND:接地。

2.2.2 电源电路

电源是单片机工作的动力源泉,上图电路的设计是为了给系统提供稳定的+5V电压,提高系统工作性能。其对应的接线方法为:40脚(VCC)电源引脚,工作时接+5V电源,20脚(GND)为接地线。直流电源电路如图7所示。

图7 直流电源电路

2.2.3 上电复位电路

复位是单片机的初始化操作。单片机系统在上电启动运行时,都需要先复位。其作用是使CPU 和系统中其他部件都处于一个确定的初始状态,并从这个状态开始工作。而复位是一个很重要的操作方式,但单片机本身是不能自动经行复位的,必须配合相应的外部复位电路才能实现。本设计的复位电路采用上电复位加按键手动复位

其电路如下图所示

图8 上电复位电路图

当复位按键按下以后,复位端直接与电源VCC 接通,10nF 电容C3 迅速放电,使RST 引脚为高电平;当复位键弹起后,电源VCC 通过10k? 电阻R1 对10nF 电容C3 重新充电,RST 引脚出现复位正脉冲。其持续时间取决于RC 电路的时间常数。

2.2.4 时钟电路

单片机工作是在统一的时钟脉冲控制下一拍一拍地进行的,这个脉冲是单片机控制器中的时序电路发出的。单片机的时序就是CPU 在执行指令时所需控制信号的时间顺序。为了保证各部件的同步工作,单内部电路应在唯一的时钟信号下严格按时序进行工作。MCS-51 系列单片机内部有一个高增益反相放大器,用于构成振荡器,但要形成时钟脉冲,外部还需附加电路。MCS-51 的时钟产生方法有“内部时钟方式”与“外部时钟方式”两种。在本设计中采用了内部时钟方式。其电路图如下图所示:

图9 时钟电路

如图所示,利用芯片内部的振荡器,然后在引脚XTALl 和XTAL2 两端跨接晶体振荡器Y1(简称晶振),就构成了稳定的自激振荡器,发出的脉冲直接送入内部时钟电路。外接晶振Y1时,C1 和C2 的值通常选择为30pF 左右;Cl 与C2 对频率有微调作用,晶振或陶瓷谐振器的频率范围可在1.2~12MHz 之间选择。为了减少寄生电容,更好地保证振荡器稳定可靠的工作,振荡器和电路应尽可能安装得与单片机引脚XTALl 和XTAL2 靠近。

2.2.5 数码管显示电路

显示器是微机重要的输出设备。显示器有显示监控结果、提供用户操作界面等功能。在本次设计中采用了LED 显示器,即数码管。数码管的每一个数码段是一只发光二极管。当发光二极管导通时,相应的一个点或者一个笔画发光,控制发光二极管发光组合,可以显示出所需字符。我采用了共阴极结构。在定义其显示字形的码段时,通过I/O 口送出七段码

其段码表如下:

表1 共阴数码管段选码

显示字形0 1 2 3 4 5 6 7 8 9

共阴段选码3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH 仿真接口图如下:

图10 数码管接线图

本设计采用了数码管的动态显示方式,即轮流点亮各数码管,对数码管进行扫描。在任何时刻只给一个数码管通电,通电一定时间后再给下一个数码管通电。只要刷新频率足够高,动态显示方式同样可以实现稳定显示。这样就可以节约I/O 口。

2.2.6 输入信号的要求

定时/计数器的作用是用来精确地确定某一段时间间隔(作为定时器用)或累计外部输入的脉冲个数(作为计数器用)。当用作定时器时,在其输入端输入周期固定的脉冲,根据定时/计数器中累计的脉冲个数,即可计算出所定时间的长度。当MCS-5l 内部的定时/计数器被选定为定时器工作模式时,计数输入信号是内部时钟脉冲,每个机器周期产生一个脉冲位,计数器增l,因此定时/计数器的输入脉冲的周期与机器周期一样,为时钟振荡频率的l/12。当采用12MHz频率的晶振时,计数速率为1MHz,输入脉冲的周期间隔为1μs。由于定时的精度决定于输入脉冲的周期,因此当需要高分辨率的定时时,应尽量选用频率较高的晶振。当定时/计数器用作计数器时,计数脉冲来自外部输入引脚T0 或T1。当输入信号产生由1 至0 的跳变(即负跳变)时,计数器的值增l。由于确认一次负跳变需要用2 个机器周期,即24 个振荡周期,因此外部输入的计数脉冲的最高频率为振荡器频率的1/24,例如,选用6MHz 频率的晶振,允许输入的脉冲频率为250kHz,如果选用12MHz 频率的晶振,则可输入500kHz的外部脉冲。对于外部输入信号的占空比并没有什么限制,但为了确保某一给定的电平在变化之前能被采样一次,则这一电平至少要保持一个机器周期。

2.3 最终硬件设计图

根据总体设计方案,AT89S51 单片机带有“时钟电路”与“上电复位电路”,各模块的作用与单片机各引脚功能已详细叙述。其中,上拉电阻与VCC 为数码管提供电源。频率发生器CLOCK 为被测的信号源,输入T0。为了对比该频率计的测量精度,我在信号源初添加了一个软件自带的频率计“FREQUENCY COUNTER”,在测量信号频率时,通过对比图中两组数码管显示的频率,即可检验该频率计数器的测量精度,在1kHz以下时显示的单位为Hz,在1kHz以上时显示单位为kH。

图11 系统硬件设计图

3 软件的设计与实现

系统的软件设计采用C语言,对单片机进行编程实现各项功能。

3.1主程序流程图

开始

初始化

T1定时

T0计数

判断是否

到一秒

数码管显示

结束

图12 主程序流程图

3.2 数码管扫描部分

P2=0xff;//先关闭所有数码管

P0=dispcode[dispbuf[dispcount]];//先确定相应数码管的段码,送入段码P2=dispbit[dispcount];//送入位码

if(dispcount==5&&y>=1000)//当频率值大于1kHz时显示小数点

{

P0=dispcod1[dispbuf[5]];// 在千位送入带小数点的段选码

P2=dispbit[dispcount];//送入位码

}

dispcount++;//下一次应该扫描下一位数码管所以要加一

if(dispcount==8) //因为共有8个数码管

{

dispcount=0;//扫描完第7个,回头扫描第0个

}

4 软件和硬件调试

C 语言是一种通用的程序设计语言,其代码率高,数据类型及运算符丰富,位操作能力强,适用于各种应用的程序设计。使用 C 语言进行单片机应用系统开发,具有编程灵活、调试方便、目标代码编译效率高的特点。C 语言也是目前使用最广的单片机应用系统编程语言。由 C 语言编程的单片机应用程序,称为单片机 C 语言程序。MCS-51 系列单片机开发系统的编译软件可以对 51 单片机 C 语言源程序进行编译,称为 C51 编译器。在 C51 编译软件中可进行 51 单片机

C 语言程序的调试。

4.1 C程序编译与仿真结果

在Keil μVision 上的编译结果

图13 程序仿真结果

4.2 在 Proteus ISIS 上的仿真结果

4.2.1 选取了一个较小的频率8Hz

上图为频率计六位数码管所显示的频率

下图为软件自带的频率计所显示的频率,用作对比

图14 低频仿真

4.2.2 选取了一个中间频率 2KHz

上图为频率计六位数码管所显示的频率

下图为软件自带的频率计所显示的频率,用作对比

图15 中频仿真

4.2.3选取了一个较大的频率 490KHz

上图为频率计六位数码管所显示的频率

下图为软件自带的频率计所显示的频率,用作对比

图16 高频仿真

从以上结果看来,我设计的基于AT89S51 单片机的频率计满足了设计要求4.3 硬件调试

4.3.1 选取了一个较小的频率30Hz

上图为硬件测试结果,下图为函数信号发生器输入的频率值。

图17 低频信号测试

4.3.2 选取了一个中间频率3KHz

上图为硬件测试结果,下图为函数信号发生器输入的频率值。

图18 中频信号测试

4.3.3 选取了一个较大的频率400KHz

上图为硬件测试结果,下图为函数信号发生器输入的频率值。

相关文档