已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于51单片机的数字频率计一、 实验内容1.1数字频率计概述数字频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。它是一种用十进制数字显示被测信号频率的数字测量仪器。它的基本功能是测量正弦信号,方波信号及其他各种单位时间内变化的物理量。在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精确度高,显示直观,经常要用到频率计。 本数字频率计将采用定时、计数的方法测量频率,采用四位LED数码管动态显示4位数。测量范围从1Hz10kHz的正弦波、方波、三角波。用单片机实现自动测量功能。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;序号输入频率/Hz测量频率/Hz绝对误差/Hz相对误差11010002505000310011010015300330300.1640044040018600660600.19700770700.110800880800.111900990900.112100011001000.113150016501500.114200022002000.115250027502500.116300033003000.117500055005000.118800088008000.119900099009000.1(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中重装初值所附加的时间,实现更加准确地定时。五、修改后的程序框图六、总结 通过这次实验我加深了对51单片机的了解,对单片机的定时器,计数器,中断系统,I/O口等有了更加直观的认识。最初选题时对数字频率计还不是很了解,但通过查找相关资料及和同学讨论逐渐清楚了频率计的工作原理,也对各个组成部分的电路有了大致的了解,最终确定了选题完成了预习报告的撰写。虽然事先准备的比较充分,但实验过程中仍然遇到了很多问题,例如不同芯片驱动的数码管驱动程序需要重新编写,还要添加按键,发光二极管等外部设备。但最终通过查找资料及与同学交流顺利解决了这些问题最终顺利完成了本次实验。 通过这次完整的实验设计和具体实践,让我学会了从系统的高度来考虑设计电路的各个模块,对电路的设计研究有了更加深刻的体会;同时我也感受到了用软件进行电路设计和仿真对实际电路设计有很重要的指导意义和参考价值。在这次试验中不仅要对单片机的功能,性能,引脚定义和内部结构也有较为详细的了解;此外对电路板中所用到的电源转换芯片,数字电路的各种驱动芯片的引脚和功能,可编程器件的驱动程序等有很好地认识;在程序设计过程中要注意进行模块化的程序设计,逐个模块进行调试不仅会使程序逻辑更加清晰,也会加快程序调试进程。以上是我对这次实验的感受。七、附件#include /-/ 函数原形定义#define uchar unsigned char#define uint unsigned intvoid main (void);/ 主函数void LED4_Display (void);/ LED显示void LED_OUT(uchar X);/ LED单字节串行移位函数unsigned char code LED_0F;/ LED字模表sbit DIO = P12;/串行数据输入sbit RCLK = P13;/时钟脉冲信号上升沿有效sbit SCLK = P14; /打入信号上升沿有效/-/ 全局变量uchar LED8;/用于LED的8位显示缓存uint ff; /接受频率值uchar start=1; /定时器,计数模式启动变量unsigned char code LED_0F = / 0 1 2 34 5 6 78 9 A bC d E F -0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf;/-void delay(k) /延时函数while(k-);void Delay_ms(uint time) /延时函数uint i,j;for(i=time;i0;i-)for(j=125;j0;j-);void LED4_Display (void) /显示函数unsigned char code *led_table; / 查表指针uchar i;/显示第1位led_table = LED_0F + LED1;i = *led_table;LED_OUT(0x04);LED_OUT(i);RCLK = 0;RCLK = 1;/显示第2位led_table = LED_0F + LED2;i = *led_table;LED_OUT(0x08);LED_OUT(i);RCLK = 0;RCLK = 1;/显示第3位led_table = LED_0F + LED3;i = *led_table;LED_OUT(0x01);LED_OUT(i);RCLK = 0;RCLK = 1;/显示第4位led_table = LED_0F + LED4;i = *led_table;LED_OUT(0x02);LED_OUT(i);RCLK = 0;RCLK = 1;void LED_OUT(uchar X)/输出函数uchar i;for(i=8;i=1;i-)if (X&0x80) DIO=1; else DIO=0;X=1;SCLK = 0;SCLK = 1;void time0_init() /定时器初始化(TIMER0)TMOD|=0x01; /定时器0 定时模式 计数范围65536TH0=0x3c; /定时初值50msTL0=0xb0;TR0=0; /暂停定时器0void time1_init() /计数器初始化(T1)TMOD|=0x50; /定时器1 计数模式,计数范围65536TH1=0; /计数初值0TL1=0;TR1=0; /暂停计数器void str_init() /开中断EA=1;ET0=1;ET1=1;void time0_event() interrupt 1 /定时器0中断static uchar i;i+;TH0=0x3c; /定时初值50msTL0=0xb0;if(i=20) /循环20次为1秒i=0;TR1=0; /停止计数TR0=0; /停止定时ff=(TH1*256+TL1); /求出频率值 就是1秒内脉冲次数TH1=0; /计数值清零TL1=0; TH0=0x3c; /定时初值50msTL0=0xb0;start=1; /启动定时器开启变量void time1_event() interrupt 3 /定时器1中断 int i=0xff; while(1) P0=i;Delay_ms(500);void main()uchar i,j;uint a,b,c,d;uint ss4;ti
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论