基于51单片机频率计的设计与实现.docx

上传人:b****6 文档编号:12652826 上传时间:2023-06-06 格式:DOCX 页数:20 大小:264.56KB
下载 相关 举报
基于51单片机频率计的设计与实现.docx_第1页
第1页 / 共20页
基于51单片机频率计的设计与实现.docx_第2页
第2页 / 共20页
基于51单片机频率计的设计与实现.docx_第3页
第3页 / 共20页
基于51单片机频率计的设计与实现.docx_第4页
第4页 / 共20页
基于51单片机频率计的设计与实现.docx_第5页
第5页 / 共20页
基于51单片机频率计的设计与实现.docx_第6页
第6页 / 共20页
基于51单片机频率计的设计与实现.docx_第7页
第7页 / 共20页
基于51单片机频率计的设计与实现.docx_第8页
第8页 / 共20页
基于51单片机频率计的设计与实现.docx_第9页
第9页 / 共20页
基于51单片机频率计的设计与实现.docx_第10页
第10页 / 共20页
基于51单片机频率计的设计与实现.docx_第11页
第11页 / 共20页
基于51单片机频率计的设计与实现.docx_第12页
第12页 / 共20页
基于51单片机频率计的设计与实现.docx_第13页
第13页 / 共20页
基于51单片机频率计的设计与实现.docx_第14页
第14页 / 共20页
基于51单片机频率计的设计与实现.docx_第15页
第15页 / 共20页
基于51单片机频率计的设计与实现.docx_第16页
第16页 / 共20页
基于51单片机频率计的设计与实现.docx_第17页
第17页 / 共20页
基于51单片机频率计的设计与实现.docx_第18页
第18页 / 共20页
基于51单片机频率计的设计与实现.docx_第19页
第19页 / 共20页
基于51单片机频率计的设计与实现.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于51单片机频率计的设计与实现.docx

《基于51单片机频率计的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于51单片机频率计的设计与实现.docx(20页珍藏版)》请在冰点文库上搜索。

基于51单片机频率计的设计与实现.docx

基于51单片机频率计的设计与实现

2.1单片机最小系统设计3

附录二:

19

本科生课程设计成绩评定表19

摘 要

本设计提出了一种基于AT89C52单片机开发的数字频率、相位测量仪的设计。

系统以单片机AT89C52及异或器件为核心,构成完备的测量系统。

可以对信号进行频率、相位等参数的精确测量,测频绝对误差不大于0.1HZ,测相位差绝对误差不大于0.1°。

采用液晶LCD1602显示被测信号的频率、相位差。

与传统的电路系统相比,其有处理速度快、稳定性高、性价比高、硬件结构简单的优点。

关键词:

单片机;低频;绝对误差

1、设计方案

此次课程设计采用间接测量法来测量。

此次设计涉及到相位差,即两列波形异或得到的波形只需要测高电平,要用到GATE信号,GATE=1时,TR0=1,INTO=1才能启动计数器,而计数器0是通过外部中断INTO的下降沿开始触发的,计时器从0开始计时,计数器只能测高电平,因此测得的时间为半个周期。

当计数器0计时溢出,执行m加1的操作。

则测量时间为:

t1=TH0*256+TL0+m*65536,所求频率F=1000000/(2*t1)

测量两方波的相位差时,先将两方波信号异或,得到的新波形输入外部中断1的入口,在信号的第n个下跳沿时,进入外部中断的程序,开启计数器1。

第n+1个下跳沿到来时,则关闭计数器1,当GATE=1时,只有在INT1=1时,TR1=1时,计数器T1才开始计数,当计数器0计时溢出,执行m加1的操作,所以读的的时间只为高电平的持续时间,即为两方波的相隔时间t2,相位差可计算如下:

t2=TH1*256+TLI+N*65536;则相位差P=t2/(2*t1)*360

1.1设计基本原理

1.1.1测量频率的原理

定时/计数器工作在方式1,每产生一次定时器0中断,计数65536个脉冲,此时的脉冲来自振荡器的12分频后的脉冲,其周期为1uS。

