基于51单片机的数字频率计设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于51单片机的数字频率计
一、实验内容
1.1数字频率计概述
数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。它是一种用十进制数字显示被测信号频率的数字测量仪器。它的基本功能是测量正弦信号,方波信号及其他各种单位时间内变化的物理量。在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精确度高,显示直观,经常要用到频率计。
本数字频率计将采用定时、计数的方法测量频率,采用四位LED数码管动态显示4位数。测量范围从1Hz—10kHz的正弦波、方波、三角波。用单片机实现自动测量功能。
1.2频率测量仪的设计思路与频率的计算
频率测量仪的设计思路主要是:设置单片机T1为计数器模式,对输入信号进行计数,T0设置为定时器模式,定时时间为1秒,则计数器所计数值即为被测信号频率。
1.3 基本设计原理
基本设计原理是直接用十进制数字显示被测信号频率的一种测量装置。它以在单位时间内对被测信号上升沿计数的方法对正弦波、方波、三角波的频率进行自动的测量。如果被测信号频率超过量程,则有警报灯闪烁。所谓“频率”,就是周期性信号在单位时间(1s)内变化的次数。若在一定时间间隔T内测得这个周期性信号的重复变化次数N,则其频率可表示为f=N/T。
1.4 频率计性能参数设计
量程:0-10KHz
波形:方波
输入信号电压:5V
二、数字频率计的硬件结构设计
2.1 系统硬件的构成
本频率计的数据采集系统主要元器件是单片机AT89C51,由它完成对待测信号频率的计数和结果显示等功能,外部还要有电源电路、复位电路、显示器,报警电路等器件,如下图所示:
图一数字频率计功能模块
2.2 AT89C51单片机引脚说明
在本次设计中,采用89C51作为CPU处理器,充分利用其硬件资源,结合数码管,发光二极管,按键开关构成控制及显示模块。在试验中选用P1.2,P1.3,P1.4端口分别控制数据和时钟信号的输入实现频率的动态显示。P口引脚外接发光二极管作为报警电路。P3.5引脚作为被测信号的输入引脚。
2.3 数码管显示电路
本实验使用四位共阳极数码管,使用两片74HC595作为数码管驱动通过P1.2,P1.3,P1.4端口分别控制数据和时钟信号的输入实现频率的动态显示。三、实验原理图
图二数码管电路图三数码管驱动电路图五超量程报警电路
图六单片机及复位电路
四、实验记录
(1)程序设计调试过程记录
本次实验的程序框架都在实验的预习和准备中完成,其中包括延时函数编写,显示函数编写,定时器0初值计算,频率值的计算,定时器计数器的初始化和中断服务程序的编写。
但是由于预习和设计时针对的数码管硬件连接方式不同,在预习时针对的数码管为74HC245和74HC138两个芯片控制一组四位共阳极数码管的动态显示,其中74HC245控制数码管显示的数值,74HC138控制数码管显示位数,这种硬件连接方式的驱动程序编写较为简单,但缺点是需要占用单片机两组I/O口,使得单片机利用率降低。而实验所用的开发板也带有两组四位共阳极数码管,但他们是由两块74HC595控制,只需要用三个I/O口即可实现8位数码管的显示控制,大大提高了单片机端口的利用率,但程序编写较为复杂,且需要进行时序控制,逻辑也较为复杂。在这次试验中,该显示程序的编写和调试占用了很多时间。
在进行定时器模块设计时,由于定时时间较长,所以采用了方式1(16位计数器),将一次循环时间定为50ms,循环20次即为1s的时间。由于定时器0的工作方式一需要重装初值,因此在多次循环后会导致定时时间不准确,这会使最后计算得到的频率值产生误差,且频率越高误差越大(实验记录数据会在后边给出)。
(2)实验数据记录
输入波形:方波; 输入信号幅值:5V;
(3)误差分析
经过测量,发现测量频率与输入频率之间有较为明显的误差,且随着测量信号频率的升高绝对误差随之增大但相对误差基本不变,且由于误差的产生,频率只能测量到9K左右并不能达到预计量程。
经过对程序的分析发现误差的主要来源为定时器定时不准确造成的。在实验设计时考虑到定时时间较长,所以选择了定时器0的工作方式1,其最大定时时间为65ms,故实验中选择一次定时50ms,循环20次以达到1s的准确定时,但由于多次重装初值,使实际定时时间大于1s。但是由于定时时间已经确定所以设实际定时时间为T0,输入信号频率为f0,则绝对误差为E
有
E=f0*(T0-1)Hz
相对误差为Er
有
Er=E/f0=(T0-1)
由于T0为定值,所以相对误差Er为一定值,且由上边记录数据可算出实际定时是时间T0为1.1s
(4)解决方法
方法一:
通过调整定时器0初值,多次测量校准可以达到1s的准确定时,从而提高频率测量精度。
方法二:
改变定时器工作方式,有方式1改为方式2(自动重装初值),方式二由于可以自动重装初值可以减少方式1中重装初值所附加的时间,实现更加准确地定
时。
五、修改后的程序框图
开始
定时器初始化计数器初始化开启对应中断
等待信号输入
输入信号频率
是否超量程
进入定时器中断服务
程序
计算输入信号频率值
将计算出的频率值返
回主程序
调用显示函数进入定时器1中
断程序
使发光二极管闪烁预警
复位按键是否按下
N Y
N Y
六、总结
通过这次实验我加深了对51单片机的了解,对单片机的定时器,计数器,中断系统,I/O口等有了更加直观的认识。最初选题时对数字频率计还不是很了解,但通过查找相关资料及和同学讨论逐渐清楚了频率计的工作原理,也对各个组成部分的电路有了大致的了解,最终确定了选题完成了预习报告的撰写。虽然事先准备的比较充分,但实验过程中仍然遇到了很多问题,例如不同芯片驱动的数码管驱动程序需要重新编写,还要添加按键,发光二极管等外部设备。但最终通过查找资料及与同学交流顺利解决了这些问题最终顺利完成了本次实验。
通过这次完整的实验设计和具体实践,让我学会了从系统的高度来考虑设计电路的各个模块,对电路的设计研究有了更加深刻的体会;同时我也感受到了用软件进行电路设计和仿真对实际电路设计有很重要的指导意义和参考价值。
在这次试验中不仅要对单片机的功能,性能,引脚定义和内部结构也有较为详细的了解;此外对电路板中所用到的电源转换芯片,数字电路的各种驱动芯片的引脚和功能,可编程器件的驱动程序等有很好地认识;在程序设计过程中要注意进行模块化的程序设计,逐个模块进行调试不仅会使程序逻辑更加清晰,也会加快程序调试进程。以上是我对这次实验的感受。