基于单片机的数字式频率检测.docx

上传人:b****3 文档编号:3681182 上传时间:2022-11-24 格式:DOCX 页数:13 大小:110.81KB
下载 相关 举报
基于单片机的数字式频率检测.docx_第1页
第1页 / 共13页
基于单片机的数字式频率检测.docx_第2页
第2页 / 共13页
基于单片机的数字式频率检测.docx_第3页
第3页 / 共13页
基于单片机的数字式频率检测.docx_第4页
第4页 / 共13页
基于单片机的数字式频率检测.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

基于单片机的数字式频率检测.docx

《基于单片机的数字式频率检测.docx》由会员分享,可在线阅读,更多相关《基于单片机的数字式频率检测.docx(13页珍藏版)》请在冰豆网上搜索。

基于单片机的数字式频率检测.docx

基于单片机的数字式频率检测

 

实验名称:

频率—温度检测

姓名:

万兴

学号:

112207202125

指导老师:

徐天奇

基于单片机的数字频率—温度设计

 

本设计以AT89S52单片机为核心充分利用硬件资源设计的一种频率计,该频率计首先将被测信号放大整形处理,变成满足单片机I/O口接受的TTL/CMOS兼容信号从单片机的T1输入口输入直接累加脉冲数,将单片机内部定时器定时为1S,这时累加的脉冲数即为被测信号的频率。

最后经单片机处理送至lcd液晶显示屏显示。

 

1系统概述

1.1数字频率计概述

本数字频率计将采用定时、计数的方法测量频率,采用一个1602ALCD显示器动态显示6位数。