根据产生外部中断0时,定时器0中断的次数u,以及此时定时/计数器0计数寄存器的数值X,即可求得待测方波的周期为:

T=(65536*u+X)us,取其倒数即可求得待测方波的频率,小数点后保留两位,即可使得频率精度为0.1HZ。

1.1.2相位差的测量原理

将两路同频不同相的方波信号进过鉴相器(即异或)后得到的脉冲宽度t与方波信号的周期T的比值(占空比),即对应为两信号的相位差,此时相位差

其中,脉冲宽度的测量方法与方波周期的测量方法相同。

相位差测量的原理图如下:

图1相位差测量原理图

1.2系统设计框图

经过方案论证和比较后,最终确定的系统框图如图1所示,主要由AT89C52单片机、异或器件、LCD1602、电源等组成。

图2系统设计框图

2、系统硬件线路设计图

2.1单片机最小系统设计

单片机最小系统是能补足单片机工作的最简单电路,它由单片机、电源、晶体振荡器、复位电路等构成。

它是本系统的处理单元也是控制单元,负责处理信号、外设的接口与控制,同时它也是所有软件的载体。

本系统采用AT89C52是美国Atmel公司生产的低电压、高性能CMOS8位单片机,片内含8KB的可反复檫写的程序存储器和12B的随机存取数据存储器(RAM),器件采用Atmel公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内配置通用8位中央处理器(CPU)和Flash存储单元,功能强大的AT89C52单片机可灵活应用于各种控制领域。

AT89C52单片机属于AT89C51单片机的增强型,与Intel公司的80C52在引脚排列、硬件组成、工作特点和指令系统等方面兼容。

主要管脚有:

XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。

RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。

VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。

P0~P3为可编程通用I/O脚,其功能用途由软件定义。

其管脚如下图所示:

图3AT89C52单片机管脚图

本设计中,P0端口(32~39脚)被定义为N1功能控制端口,分别与N1的相应功能管脚相连接。

单片机正常工作时,都需要有一个时钟电路和一个复位电路。

本设计

中选择了内部时钟方式和按键电平复位电路,来构成单片机的最小电路。

如图3所示。

图4单片机最小系统

2.2液晶LCD1602显示电路

字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。

LCD1602分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别。

LCD1602采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如下表1所示:

表1LCD1602引脚接口说明

编号

符号

引脚说明

编号

符号

引脚说明

1

VSS

电源地

9

D2

数据

2

VDD

电源正极

10

D3

数据

3

VL

液晶显示偏压

11

D4

数据

4

RS

数据/命令选择

12

D5

数据

5

R/W

读/写选择

13

D6

数据

6

E

使能信号

14

D7

数据

7

D0

数据

15

BLA

背光源正极

8

D1

数据

16

BLK

背光源负极

1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。

1602液晶模块内部的控制器共有11条控制指令,如下表2所示,其中1为高电平、0为低电平。

表2LCD1602控制指令

序号

指令

RS

R/W

D7

D6

D5

D4

D3

D2

D1

D0

1

清显示

0

0

0

0

0

0

0

0

0

1

2

光标返回

0

0

0

0

0

0

0

0

1

*

3

置输入模式

0

0

0

0

0

0

0

1

I/D

S

4

显示开/关控制

0

0

0

0

0

0

1

D

C

B

5

光标或字符移位

0

0

0

0

0

1

S/C

R/L

*

*

6

置功能

0

0

0

0

1

DL

N

F

*

*

7

置字符发生存贮器地址

0

0

0

1

字符发生存贮器地址

8

置数据存贮器地址

0

0

1

显示数据存贮器地址

9

读忙标志或地址

0

1

BF

计数器地址

10

写数到CGRAM或DDRAM)

1

0

要写的数据内容

指令1:

清显示,指令码01H,光标复位到地址00H位置。

指令2:

光标复位,光标返回到地址00H。

指令3:

光标和显示模式设置I/D:

光标移动方向,高电平右移,低电平左移S:

屏幕上所有文字是否左移或者右移。

高电平表示有效,低电平则无效。

指令4:

