1、山东职业学院毕业论文题 目:通用电子计数器系 别:电气工程系专 业:电子信息工程技术班 级 电信 0931学生姓名:郭晓娟 指导教师:寇迎辉完成日期:2012-03-152毕业设计(论文)任务书班 级 学生姓名 指导教师设计(论文)题目 智能型数字频率计主要研究内容设计制作智能型数字频率计,完成频率、时间测量,计数等功能,利用电子技术对一定时间间隔内输入的脉冲计数,并以数字形式显示计数结果。 主要技术指标或研究目标1. 测量频率2. 测量时间3. 测量周期4. 测量时间间隔5. 测量测量频率比6累加计数基本要求(1)明确设计任务。(2)根据设计要求,确定智能型数字频率计的系统方案。(3)绘制系
2、统的原理图,并进行有关参数的核算。(5)提出系统的材料清单(3)制定程序流程和编写软件。(6)进行电路的调试。(7)对系统的性能进行总结。主要参考资料及文献1 单片机应用技术 刘守义主编 西安电子科技大学出版社2 智能化仪器原理及应用曹建平主编 西安电子科技大学出版社3 智能仪器原理及应用 赵茂泰主编 电子工业出版社3摘 要本课题是采用低成本的 MCS-51 系列单片机构成具有高可靠性的技术器设计。系统利用 AT89S52 作为主控芯片设计的一个通用信号计数器,详细说明了其实现过程。本系统使用 C 语言编写,用 AT89S52 单片机来实现各模块功能,使用 PROTEUS 进行仿真。本文描述使
3、用 C 语言和 PROTEUS 仿真实现函数信号计数器的基本功能,本文重点介绍了以 AT89S52 单片机为控制器的测量方法,采用单片机智能控制,结合外围电路进行频率和周期的测量,并用十进制数字来显示被测信号的频率和周期。 关键词:单片机 AT89S52 电路原理 频率测量 周期测量4目 录1、引言 51.1、单片机概述 51.2、通用计数器的分类 51.3、研究内容 52、系统方案论证与比较 62.1、 方案一 62.2、方案二 62.3、方案三 63、硬件电路设计 63.1、单片机简介 63.2、ATS52 单片机引脚排布 73.3、74HC573 芯片 .83.4、单元电路原理介绍 93
4、.4.1、 时钟电路 93.4.2、按键复位电路 93.4.3、显示器原理 103.4.4、按键接口电路 113.5、测频率的基本原理 113.5.1、测量频率的方法 113.5.2、基本原理 124、软件设计 134.1、设计流程图 134.2、频率/周期测量流程图 144.3、软件设计总流程图 144.4、测频法与测周期法误差分析 154.5、功能仿真 16结束语 18参考文献 19附录一:程序源代码 2051、引言 随着科技的不断发展,单片机已广泛应用在工业控制、自动检测、智能仪表、家用电器等各个方面。其中,利用电子计数器测量来进行测量周期和频率的精度高、速度快、使用简单,因而得到了广泛
5、应用。本文介绍一种基于单片机控制的通用电子计数器,具有成本低,体积小、抗干扰能力强,功能强大,测量精度高,使用方便、简单等优点。1.1、单片机概述现代科技随着大规模集成电路技术的发展,中央处理器(CPU)、随机存取存储器 (RAM)、只读存储器 (ROM)、(I/O)接口、定时器/计数器和串行通信接口,以及其他一些计算机外围电路等均可集成在一块芯片上构成单片微型计算机,简称为单片机。单片机具有体积小、成本低,性能稳定、使用寿命长等特点。其最明显的优势就是可以嵌入到各种仪器、设备中,这是其他计算机无法做到的。1.2、通用计数器的分类通用器应用广泛,种类繁多,性能各异,分类也不尽一致。按照频率范围
6、分类可以分为:超低频信号计数器、低频信号计数器、高频信号计数器。按照信号计数器性能指标可以分为一般信号计数器和标准信号计数器。前者指对输出信号的频率、幅度的准确度和稳定度等计数要求不高的一类信号计数器;后者是指其输出信号的频率、幅度、调制系数等在一定范围内连续可调,并且读数准确、稳定、屏蔽良好的中、高档信号计数器。1.3、研究内容本文是做基于单片机的信号计数器的设计,将采用编程的方法来控制硬件电路来实现对模拟信号的计数。根据设计的要求,对各种波形的频率进行统计,并将所写程序装入单片机的程序存储器中。在程序运行中,当接收到来自键盘的命令,需要统计某种波形时再调用相应的中断服务子程序控制硬件电路改
7、变6统计波形,进行计数的统计和计算显示。2、系统方案论证与比较 2.1、 方案一 采用的是中小规模数字集成电路,虽然能够实现频率和周期的测量,但其功能扩展不易实现,智能化程度也不高,不符合目前通用计数器的发展要求。 2.2、方案二 设计方法,硬件电路的实现上都要比方案一和方案三简洁,并且设计思路是非常简单的,电路也不复杂,但由于它采用的是通用计数器专用模块设计,不符合我们的设计要求,所以就不予考虑。 2.3、方案三 使用到的元器件都是我们所常用到的一些元件,如:74HC573 八进制 3 态非反转透明锁存器,LED 数码管等;且使用了功能强大的 AT89S52 芯片,使本系统可以通过对软件改进
8、而扩展功能,提高测量精度。 综上所述,考虑系统的方案的可行性和可靠性等因素,本设计采用方案三以片机作为核心控制系统的具体实施方案作为最终的方案。3、硬件电路设计3.1、单片机简介AT89S52 是一种低功耗、高性能 CMOS8 位微控制器,具有 8K 在系统可编程Flash 存储器。使用 Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上 Flash 允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的 8 位 CPU 和在系统可编程7Flash,使得 AT89S52 为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52
9、 具有以下标准功能:8k 字节 Flash,256 字节 RAM,32 位 I/O 口线,看门狗定时器,2 个数据指针,三个 16 位定时器/计数器,一个 6 向量 2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持 2 种软件可选择节电模式。空闲模式下,CPU 停止工作,允许 RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。如图 3.2、AT89S52 单片机引脚排布主要性能: 与 MCS-51 单片机产品兼容 8K 字节在系统可编程 Flash
10、存储器 1000 次擦写周期 全静态操作:0Hz33Hz 三级加密程序存储器 32 个可编程 I/O 口线 三个 16 位定时器/计数器 八个中断源 全双工 UART 串行通道 低功耗空闲和掉电模式 掉电后中断可唤醒 看门狗定时器 双数据指针 掉电标识符8图 3.1 AT89S52 引脚排布3.3、74HC573 芯片 74HC573 八进制 3 态非反转透明锁存器,高性能硅门 CMOS 器件,当锁存使能端 LE 为高时,这些器件的锁存对于数据是透明的(也就是说输出同步) 。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。1 脚三态允许控制端低电平有效 ,D0D7 为数据输入端 ,Q0
11、Q7 为数据输出端 ,LE 为锁存控制端。如图 2.2 74HC573 引脚排布图图 3.2 74HC573 引脚排布93.4、单元电路原理介绍3.4.1、 时钟电路AT89S52 单片机有两个引脚(XTAL1,XTAL2)用于外接石英晶体和微调电容,从而构成时钟电路,其电路图如图 2.3 所示。图 3.3 时钟电路如图 3.5 所示电容 C1、 对振荡频率有稳定作用, C2 其容量的选择为 30pf, 振荡器选择频率为 12MHz 的石英晶体。3.4.2、按键复位电路如图 2.4 按键复位输入。电路才有上电复位方式,晶振工作时,RST 脚持续2 个机器周期高电平将使单片机复位。看门狗计时完成
12、后,RST 脚输出 96 个晶振周期的高电平。特殊寄存器 AUXR(地址 8EH)上。10图 3.4 单片机复位电路3.4.3、显示器原理 7SEG-MPX6-CA 数码管是一个八段数码管称为一位,多个数码管并列在一起可构成多位数码管,它们的段选线(即 a,b,c,d,e,f,g,dp)连在一起,而各自的公共端称为位选线。显示时,都从段选线送入字符编码,而选中哪个位选线,那个数码管便会被点亮。数码管的 8 段,对应一个字节的 8 位,a 对应最低位,dp 对应最高位。所以如果想让数码管显示数字 0,那么共阴数码管的字符编码为 00111111,即 0x3f;共阳数码管的字符编码为 110000
13、00,即 0xc0。可以看出两个编码的各位正好相反;本系统采用动态显示方式,用 P0 口来控制 LED 数码管的段控线,而用 P2 口来控制其位控线。动态显示通常都是采用动态扫描的方法进行显示,即循环点亮每一个数码管,这样虽然在任何时刻都只有一位数码管被点亮,但由于人眼存在视觉残留效应,只要每位数码管间隔时间足够短,就可以给人以同时显示的感觉。如图 2.5 为 7SEG-MPX6-CA 数码管11图 3.5 7SEG-MPX6-CA 数码管3.4.4、按键接口电路图 3.6 按键接口电路图 5.3 为键盘接口电路的原理图,图中键盘和 单片机 P0 口相连,AT89S52 的 P1 口和 MAX
14、038 的波形选择电路相连,AT89S52 不断的扫描键盘,看是否有键按下,如有,则根据相应按键作出反应。3.5、测频率的基本原理 3.5.1、测量频率的方法 测量频率的方法一般分为无源测频法、有源测频法及电子计数法三种:1、无源测频法(又可分为谐振法和电桥法),常用于频率粗测,精度在 112左右;2、有源比较法可分为拍频法和差频法;比较上述前者是利用两个信号线性叠加以产生拍频现象,再通过检测零拍现象进行测频,常用于低频测量,误差在零点几 Hz;后者则利用两个非线性信号叠加来产生差频现象,然后通过检测零差现象进行测频,常用于高频测量,误差在20 Hz 左右。以上方法在测量范围和精度上都有一定的
15、不足,而电子计数法主要通过单片机进行控制。由于单片机的较强控制与运算功能,电子计数法的测量频率范围宽,精度高,易于实现。本设计就是采用单片机电子计数法来测量频率和周期,其系统硬件原理框图如图 2.6 所示 图 3.7 系统硬件原理框图3.5.2、基本原理 测频率的基本原理是利用电子计数器显示单位的时间内通过时钟信号周期的个数来实现频率的测量。当测量周期时,通过单片机求频率的倒数方法,从而获得我们所需要的周期的测量。硬件部分由分频电路,单片机和数据显示电路组成;软件部分由信号频率测量模块,周期测量模块,定时器终端服务模块,数据显示模块等功能模块实现。应用单片机的控制能力和运算能力,实现计数功能和
16、13频率,周期的换算。设计的通用计数器测量范围能够达到 20HZ7MHZ,满足所需要的频率范围,测量精度较高,并对测量过程中数据误差的进行了分析,提出了时钟、复位电路、按键、信号源 f(x)、AT89S52、显示电路,为减少误差的方法,最后,文章还对通用计数器的设计方案提出了可扩展的地方。 用单片机电子计数法测量频率有测频率法和测周期法两种方法。测量频率主要是在单位定时时间里对被测信号脉冲进行计数;测量周期则是在被测信号一个周期时间里对某一基准时钟脉冲进行计数。测量矩形波的周期通过对频率求倒即可得到。 图 3.8 基于单片机的通用电子计数器主要电路图4、软件设计4.1、设计流程图 如图 3.1
17、 所示设计流程图14图 4.1 设计流程图4.2、频率/周期测量流程图如图 3.2 所示 频率/周期测量流程图变量初始化 , T 0 / T 1 初始化定时 1 S 是否已到计算频率 / 周期结束图 4.2 频率/周期测量流程图4.3、软件设计总流程图如图 3.3 所示 软件设计总流程图计算机 单片机 锁存器烧录程序 控制信号 数码管控制信号15图 4.3 软件设计总流程图4.4、测频法与测周期法误差分析电子计数器测频法主要是将被测频率信号加到计数器的计数输入端,然后让计数器在标准时间 Ts1 内进行计数,所得的计数值 N1。与被测信号的频率fx1 的关系如下:fx1=N1/Ts1= N1fs
18、1而电子计数器测周法则是将标准频率信号 fs2 送到计数器的计数输入端,而让被测频率信号 fx2 控制计数器的计数时间,所得的计数值 N2 与 fx2 的关系如下:fx2=fs2/ N2事实上,无论用哪种方法进行频率测量,其主要误差源都是由于计数器只能进行整数计数而引起的1 误差: 1=N/ N对于测频法,有: 161=N1/ N1=1/ N1=1/ Ts1fx1= fs1/ fx1对于测周法,则有: 1=N2/ N2= 1/ N2=fs2/ fx2=Ts2fx2可见,在同样的 Ts 下,测频法 fx1 的低频端,误差远大于高频端,而测周法在 fx2 的高频端,其误差远大于低频端。理论研究表明
19、,如进行 n 次重复测量然后取平均,则1 误差会减小 n 倍。如给定1 误差 0,则要求0 对测频法要 fx1对测周法则要求 fx20fs2 因此,对一给定频率信号 fs 进行 fs1/0 测量时,用测频法 fs1 越低越好,用测周法则 fs2 越高越好。3.3 程序编程设计 系统的软件设计也是工具系统功能的设计。单片机软件的设计主要包括执行软件(完成各种实质性功能)的设计和监控软件的设计。单片机的软件设计通常要考虑以下几个方面的问题:(1)根据软件功能要求,将系统软件划分为若干个相对独立的部分,设计出合理的总体结构,使软件开发清晰、简洁和流程合理;(2)培养良好的编程风格,如考虑结构化程序设
20、计、实行模块化、子程序化。既便于调试、链接,又便于移植和修改;(3)绘制程序流程图; (4)合理分配系统资源;(5)为程序加入注释,提高可读性,实施软件工程;4.5、功能仿真 使用 Proteus 软件进行单片机系统仿真设计,然后结合 keil uvision3 软件进行编译,实现单片机电路的仿真。检测结果如下:检测一: 频率:50kHz、周期:20us17检测二: 频率:100Hz、周期:10000us18结束语当拿到毕业设计的题目时,我想选一个在硬件电路上能把所学知识和专业知识结合的题目。所以我选择了通用电子技术器,虽然模信号完全可以通过单片机本身加显示可以搞定,但是那样硬件电路不是很复杂
21、,加上软件控制不是那么的直观,经过几天的思考、设计和网络资料,我选择了此设计方案。重新拿起书本资料来设计自己的毕业题目,发现自己大学里还真的学了不少的知识,不过,还要再接再厉,相信仅凭现在的知识是很难在社会上立足的。最后谢谢我的专业老师们,为我们付出的心血,老师你们辛苦了。19参考文献1 程全.基于 AT89S52 实现的多种波形发生器的设计J.周口师范学院学报,2005.22(5)2 周明德.微型计算机系统原理及应用M.北京:清华大学出版社,2002.3 刘乐善.微型计算机接口技术及应用M.北京:北京航空航天大学出版社,2001.258264.4 童诗白.模拟电路技术基础M.北京:高等教育出
22、版社,20005 杜华.任意波形发生器及应用J.国外电子测量技术,2005.1 6 张友德.单片微型机原理、应用与实践M.上海:复旦大学出版社,200420附录一:程序源代码 #include #include #include #include #define uchar unsigned char #define uint unsigned int /*定义变量* sbit dula=P26; /数码管段选 sbit wela=P27; /数码管位选 sbit k5=P37; /测频启动按键 uchar k,count,key=0; uchar code table=0XC0,0XF9,0
23、XA4,0XB0,0X99,0X92,0X82,0XF8,0X80, 0X90,0X88,0X83,0XC6,0XA1,0X8E,0X86,0xbf,0xff; /驱动共阳数码管 uchar code table_yin=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x00; /共阴 uchar tab_freq=0,0,0,0,0,0;unsigned long int z; /*函数声明* void delay(uint); /延时函数 void disp();
24、/显示函数 void int_count0(); /T0 计数中断函数 void int_time1(); /T1 定时中断函数 21void trans_count(); /数据转换函数void freq_key(); /测试启动及频率周期切换 /*主函数开始* void main() dula=0; wela=0; TMOD=0x15; EA=1; ET0=1;ET1=1;while(1)freq_key();trans_count(); disp(); /*T0 计数中断函数开始 * void int_count0() interrupt 1 k+; if(key=2) 22TR1=0; TR0=0; /*T1 计时中断函数开始* void int_time1() interrupt 3 count+; if(key=1) TH1=0x4c; TL1=0x00; /50ms 初值 if(count=20) TR0=0; TR1=0; count=0;