测量范围从0Hz—65535Hz(此测量范围为计数器的最大计数,可根据实际需要进行扩展。

用单片机实现自动测量功能。

1.2基本设计原理

基本设计原理是直接用十进制数字显示被测信号频率的一种测量装置。

它以测量频率的方法直接对正弦波、方波、三角波的频率进行自动的测量。

所谓“频率”,就是周期性信号在单位时间(1s)内变化的次数。

若在一定时间间隔T内测得这个周期性信号的重复变化次数N,则其频率可表示为f=N/T。

其中脉冲形成电路的作用是将被测信号变成脉冲信号,其重复频率等于被测频率f。

利用单片机的内部定时器作为定时时间周期,若其周期为1s,则输入的脉冲信号持续计数时间亦准确地等于1s,所计数的脉冲个数即为被测信号的频率。

[1]

本次设计中对外部脉冲的占空比无特殊要求。

根据频率检测的原理,很容易想到利用51单片机的T0、T1两个定时/计数器,一个用来定时,另一个用来计数,两者均应该工作在中断方式,一个中断用于1s时间的中断处理,一个中断用于对频率脉冲的计数溢出处理,(对另一个计数单元加一),此方法可以弥补计数器最多只能计数65536(2的16次方)的不足。

将计数中断弥补计数器最高计数65536的不足作为本设计的扩展,故本设计最终选择采用第一种方法并且只使用计数器的最多计数65536。

2数字频率计(低频)的硬件结构设计

2.1系统硬件的构成

本频率计的数据采集系统主要元器件是单片机AT89S52,由它完成对待测信号频率的计数、计数处理、结果显示等功能,外部还要有信号处理、LCD显示器等器件。

具体可分为以下几个模块:

放大整形模块、单片机系统、LCD显示模块。

各模块关系图如图2所示:

图2系统工作原理图

2.2AT89S52单片机及其引脚说明

AT89S52是一种高性能低功耗的采用CMOS工艺制造的8位微控制器,它提供下列标准特征:

4K字节的程序存储器,128字节的RAM,32条I/O线,2个16位定时器/计数器,一个5中断源两个优先级的中断结构,一个双工的串行口,片上震荡器和时钟电路

引脚说明:

·VCC:

电源电压

·GND:

·P0:

P0口是一组8位漏极开路型双向I/O口,作为输出口用时,每个引脚能驱动8个TTL逻辑门电路。

当对0端口写入1时,可以作为高阻抗输入端使用。

当P0口访问外部程序存储器或数据存储器时,它还可设定成地址数据总线复用的形式。

在这种模式下,P0口具有内部上拉电阻。

在EPROM编程时,P0口接收指令字节,同时输出指令字节在程序校验时。

程序校验时需要外接上拉电阻。

·P1:

P1口是一带有内部上拉电阻的8位双向I/O口。

P1口的输出缓冲能接受或输出4个TTL逻辑门电路。

当对P1口写1时,它们被内部的上拉电阻拉升为高电平,此时可以作为输入端使用。

当作为输入端使用时,P1口因为内部存在上拉电阻,所以当外部被拉低时会输出一个低电流(IIL)。

·P2:

P2是一带有内部上拉电阻的8位双向的I/O端口。

P2口的输出缓冲能驱动4个TTL逻辑门电路。

当向P2口写1时,通过内部上拉电阻把端口拉到高电平,此时可以用作输入口。

作为输入口,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出电流(IIL)。

·P3口:

P3是一带有内部上拉电阻的8位双向的I/O端口。

P3口的输出缓冲能驱动4个TTL逻辑门电路。

当向P3口写1时,通过内部上拉电阻把端口拉到高电平,此时可以用作输入口。

作为输入口,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出电流(IIL)。

P3同时具有多种特殊功能,具体如下表1所示:

 

端口引脚

第二功能

P3.0

RXD(串行输入口)

P3.1

TXD(串行输出口)

P3.2

(外部中断0)

P3.3

(外部中断1)

P3.4

T0(定时器0)

P3.5

T1(定时器1)

P3.6

(外部数据存储器写选通)

P3.7

(外部数据存储器都选通)

表1P3口的第二功能

·RST:

复位输入。

当振荡器工作时,RST引脚出现两个机器周期的高电平将使单片机复位。

·ALE/:

当访问外部存储器时,地址锁存允许是一输出脉冲,用以锁存地址的低8位字节。

当在Flash编程时还可以作为编程脉冲输出。

一般情况下,ALE是以晶振频率的1/6输出,可以用作外部时钟或定时目的。

但也要注意,每当访问外部数据存储器时将跳过一个ALE脉冲。

·:

程序存储允许时外部程序存储器的读选通信号。

当AT89C52执行外部程序存储器的指令时,每个机器周期两次有效,除了当访问外部数据存储器时,将跳过两个信号。

·/VPP:

外部访问允许。

为了使单片机能够有效的传送外部数据存储器从0000H到FFFH单元的指令,必须同GND相连接。

需要主要的是,如果加密位1被编程,复位时EA端会自动内部锁存。

当执行内部编程指令时,应该接到VCC端。

·XTAL1:

振荡器反相放大器以及内部时钟电路的输入端。

·XTAL2:

振荡器反相放大器的输出端。

2.3信号调理及放大整形模块

2.3.1工作原理

放大整形系统包括衰减器、跟随器、放大器、施密特触发器。

它将正弦输入信号Vx整形成同频率方波Vo,幅值过大的被测信号经过分压器分压送入后级放大器,以避免波形失真。

由运算放大器构成的射级跟随器起阻抗变换作用,使输入阻抗提高。

同相输入的运算放大器的放大倍数为(R3+R4)/R3,改变R3的大小可以改变放大倍数。

系统的整形电路由施密特触发器组成,整形后的方波送至单片机以便计数。

由于输入的信号幅度是不确定、可能很大也有可能很小,这样对于输入信号的测量就不方便了,过大可能会把器件烧毁,过小可能器件检测不到,所以在设计中采用了这个信号调理电路对输入的波形进行阻抗变换、放大限幅和整形,信号调理部分电路具体实现电路原理图和参数如下图3所示:

[4]

图3信号处理

图中D1—D4为肖特基二极管(DIODE),本设计中选用IN4148。

D5为稳压二极管,本设计选用的稳压二极管IN4625,其中R1、R2、R5、R6为10KΩ,R4为150KΩ,R3为500KΩ的电位器。

[5]

2.3.4LF353双运算放大器简介

集成电路运算放大器是一种高电压增益、高输入电阻和低输出电阻的多级直接耦合放大电路,它的类型很多,电路也不一样,但结构具有共同之处,图6表示集成运放的内部电路组成原理框图。

图中输入级一般是由BJT、JFET或MOSFET组成的差分式放大电路,利用它的对称性可以提高整个电路的共模抑制比和其他方面的性能,它的两个输入端构成整个电路的反相输入端和同相输入端[7]。

电压放大级一般由电压跟随器或互补电压跟随器所组成,以降低输出电阻,提高带负载能力。

偏置电路是为各级提供合适的工作电流。

此外还有一些辅助环节,如电平移动电路、过载保护电路以及高频补偿环节等。

题中用到的LF353放大器属于用型集成运算放大,该运算放大器内部有偏移电压和FET输入装置(双向场效应管),有较大的反向击穿电压,因此,当大差动输入电压时,可以很容易容纳增加的输入电流。

 

   

      图7典型接法            图8 内部结构   

 

2.4显示模块

2.4.11602ALCD与单片机的接法

单片机与1602ALCD的连接如图9所示

图9单片机与LCD接法

1602ALCD采用标准的16脚接口,本设计具体接法如下:

第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位双向数据线。

第15~16脚:

空脚(图中未画出)。

由于AT89S52单片机的P0口内部没有上拉电阻故在单片机与1602ALCD之间需加上上拉电阻(图中未标出),本设计中选用4.7KΩ的电阻。

 

频率与温度的转换

频率

0-10kHZ

10-20K

20-30K

30-40K

40=50K

50-60K

60-70K

温度

0℃

1℃

2℃

3℃

4℃

5℃

6℃

T1的计数原理

设计中T1采用计数功能,需要注意的一个问题是,输入的待测时钟信号的频率最高可以达到460800Hz,但本设计的最高频率为计数器的最多计数65536次,显然当所输入的频率大于65536Hz的时候将无法显示,所以每当计数器T1溢出回零时产生中断,中断程序执行显示提示错误信息显示为00000Hz。

其程序流程图如图12所示。

软件工作原理

将整形后的波形送至单片机的T1计数器输入口,打开定时器0,初始化定时器0,将单片机的内部定时器T0定时为1S,此时T1输入口在1s内所计数到的脉冲个数即为该信号的频率。

将该计数脉冲个数经单片机处理送至LCD显示。

附录程序:

#include

#include

typedefunsignedcharBYTE;

typedefunsignedintWORD;

typedefbitBOOL;

sbitrs=P1^0;//液晶模块接口

sbitrw=P1^1;

sbitep=P1^2;

delay(BYTEms)

{//延时子程序

BYTEi;

while(ms--)

{

for(i=0;i<250;i++)

{

_nop_();

_nop_();

_nop_();

_nop_();

}

}

}

BOOLlcd_bz()

{//测试LCD忙碌状态

BOOLresult;

rs=0;

rw=1;

ep=1;

_nop_();

_nop_();

_nop_();

_nop_();

result=(BOOL)(P0&0x80);

ep=0;

returnresult;

}

lcd_wcmd(BYTEcmd)

{//写入指令数据到LCD

while(lcd_bz());

rs=0;

rw=0;

ep=0;

_nop_();

_nop_();

P0=cmd;

_nop_();

_nop_();

_nop_();

_nop_();

ep=1;

_nop_();

_nop_();

_nop_();

_nop_();

ep=0;

}

externvoidlcd_pos(BYTEpos)

{//设定显示位置

lcd_wcmd(pos|0x80);

}

externvoidlcd_wdat(BYTEdat)

{//写入字符显示数据到LCD

while(lcd_bz());

rs=1;

rw=0;

ep=0;

P0=dat;

_nop_();

_nop_();

_nop_();

_nop_();

ep=1;

_nop_();

_nop_();

_nop_();

_nop_();

ep=0;

}

externvoidlcd_init()

{//LCD初始化设定

lcd_wcmd(0x38);//8位数据接口,2行显示,5*7

delay

(1);

lcd_wcmd(0x0c);//显示开。

关标关。

闪烁关

delay

(1);

lcd_wcmd(0x06);//数据读写AC加1。

画面不移动

delay

(1);

lcd_wcmd(0x01);//清除LCD的显示内容

delay

(1);

}

#include

//

typedefunsignedcharBYTE;

typedefunsignedintWORD;

typedefbitBOOL;

//

externvoidlcd_init();

externvoidlcd_wdat(BYTEdat);

externvoidlcd_pos(BYTEpos);

//

voidmain()

{

lcd_init();

P0=0XFF;

P1=0XFF;

TMOD=0X01;

TH0=0X3C;

TL0=0XB0;

IE=0X82;

TR0=1;

while

(1);

}

//

voidtime0(void)interrupt1

{

staticBYTEcount=0;

TH0=0X3C;

TL0=0XB0;

//

if(count==19)

{

count++;

}

else

{

BYTEGE,SHI,BAI,QIAN,WAN;

WORDSHU;

//读取数据存放在shu中

SHU=P3;//P3高位

SHU<<=8;

SHU+=P2;//P2低位

SHU&=0XFFF9;

//关闭定时器

TR0=0;

//输出shu到lcd中

GE=SHU%10;

SHI=SHU/10%10;

BAI=SHU/100%10;

QIAN=SHU/1000%10;

WAN=SHU/10000;

lcd_pos(0x00);

lcd_wdat(WAN+48);

lcd_wdat(QIAN+48);

lcd_wdat(BAI+48);

lcd_wdat(SHI+48);

lcd_wdat(GE+48);

lcd_wdat('');

lcd_wdat('H');

lcd_wdat('Z');

//初始化

count=0;

TH0=0X3C;

TL0=0XB0;

P1_3=1;

//准备新一轮的计数

TR0=1;

P1_3=0;

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1