显示开关控制。

D:

控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:

控制光标的开与关,高电平表示有光标,低电平表示无光标B:

控制光标是否闪烁,高电平闪烁,低电平不闪烁。

指令5:

光标或显示移位S/C:

高电平时移动显示的文字,低电平时移动光标。

指令6:

功能设置命令DL:

高电平时为4位总线,低电平时为8位总线N:

低电平时为单行显示,高电平时双行显示F:

低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。

指令7:

字符发生器RAM地址设置。

指令8:

DDRAM地址设置。

指令9:

读忙信号和光标地址BF:

为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。

指令10:

写数据。

与HD44780相兼容的芯片时序如下表3所示:

表3基本操作时序表

读状态

输入

RS=L,R/W=H,E=H

输出

D0—D7=状态字

写指令

输入

RS=L,R/W=L,

D0—D7=指令码,E=高脉冲

输出

读数据

输入

RS=H,R/W=H,E=H

输出

D0—D7=数据

写数据

输入

RS=H,R/W=L,

D0—D7=数据,E=高脉冲

输出

其操作时序图如下所示:

图5读操作时序图

图6写操作时序图

本设计中采用液晶LCD1602显示输入方波A和B的频率和相位差,其D0~D7与单片机的P0端口连接,使能端E、RS、RW分别与单片机P2.4、P1.7、P1.6连接,此电路原理简单,电路连接方便,如图7所示。

图7液晶LCD1602显示电路

2.3频率、相位差测量电路

本设计中将方波A输入,采用定时中断测量其频率,同时将方波A和方波B经过异或门74LS86异或后输入即可测量出两路方波的相位差。

如图7所示。

图8频率、相位差测量电路

异或门74LS86真值表如表4所示:

表474LS86真值表

A

B

C

0

0

0

0

1

1

1

0

1

1

1

0

综上所述,频率、相位表的总体电路图如图9所示:

图9频率相位表的总体电路图

3程序设计

3.1资源分配表

表5资源分配表

I/O口

作用

P0

LCD1602数据接口

P1.6

LCD1602RW接口

P1.7

LCD1602RS接口

P2.4

LCD1602E接口

P3.2

频率测量接口

P3.3

相位差测量接口

3.2程序流程框图

频率、相位表的程序流程图如图9所示:

图10程序流程图

 

4.系统仿真和测试结果

在仿真软件PROTUES中按照电路图连接好电路。

输入两待测方波信号波形,当测试频率时,先依次设置好方波A和B的频率,进行仿真测得数据;当测试相位差,先将方波A和B频率设置为500HZ,然后依次设置相位差,测试波形和结果如图11所示:

图11仿真波形

表6仿真频率测试结果

输入频率/HZ

0

5

10

50

100

150

200

250

测得频率/HZ

0.99

5.00

10.00

50.00

100.00

150.01

200.00

250.00

输入频率/HZ

300

350

400

450

500

550

600

650

测得频率/HZ

299.94

349.95

400.00

450.04

500.00

550.05

600.24

650.19

输入频率/HZ

700

750

800

850

900

950

1000

1050

测得频率/HZ

699.94

750.26

800.64

850.98

899.92

950.21

1000.64

1050.06

表7仿真相位差测试结果

输入相位差/度

0

30

45

60

90

120

135

150

测得相位差/度

0

30.06

45.00

59.94

90.00

120.06

135.00

149.94

5、性能分析

根据表6测试所得结果可以看出:

当输入频率0-550HZ时,频率误差大约为0.05HZ,小于0.1HZ;当输入频率大于600HZ时,频率误差大于0.1HZ,并且随着输入频率增大,频率误差均大于0.1HZ,故输入频率为0-550HZ时满足要求。

根据表7测试所得结果可以看出:

当输入的两路方波的相位差0-180度时,测试相位差大约为0度,小于0.1度,测试所得相位差性能比较好。

由此可得如下结论:

本次所设计的频率/相位差表适合测试低频信号,最佳频率范围为0-550HZ,输入方波相位差任意均可。

 

6、心得与体会

 

7、参考文献

 

