1、武汉理工大学单片机原理与应用课程设计说明书11 前言频率测量是电子学测量中最为基本的测量之一。由于频率信号抗干扰性强,易于传输,因此可以获得较高的测量精度。随着数字电子技术的发展,频率测量成为一项越来越普遍的工作,测频原理和测频方法的研究正受到越来越多的关注。1.1 频率计概述数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。它是一种用十进制数字显示被测信号频率的数字测量仪器。它的基本功能是测量正弦信号、方波信号及其他各种单位时间内变化的物理量。在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精确度高,显示直观,经常要用到频率计。传统的频率
2、计采用测频法测量频率,通常由组合电路和时序电路等大量的硬件电路组成,产品不但体积大,运行速度慢而且测量低频信号不准确。本次采用单片机技术设计一种数字显示的频率计,测量准确度高,响应速度快,体积小等优点。1.2 频率计发展与应用在我国,单片机已不是一个陌生的名词,它的出现是近代计算机技术的里程碑事件。单片机作为最为典型的嵌入式系统,它的成功应用推动了嵌入式系统的发展。单片机已成为电子系统的中最普遍的应用。单片机作为微型计算机的一个重要分支,其应用范围很广,发展也很快,它已成为在现代电子技术、计算机应用、网络、通信、自动控制与计量测试、数据采集与信号处理等技术中日益普及的一项新兴技术,应用范围十分
3、广泛。其中以 AT89S52 为内核的单片机系列目前在世界上生产量最大,派生产品最多,基本可以满足大多数用户的需要。武汉理工大学单片机原理与应用课程设计说明书22 系统总体设计2.1 测频的原理测频的原理归结成一句话,就是“在单位时间内对被测信号进行计数” 。被测信号,通过输入通道的放大器放大后,进入整形器加以整形变为矩形波,并送入主门的输入端。由晶体振荡器产生的基频,按十进制分频得出的分频脉冲,经过基选通门去触发主控电路,再通过主控电路以适当的编码逻辑便得到相应的控制指令,用以控制主门电路选通被测信号所产生的矩形波,至十进制计数电路进行直接计数和显示。若在一定的时间间隔 T 内累计周期性的重
4、复变化次数 N,则频率的表达式为式: fx=T频率计数器严格地按照 公式进行测频。由于数字测量的离散性,被测频率在计f=T数器中所记进的脉冲数可有正一个或负一个脉冲的 量化误差,在不计其他误差影响的1情况下,测量精度将为:()fAN应当指出,测量频率时所产生的误差是由 N 和 T 俩个参数所决定的,一方面是单位时间内计数脉冲个数越多时,精度越高,另一方面 T 越稳定时,精度越高。为了增加单位时间内计数脉冲的个数,一方面可在输入端将被测信号倍频,另一方面可增加 T 来满足,为了增加 T 的稳定度,只需提高晶体振荡器的稳定度和分频电路的可靠性就能达到。上述表明,在频率测量时,被测信号频率越高,测量
5、精度越高。2.2 总体思路频率计是我们经常会用到的实验仪器之一,频率的测量实际上就是在单位时间内对信号进行计数,计数值就是信号频率。本文介绍了一种基于单片机 AT89S52 制作的频率计的设计方法,所制作的频率计测量比较高的频率采用外部十分频,测量较低频率值时采用单片机直接计数,不进行外部分频。该频率计实现 10HZ2MHZ 的频率测量,而且可以实现量程自动切换功能,四位共阳极动态显示测量结果,可以测量正弦波、三角波及方波等各种波形的频率值。2.3 具体模块根据上述系统分析,频率计系统设计共包括五大模块:单片机控制模块、电源模块、放大整形模块、分频模块及显示模块。各模块作用如下:武汉理工大学单
6、片机原理与应用课程设计说明书31、单片机控制模块:以 AT89C51 单片机为控制核心,来完成它待测信号的计数,译码,和显示以及对分频比的控制。利用其内部的定时计数器完成待测信号周期频率的测量。2、电源模块:为整个系统提供合适又稳定的电源,主要为单片机、信号调理电路以及分频电路提供电源,电压要求稳定、噪声小及性价高的电源。3、放大整形模块:放大电路是对待测信号的放大,降低对待测信号幅度的要求。整形电路是对一些不是方波的待测信号转化成方波信号,便于测量。4、分频模块:考虑单片机外部计数,使用 12 MHz 时钟时,最大计数速率为 500 kHz,因此需要外部分频。分频电路用于扩展单片机频率测量范
7、围,并实现单片机频率测量使用统一信号,可使单片机测频更易于实现,而且也降低了系统的测频误差。5、显示模块:显示电路采用四位共阳极数码管动态显示,为了加大数码管的亮度,使用 4 个 PNP 三极管进行驱动,便于观测。综合以上频率计系统设计有单片机控制模块、电源模块、放大整形模块、分频模块及显示模块等组成,频率计的总体设计框图如图 2 所示。 微控制器A T 8 9 S 5 2信号放大整形分频电路驱动电路数码管显示5 V 电源图 2.1 频率计总体设计框图武汉理工大学单片机原理与应用课程设计说明书43 系统硬件设计3.1 AT89C51主控制器模块3.1.1 AT89C51的介绍AT89C51 是
8、一种带 4K 字节 FLASH 存储器的低电压、高性能 CMOS 8 位微处理器,俗称单片机。由于将多功能 8 位 CPU 和闪烁存储器组合在单个芯片中,ATMEL 的 AT89C51 是一种高效微控制器。AT89C51 单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。AT89C51 引脚如下图所示。图 3.1 AT89C51 引脚图3.1.2 复位电路复位电路是维持单片机最小系统运行的基本模块。复位电路如下图所示。武汉理工大学单片机原理与应用课程设计说明书5图 3.2 复位电路高频率的时钟有利于程序更快的运行,也有可以实现更高的信号采样率,从而实现更多的功能。但是告诉对系统要求较高
9、,而且功耗大,运行环境苛刻。考虑到单片机本身用在控制,并非高速信号采样处理,所以选取合适的频率即可。合适频率的晶振对于选频信号强度准确度都有好处,本次设计单片机实物具有 11.0592M 的晶振频率。AT89C51 单片机最小系统如下图所示。图 3.3 单片机最小系统原理图3.2 分频设计模块分频电路用于扩展单片机频率测量范围,并实现单片机频率和周期测量使用统一信号,可使单片机测频更易于实现,而且也降低了系统的测频误差。本频率计的设计以 AT89C51 单片机为核心,利用他内部的定时计数器完成待测信武汉理工大学单片机原理与应用课程设计说明书6号周期频率的测量。单片机 AT89C51 内部具有
10、2 个 16 位定时计数器,定时计数器的工作可以由编程来实现定时、计数和产生计数溢出时中断要求的功能。在定时器工作方式下,在被测时间间隔内,每来一个机器周期,计数器自动加 1(使用 12 MHz 时钟时,每 1s 加 1),这样以机器周期为基准可以用来测量时间间隔。在计数器工作方式下,加至外部引脚的待测信号发生从 1 到 0 的跳变时计数器加 1,这样在计数闸门的控制下可以用来测量待测信号的频率。外部输入在每个机器周期被采样一次,这样检测一次从 1到 0 的跳变至少需要 2 个机器周期(24 个振荡周期),所以最大计数速率为时钟频率的124(使用 12 MHz 时钟时,最大计数速率为 500
11、kHz),因此采用 74LS161 进行外部十分频使测频范围达到 2MHz。为了测量提高精度,当被测信号频率值较低时,直接使用单片机计数器计数测得频率值;当被测信号频率值较高时采用外部十分频后再计数测得频率值。这两种情况使用 74LS151 进行通道选择,由单片机先简单测得被测信号是高频信号还是低频信号,然后根据信号频率值的高低进行通道的相应导通,继而测得相应频率值。3.3 显示模块显示模块由频率值显示电路和量程转换指示电路组成。频率值显示电路采用四位共阳极数码管动态显示频率计被测数值,使用三极管 8550 进行驱动,使数码管亮度变亮,便于观察测量。量程转换指示电路由红、黄、绿三个 LED 分
12、别指示 Hz、KHz 及 MHz 档,使读数简单可观。3.3.1 数码管介绍常见的数码管由七个条状和一个点状发光二极管管芯制成,叫七段数码管,根据其结构的不同,可分为共阳极数码管和共阴极数码管两种。根据管脚资料,可以判断使用的是何种接口类型。LED 数码管中各段发光二极管的伏安特性和普通二极管类似,只是正向压降较大,正向电阻也较大。在一定范围内,其正向电流与发光亮度成正比。由于常规的数码管起辉电流只有 12 mA,最大极限电流也只有 1030 mA,所以它的输入端在 5 V 电源或高于TTL 高电平(3.5 V)的电路信号相接时,一定要串加限流电阻,以免损坏器件。3.3.2 频率值显示电路数码
13、管电路设计不加三极管驱动时,数码管显示数值看不清,不便于频率值的测量与调试。因此加入三极管 8550 进行驱动数码管。使用 4 位数码管进行频率值显示,如果武汉理工大学单片机原理与应用课程设计说明书7选择共阴极数码管显示,则需要 8 个三极管进行驱动,而采用共阳极数码管则需要 4 个三极管驱动,为了节约成本,因此选用共阳极数码管进行动态显示,具体数码管设计电路如图所示。 ABCDEFGP123U?-LQ50KRV6图 3.4 数码管显示电路3.3.3 档位转换指示电路根据设计要求,采用红、黄、绿三个 LED 分别指示 Hz、KHz 及 MHz 档,根据被测信号的频率值大小,可以自动切换量程单位
14、,无需手动切换,便于测量和读数,简单方便。具体设计的档位转换 LED 指示电路如图所示。 9NYOW图 3.5 LED 档位指示电路武汉理工大学单片机原理与应用课程设计说明书84 系统软件设计系统软件设计主要采用模块化设计,叙述了各个模块的程序流程图,并介绍了软件Keil 和 Proteus 的使用方法和调试仿真。4.1 软件模块设计系统软件设计采用模块化设计方法。整个系统由初始化模块,信号频率测量模块,自动量程转换和显示模块等模块组成。系统软件流程如图所示。频率计开始工作或者完成一次频率测量,系统软件都进行测量初始化。测量初始化模块设置堆栈指针(SP)、工作寄存器、中断控制和定时计数器的工作
15、方式。定时计数器的工作首先被设置为计数器方式,即用来测量信号频率。开始系统初始化频率测量频率是否超过 1 K H z硬件十分频计数器计数测频率值测量数据显示NY图 4.1 系统软件流程总图首先定时计数器的计数寄存器清 0,运行控制位 TR 置 1,启动对待测信号的计数。计数闸门由软件延时程序实现,从计数闸门的最小值(即测量频率的高量程)开始测量,计数闸门结束时 TR 清 0,停止计数。计数寄存器中的数值经过数制转换程序从十六进制数转换为十进制数。判断该数的最高位,若该位不为 0,满足测量数据有效位数的要求,测量值和量程信息一起送到显示模块;若该位为 0,将计数闸门的宽度扩大 10 倍,重新对待
16、测信号的计数,直到满足测量数据有效位数的要求。定时计数器的工作被设置为武汉理工大学单片机原理与应用课程设计说明书9定时器方式,定时计数器的计数寄存器清 0,在判断待测信号的上跳沿到来后,运行控制位 TR 置为 1,以单片机工作周期为单位进行计数,直至信号的下跳沿到来,运行控制位 TR 清 0,停止计数。16 位定时计数器的最高计数值为 65535,当待测信号的频率较低时,定时计数器可以对被测信号直接计数,当被测信号的频率较高时,先由硬件十分频后再有定时计数器对被测信号计数,加大测量的精度和范围。4.2 应用软件简介此设计需要在 Keil 软件平台上完成程序的调试,在 Proteus 软件平台上
17、完成仿真显示。因此介绍如何使用 Keil 和 Proteus 进行软件的仿真。4.2.1 Keil简介Keil 软件是目前最流行开发系列单片机的软件,Keil 提供了包括 C 编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。而 Proteus 与其它单片机仿真软件不同的是,它不仅能仿真单片机 CPU 的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。
18、对于这样的仿真实验,从某种意义上讲,是弥补了实验和工程应用间脱节的矛盾和现象16。4.2.2 protues简介protues是Labcenter公司出品的电路分析、实物仿真系统,而KEIL是目前世界上最好的51单片机汇编和C语言的集成开发环境。他支持汇编和C的混合编程,同时具备强大的软件仿真和硬件仿真功能 17。Protues能够很方便的和KEIL、Matlab IDE等编译模拟软件结合。Proteus提供了大量的元件库有RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件,它可以仿真单片机和周边设备,可以仿真51系列、AVR,PIC等常用的MCU,与kei
19、l和MPLAB不同的是它还提供了周边设备的仿真,只要给出电路图就可以仿真。武汉理工大学单片机原理与应用课程设计说明书105 系统仿真5.1 系统总电路图根据课程设计任务书的要求,本次课设设计的系统总电路图如下图所示。图 5.1 系统总电路图5.2 系统仿真结果系统仿真结果图如下图所示,由图中可以看出,LCD 显示的值为 900Hz,LED 显示的值为 886Hz,在误差允许的范围内,二者近似相等,符合课设任务书要求。武汉理工大学单片机原理与应用课程设计说明书11图 5.2 系统仿真结果图6 系统硬件调试6.1 频率计的测试如图 6.1 为频率计的测试实物拍摄图。其中函数信号发生器输出频率为 1
20、000Hz、幅值为 5V 的方波信号时,数字频率计测得的频率为 996Hz,在误差允许的范围内,二者相等,符合课设任务书要求。武汉理工大学单片机原理与应用课程设计说明书12图 6.1 频率计测试的实物拍摄图6.2 低频方波信号发生器的测试图 6.2 低频信号发生器测试的实物拍摄图如图 6.2 为低频信号发生器测试的实物拍摄图。其中低频方波信号发生器输出频率的LED 显示值为 400Hz,经过示波器检测得到幅值为 4.88V,频率为 396.2Hz,在误差允许的范围内,二者相等,符合课设任务书要求。6.3 低频方波信号发生器、数字频率计的综合测试如图 6.3 为低频方波信号发生器检测频率计的实物
21、拍摄图。其中低频方波信号发生器输出频率的 LED 显示值为 300Hz,经过数字频率计检测得到频率的 LCD 显示值为 297Hz,在误差允许的范围内,二者相等,符合课设任务书要求。武汉理工大学单片机原理与应用课程设计说明书13图 6.3 低频方波信号发生器检测频率计的实物拍摄图7 心得体会本次设计的过程和结果都给了我很多感触。初次拿到课程设计的题目时,只是对频率有一定的理解,至于怎么设计,几乎没有什么想法。在同学的指导和讲解下,对频率计的介绍有了一定的了解。后来通过不断的学习和查阅资料,终于清楚的知道了频率计的基本情况和设计的方案有了一定的理解。通过对各种性能的比较和所学知识能实现的状况,对
22、本次课程设计进行了设计,最后进行的是课设报告的撰写。通过本次设计,让我学会了从系统的高度来考虑设计的方方面面,对电路的设计和研究有了更深刻的体会;让我了解到软件的设计是建立在对硬件了解的基础上的,特别是对单片机的功能,引脚定义和内部结构要有较为详细的了解,此外对电路板中所用到的各个芯片的引脚和功能,也要进行了解;在编写程序时,进行模块化设计,以严谨的态度进行编程,避免出现低级错误,养成为程序添加注释和说明的好习惯,以便自己的修改和阅读者轻松的了解程序的各部分及整体的功能。武汉理工大学单片机原理与应用课程设计说明书14参考文献1李华单片机实用接口技术M. 航空航天大学出版社. 2006.2张鹏王
23、雪梅. 单片机原理与应用实例教程M. 海军出版社. 2007.3赫建国等. 单片机在电子电路设计中的应用M. 清华大学出版社. 2005.4康华光电子技术基础(模拟部分)M. 高等教育出版社. 19985吴清平. 单片机原理与应用实例教程M. 海军出版社. 2008.武汉理工大学单片机原理与应用课程设计说明书15#include#define uint unsigned int#define uchar unsigned charsigned long count=0;int i=0, x=0;sbit RS=P10;sbit RW=P11;sbit E=P25;sbit dula=P26;s
24、bit wela=P27;unsigned int shu=0x30,0x31,0x32,0x33,0x34,0X35,0x36,0x37,0x38,0x39; /数字的 ASCII 码放在数组中uchar code table=“made by Li Houmin“ ;uchar num;武汉理工大学单片机原理与应用课程设计说明书16void delay(int count) /延时int p;while(count-)for(p=0;p110;p+);void write_com(unsigned int n) /写指令RS=0;P0=n;delay(5);E=1;delay(5);E=0
25、;void write_data(unsigned char t) /写数据RS=1;P0=t;delay(5);E=1;delay(5);E=0;void time1_int(void) interrupt 3武汉理工大学单片机原理与应用课程设计说明书17TH1=TL1=0;TR1=1;x+;void time0_int(void) interrupt 1 TH0=(65535-50000)/256; /装初值,定时 50msTL0=(65535-50000)%256; i+;if(i=20) /1s 时间已到 i=0;TR1=0; /关闭计数器 1count=65536*x+256*TH1
26、+TL1;x=0;TH1=TL1=0; /重新装初值TR1=1; /重新启动计数器器 1void show() write_com(0x85);write_data(shucount/100000); delay(5); /在第一行第五列显示十万位write_com(0x86);write_data(shu(count/10000)%10);delay(5); /显示万位write_com(0x87);write_data(shu(count/1000)%10);delay(5); /显示千位武汉理工大学单片机原理与应用课程设计说明书18write_com(0x88); write_data(
27、shu(count/100)%10);delay(5); /显示百位write_com(0x89);write_data(shu(count/10)%10);delay(5); /显示十位write_com(0x8a);write_data(shucount%10);delay(5); /显示个位write_com(0x83);write_data(0x66);delay(5); /显示频率表示的字符 fwrite_com(0x84);write_data(0x3d);delay(5); /显示字符=write_com(0x8b);write_data(0x48);delay(5); /显示字
28、母 Hwrite_com(0x8c);write_data(0x7a);delay(5); /显示字母 zwrite_com(0x80+0x40); /第二行显示for(num=0;num17;num+) write_data(tablenum);delay(5);void main() TMOD=0x51; /T1 计数、T2 定时,且都工作在方式 1TH1=0x00;TL1=0x00;TH0=(65535-50000)/256; /装初值,定时 50msTL0=(65535-50000)%256; EA=1; /开总中断ET0=1;ET1=1; /中断允许TR0=1;TR1=1; /启动定时器dula=0;wela=0;RW=0;E=0;write_com(0x01); /显示清零,数据指针清零write_com(0x38); /设置 16X2 显示 5X7 点阵,8 位数据口武汉理工大学单片机原理与应用课程设计说明书19write_com(0x0c); /设置开显示,显示光标且闪烁write_com(0x06); /写一个字符后地址指针加 1while(1)show();delay(5);