频率计.docx
- 文档编号:25967111
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:38
- 大小:1,010.75KB
频率计.docx
《频率计.docx》由会员分享,可在线阅读,更多相关《频率计.docx(38页珍藏版)》请在冰豆网上搜索。
频率计
目录
1、绪论…………………………………………………………………….1
1.1课程设计概要…………………………………………………….1
1.1.1课程设计的任务…………………………………………….1
1.1.2课程设计的目的…………………………………………….1
1.1.3课程设计要求……………………………………………….2
1.1.4课程设计内容……………………………………………….2
1.2频率测量原理…………………………………………………….2
1.2.1测频法(定时1s测信号脉冲次数)…………………….2
1.2.2测周法………………………………………………….2
1.3课程设计解决思路……………………………………………….3
2、硬件设计……………………………………………………………….3
2.1系统组成……………………………………………………….3
2.2AT89C51单片机及引脚的说明……………………………….4
2.3显示电路………………………………………………………….7
2.41s定时的实现………………………………………………….9
2.5频率计量程的自动切换……………………………………….10
2.6程序构建与算法分析………………………………………….11
2.7仿真模型的构建……………………………………………….13
2.8电路仿真及PCB制作………………………………………….14
2.8.1电路仿真………………………………………………….14
2.8.2PCB制作………………………………………………….17
3、软件设计…………………………………………………………….18
3.11602_Drive.h完整的库函数………………………………….18
3.2方法一的源程序……………………………………………….23
3.3方法二源程序………………………………………………….26
4、分析与总结………………………………………………………….29
4.1实验误差分析与改进………………………………………….29
4.2总结与心得体会……………………………………………….30
5.参考文献…………………………………………………………….30
1绪论随着微电子技术和计算机技术的迅速发展,特别是单片微机的出现和发展,使传统的电子测量仪器在原理、功能、精度及自动化水平等方面都发生了巨大的变化,形成一种完全突破传统概念的新一代测量仪器。
频率计广泛采用了高速集成电路和大规模集成电路,使仪器在小型化、耗电、可靠性等方面都发生了重大的变化。
对石英晶体振荡器,各种信号发生器,各种倍频和分频电路输出信号的频率需要测量;广播,电视,电讯,微电子技术等现代化的科学领域,更需要进行频率测量。
采用不同的测量原理,可以设计出不同结构的频率测量仪器,所以按测量原理来分,数字频率计可分为谐振式,比较式和计数式三类;按选用电路形式来分,它又可以分为模拟式和数字式两类。
通常能对频率和时间两种以上功能测量的数字化测量仪器,称为数字频率计,有时也称为通用计数器或电子计数器。
当前较多采用的是数字频率计。
计数式频率计是基于时间或频率的A/D转换原理,并依赖于数字计数技术发展起来的一类新型数字仪器。
与其他电子仪器一样,数字频率计也经历了电子管,晶体管和集成电路等几个阶段,其性能日臻完善,功能不断扩大,若配以适当的插件或传感器,还可以对多种电量和非电量进行测量。
1.1课程设计概要
1.1.1课程设计的任务
数字频率计是计算机,通讯设备,音频视频等科研生产领域不可缺少的测量仪器,它是一种用于十进制数字显示被测信号频率的数字测量仪器,它的基本功能是测量正弦信号,方波信号及其他各种单位时间内变化的物理量。
本设计以51单片机为核心,设计一个能够对方波信号频率进行测量的频率计。
1.1.2课程设计的目的
通过本次课程设计使学生掌握:
1微机接口技术与I/O通道电路的设计及实现方法;2控制程序的设计及实现方法;3微机控制系统的实际调试技巧。
从而提高学生对微机实时控制系统的设计和调试能力。
1.1.3课程设计要求
1方波信号频率范围:
1Hz~15KHz
2数码管显示频率
1.1.4课程设计内容
1硬件电路原理图;
2软件流程图及程序;
3Protues仿真及运行结果
1.2频率测量原理
1.2.1测频法(定时1s测信号脉冲次数)
用一个定时计数器做定时中断,定时1s,另一定时计数器仅做计数器使用,初始化完毕后同时开启两个定时计数器,直到产生1s中断,产生1s中断后立即关闭T0和T1(起保护程序和数据的作用)取出计数器寄存器内的值就是1s内待测信号的下跳沿次数即待测信号的频率。
用相关函数显示完毕后再开启T0和T1这样即可进入下一轮测量。
原理示意图如下:
图1.2.1测频法原理示意图
实验原理分析:
1.根据该实验原理待测信号的频率不应该大于计数器的最大值65535,也就是说待测信号应小于65535Hz。
2.实验的误差应当是均与的与待测信号的频率无关。
1.2.2测周法
对于1:
1占空比的方波,仅用一个定时计数器做计数器,外部中断引脚作待测信号输入口,置计数器为外部中断引脚控制(外部中断引脚为“1”切TRx=1计数器开始计数)。
单片机初始化完毕后程序等待半个正半周期(以便准确打开TRx)打开TRx,这时只要INTx(外部中断引脚)为高电平计数器即不断计数,低电平则不计数,待信号从高电平后计数器终止计数,关闭TRx保护计数器寄存器的值,该值即为待测信号一个正半周期的单片机机器周期数,即可求出待测信号的周期:
待测信号周期T=2*cnt/(12/fsoc)cnt为测得待测信号的一个正半周期机器周期数;fsoc为单片机的晶振。
所以待测信号的频率f=1/T。
原理示意图如下:
图1.2.2测周法原理示意图
1.3课程设计解决思路
根据该实验原理该方法只适用于1:
1占空比的方波信号,要测非1:
1占空比的方波信号
由于有执行f=1/(2*cnt/(12/fsoc))的浮点运算,而数据类型转换时未用LCD浮点显示,故测得的频率将会被取整,如1234.893Hz理论显示为1234Hz,测得结果会有一定程度的偏小。
也就是说测量结果与信号频率的奇偶有一定关系。
计数器的寄存器取值在1~65535之间,用该原理时,待测信号的频率小于单片机周期的1/12时,单片机方可较标准的测得待测信号的正半周期。
故用该原理测得信号的最高频率理论应为fsoc/12如12MHZ的单片机为1MHz。
而最小频率为f=1/(2*65535/(12/fsoc))如12MHZ的单片机为8Hz。
2.硬件设计
2.1系统组成
本频率计的数据采集系统主要元器件是AT89C51单片机,由它完成对待测信号频率的计数和结果显示等功能,外部还有显示驱动芯片、LCD显示器、按键控制等器件。
可分为以下四个模块:
计时模块、计数模块、信息采集处理模块、LCD显示模块。
由于本设计非常简单,实现的功能较少,所以计数模块、计时模块采用单片机本身的内部计时器和计数器。
系统硬件框图如图2.1.1所示。
信号予处理电路中的放大器实现对待测信号的放大,降低对待测信号的幅度要求;波形变换和波形整形电路实现把正弦波样的正负交替的信号波形变换成可被单片机接受的TTL/CMOS兼容信号;分频电路用于扩展单片机的频率测量范围并实现单片机频率测量和周期测量使用统一的输入信号。
图2.1.1系统硬件框图
系统软件包括测量初始化模块、显示模块、信号频率测量模块、量程自动转换模块、信号周期测量模块、定时器中断服务模块、浮点数格式化模块、浮点数算术运算模块、浮点数到BCD码转换模块。
系统软件框图如图2.1.2所示。
图2.1.2 系统软件流程框图
2.2AT89C51单片机及引脚的说明
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
图2.2.1AT89C51管脚图,图2.2.2是单片机内部结构图。
图2.2.1单片机内部结构图
图2.2.2AT89C51管脚图
管脚说明:
VCC:
供电电压。
GND:
接地。
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口也可作为AT89C51的一些特殊功能口。
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:
来自反向振荡器的输出。
2.3显示电路
图2.3LCD1602管脚图
1602采用标准的14脚接口,其中:
第1脚:
VSS为地电源
第2脚:
VDD接5V正电源
第3脚:
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度
第4脚:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:
RW为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
另外引脚"A"和"K"为背光引脚,"A"接正,"K"接负便会点亮背光灯。
A.1602硬件接口及功能接口:
//硬件接口部分**********************************************************
sbitLcdRs=P2^0;
sbitLcdRw=P2^1;
sbitLcdEn=P2^2;
sfrDBPort=0x80;//P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口
//向LCD写入命令或数据
************************************************************
#defineLCD_COMMAND0//Command
#defineLCD_DATA1//Data
#defineLCD_CLEAR_SCREEN0x01//清屏
#defineLCD_HOMING0x02//光标返回原点
//设置显示模式************************************************************
#defineLCD_SHOW0x04//显示开
#defineLCD_HIDE0x00//显示关
#defineLCD_CURSOR0x02//显示光标
#defineLCD_NO_CURSOR0x00//无光标
#defineLCD_FLASH0x01//光标闪动
#defineLCD_NO_FLASH0x00//光标不闪动
//设置输入模式************************************************************
#defineLCD_AC_UP0x02//将光标返回0x00
#defineLCD_AC_DOWN0x00//default
#defineLCD_MOVE0x01//画面可平移
#defineLCD_NO_MOVE0x00//default
B.1602初始化流程和原理框图
voidLCD_Initial()
{
LcdEn=0;
LCD_Write(LCD_COMMAND,0x38);//8位数据端口,2行显示,5*7点阵
LCD_Write(LCD_COMMAND,0x38);
LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);//开启显示,无光标
LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);//清屏
LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);//AC递增,画面不动
}
C.写DDRAM地址(原理框图如上)
voidGotoXY(unsignedcharx,bity)
{if(y==0)
LCD_Write(LCD_COMMAND,0x80|x);
if(y==1)
LCD_Write(LCD_COMMAND,0x80|(x-0x40));
}
D.写字符串(原理框图如上)
voidPrint(unsignedchar*str)
{while(*str!
='\0')
{LCD_Write(LCD_DATA,*str);
str++;
}
2.41s定时的实现
在频率计设计过程当中,如何实现1s的定时时间是一个关键。
一般思路是利用AT89C51本身的定时器的软件中断来实现1s的定时。
此种方法由于要达到1s的定时,必须用AT89C51的定时中断的多次中断来实现。
若每次软件定时50ms,则需20次中断才能达到1s。
由于定时器的软件中断响应会存在延时,而且还会随着AT89C51外部晶振频率的不同而不同,因此用软件中断很难调整到确定的1s定时时间。
并且由于内部定时器的计数频率是经过晶振频率的十二分频以后得到的,因此也很难达到所需的精度。
用硬件来实现定时的硬件电路可将图3中待测信号输入换成标准信号输入即可,本设计中为晶振输入。
硬件实现定时的方法是对标准信号,如晶振产生的时钟信号,用外部扩展的计数器和AT89C51内部的计数器共同计数来实现。
可将用于对标准信号计数的外部扩展计数器的最高位引到AT89C51的T1端,利用AT89C51单片机的T1口计数溢出中断可以实现对标准信号的计数和定时。
若采用10MHz晶振,要实现1s定时,可由外部扩展的计数器和AT89C51内部计数器构成的整个计数器计数,当其计数到10兆个数后利用T1口的计数器计数溢出中断来实现定时即可。
要使用于定时的计数器达到10兆个计数,仅需对AT89C51的T1计数器设置计数初始值。
同理,要实现0.01s、0.1s和10s的定时,也仅需设置用于定时的标准计数器的初始值,这可用软件来设定。
实践证明用此硬件计数器计数定时方法可使所设计的频率计的精度得到提高,且易于对基准信号时钟进行调整,便于产品的后期调试工作。
2.5频率计量程的自动切换
在使用计数方法实现频率测量时,这时外部的待测信号为定时/计数器的计数源,利用软件延时程序实现计数闸门。
频率计的工作过程为:
首先定时/计数器的计数寄存器清0,运行控制位TR置1,启动定时/计数器;然后运行软件延时程序,同时定时/计数器对外部的待测信号进行计数,延时结束时TR清0,停止计数;最后从计数寄存器读出测量数据,在完成数据处理后,由显示电路显示测量结果。
在使用定时方法实现频率测量时,这时外部的待测信号通过频率计的予处理电路变成宽度等于待测信号周期的方波,该方波同样加至定时/计数器的输入脚。
这时频率计的工作过程为:
首先定时/计数器的计数寄存器清0,然后检测方波高电平是否加至定时/计数器的输入脚;当判定高电平加至定时/计数器的输入脚,运行控制位TR置1,启动定时/计数器对单片机的机器周期的计数,同时检测方波高电平是否结束;当判定高电平结束时TR清0,停止计数,然后从计数寄存器读出测量数据,在完成数据处理后,由显示电路显示测量结果。
测量结果的显示格式采用科学计数法,即有效数字乘以10为底的幂。
这里设计的频率计用5位数码管显示测量结果:
前3位为测量结果的有效数字;第4位为指数的符号;第5位为指数的值。
采用这种显示格式既保证了测量结果的显示精度,又保证了测量结果的显示范围(0.100Hz-9.99MHz)。
量程自动转换的过程由频率计测量量程的高端开始。
由于只显示3位有效数字,在测量量程的高端计数闸门不需要太宽,例如在10.0KHz-9919KHz频率范围,计数闸门宽度为10mS即可。
频率计每个工作循环开始时使用计数方法实现频率测量,并使计数闸门宽度为最窄,完成测量后判断测量结果是否具有3位有效数字,如果成立将结果送去显示,本工作循环结束;否则将计数闸门宽度扩大10倍,继续进行测量判断,直到计数闸门宽度达到1s,这时对应的频率测量范围为100Hz-999Hz。
如果测量结果仍不具有3位有效数字,频率计则使用定时方法实现频率测量。
定时方法测量的是待测信号的周期,这种方法只设一种量程,测量结果通过浮点数运算模块将信号周期转换成对应的频率值,再将结果送去显示。
这样无论采用何种方式,只要完成一次测量即可,频率计自动开始下一个测量循环,因此该频率计具有连续测量的功能,同时实现量程的自动转换。
2.6程序构建与算法分析
程序机原理框图(关于显示函数部分在附录列出,只分析算法函数)
方法一:
用定时计数器T0做脉冲计数器(下跳沿有效),开始与暂停由T1控制定时计数器T1做定时中断,定时1s,定时开启置T0开始计数,定时完毕,置T0为暂停,关闭T1,读取计数数据并清空计数器,将计数数据装换为有效规范的字符串显示后再开启T0和T1,进入下一轮测量。
以下是程序的核心部分:
(定时1s,取计数数,并将其转换显示出来)原理框图如下
voidtimer1()interrupt3//定时50ms
{TH1=THCLK;
TL1=TLCLK;
if(--Cnt==0)//Cnt初值为20
{
TR0=0;TR1=0;
Cnt=CntNum;
tmp=TH0*256+TL0;
TH0=TL0=0;
Dynamic_LCD_Print();
TR0=1;
TR1=1;
}
}
方法二:
用一个定时计数器做计数器,外部中断引脚作待测信号输入口,置计数器为外部中断引脚控制(外部中断引脚为“1”切TRx=1计数器开始计数)。
单片机初始化完毕后程序等待半个正半周期(以便准确打开TRx)打开TRx,这时只要INTx(外部中断引脚)为高电平计数器即不断计数,低电平则不计数,待信号从高电平后计数器终止计数,关闭TRx保护计数器寄存器的值,该值即为待测信号一个正半周期的单片机机器周期数,即可求出待测信号的周期:
待测信号周期T=2*cnt/(12/fsoc)cnt为测得待测信号的一个正半周期机器周期数;fsoc为单片机的晶振。
所以待测信号的频率f=1/T。
以下是程序的核心部分:
(原理框图如下)
voidchkfreq()//
{while(FreqIN==0);
while(FreqIN==1);
TR0=1;
while(FreqIN==0);
while(FreqIN==1);
TR0=0;
cnttime=500000/(TH0*256+TL0);
TH0=TL0=0;
tmp=(int)cnttime;
Dynamic_LCD_Print();
}
原理框图如下:
2.7仿真模型的构建
数字方波频率计的设计总体可分为两个模块。
一是信号频率测量,二是将测得的频率数据显示在1602液晶显示模块上。
因此可搭建单片机最小系统构建构建频率计的仿真模型。
仿真模型的总原理图如下:
图2.7总仿真原理图
2.8电路仿真及PCB制作
2.8.1电路仿真
方法一
正弦波图形
三角波
矩形波
方法一的仿真图
方法二:
正弦波
矩形波
方法二的仿真图
2.8.2PCB制作
仿真模型的总原理图
模拟实物图
3.软件设计
3.11602_Drive.h完整的库函数/***************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 频率计
![提示](https://static.bdocx.com/images/bang_tan.gif)