附录一:

源程序

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

ucharm=0,n=0;

ucharu,v;

uinti,j;

uintx,y;

uintc,d;//相位数据结果保存

floatt0,t1,f,p;

uinta[]={70,61,48,48,48,48,48,46,48,48,72,90};//频率数据结果保存

//F,=,0,0,0,0,0,.,0,0,H,Z

uintb[]={80,61,48,48,48,46,48,48,34};//相位数据结果保存

//P,=,0,0,0,.,0,0,"//相位数据结果保存

sbitlcdrw=P1^6;

sbitlcdrs=P1^7;

sbitlcden=P2^4;

/////////////////LCD1602的设置//////////////////////////////////

voiddelay(uints)//延时1MS

{

uintr,g;

for(r=s;r>0;r--)

for(g=110;g>0;g--);

}

voidwrite_com(ucharcom)//写指令

{

lcdrs=0;

P0=com;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

voidwrite_data(uchardate)//写数据

{

lcdrs=1;

P0=date;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

voidinitlcd()//初始化

{

lcdrw=0;

lcden=0;

//write_com(0x01);//显示清屏

write_com(0x38);//显示模式设置

write_com(0x0c);//显示开,开游标,不闪烁

write_com(0x06);//字符时整体不移动

}

////////////LCD1602设置///////////////

///////////定时器的设置//////////////

voidCT_init()//定时计数器初始化

{TMOD=0x99;//GATE=1,T1、T0工作在方式1,定时方式

TH0=0;//定时计数器初值清零

TL0=0;

TH1=0;

TL1=0;

TR0=1;//TR0,TR1置位,此时定时计数器的启动有INT0,INT1引脚电平决定

TR1=1;

ET0=1;//开中断

ET1=1;

}

voidITC0()interrupt0//外部中断0服务程序

{

u=m;//读定时计数器0溢出次数

m=0;//溢出次数清零

x=TH0*256+TL0;//读定时计数器0当前值

TH0=0;//定时计数器0清零

TL0=0;

}

voidTIME0()interrupt1//定时计数器0溢出中断

{

m++;//溢出次数加1

}

voidITC1()interrupt2//外部中断1服务程序

{

v=n;//读定时计数器1溢出次数

n=0;//溢出次数清零

y=TH1*256+TL1;//读定时计数器1当前值

TH1=0;//定时计数器1清零

TL1=0;

}

voidTIME1()interrupt3//定时计数器1溢出中断

{

n++;//溢出次数加1

}

////////////定时器的设置//////////////

voidmain()

{

initlcd();//液晶显示初始化

CT_init();//定时计数器初始化

EA=1;//开总中断

EX0=1;//允许外部中断

EX1=1;

IT0=1;//设置外部中断方式为下降沿触发

IT1=1;

P3=0xff;

while

(1)

{

t0=u*65536+x;//计算脉冲时间宽度

f=1000000/(2*t0);//计算频率

c=f*100;//计算结果逐位保存

a[9]=c%10+48;

a[8]=(c/10)%10+48;

c=f;

a[6]=c%10+48;

a[5]=(c/10)%10+48;

a[4]=(c/100)%10+48;

a[3]=(c/1000)%10+48;

a[2]=(c/10000)%10+48;

write_com(0x80);

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

{

write_data(a[i]);

delay(10);

}

t1=v*65536+y;//计算脉冲宽度

p=(t1/(2*t0))*360;//计算相位差

d=p*100;//将计算结果逐位保存

b[7]=d%10+48;

b[6]=(d/10)%10+48;

d=p;

b[4]=d%10+48;

b[3]=(d/10)%10+48;

b[2]=(d/100)%10+48;

write_com(0x80+0X40);

for(j=0;j<=8;j++)

{

write_data(b[j]);

delay(10);

}

}

}

 

附录二:

本科生课程设计成绩评定表

姓名

性别

专业、班级

课程设计题目:

课程设计答辩或质疑记录:

 

成绩评定依据:

 

最终评定成绩(以优、良、中、及格、不及格评定)

 

指导教师签字:

年月日

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2