温度测控器课程设计.docx

上传人:b****7 文档编号:26580790 上传时间:2023-06-20 格式:DOCX 页数:29 大小:471.38KB
下载 相关 举报
温度测控器课程设计.docx_第1页
第1页 / 共29页
温度测控器课程设计.docx_第2页
第2页 / 共29页
温度测控器课程设计.docx_第3页
第3页 / 共29页
温度测控器课程设计.docx_第4页
第4页 / 共29页
温度测控器课程设计.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

温度测控器课程设计.docx

《温度测控器课程设计.docx》由会员分享,可在线阅读,更多相关《温度测控器课程设计.docx(29页珍藏版)》请在冰豆网上搜索。

温度测控器课程设计.docx

温度测控器课程设计

温度测控器课程设计

吉吉林工商学院

温度测控器课程设计

设计名称:

温度测控器

班级:

电子信息10403班

 

2012年12月14日

 

一、温度测控器的原理及功能

如图1-1所示此多点温度测量电路主要由以下几部分组成:

两个温度传感器DS18B20择开关电路,控制器单片机AT89S52、扫描驱动电路、数码管LED显示器、报警及电源电路等。

 

温度控制电路

图1-1系统组成方框图

温度传感器从测试点采集温度,然后把温度转换成电压(或电流),温度传感器输出电压的大小随温度的高低变化而变化,电压值的变化范围从几个微伏到几个毫伏,不同的温度传感器,输出电压的范围也差别很大。

单片机AT89S52是多点温度测量电路的控制核心,它将采集到的数字温度电压值,经过计算处理,得到相应的温度值,经扫描驱动送到LED显示器以数字形式显示测量的温度。

LED显示器用于显示预设温度和实际测量温度的结果。

二、系统硬件电路的设计

2.1温度测量电路

多点温度测量电路由主控器单片机AT89S52作为多点温度测量电路的核心,温度传感器DS18B20负责从测量点采集温度,七位共阳LED数码管以动态扫描法实现温度显示。

2.1.1DS18B20单线智能温度传感器的工作原理

(1)DS18B20单线智能温度传感器的性能特点

DS18B20温度传感器是美国DALLAS半导体公司最近推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9-12位的数字值读数方式。

DS18B20的性能特点如下:

独特的单线接口仅需要一个端口引脚进行通信;

多个DS18B20可以并联在唯一的三线上,实现多点组网功能;

无须外接部件;

可通过数据供电,电压范围为3.0—5.5V;

零待机功耗;

温度以9或12位数字量读出;

用户可定义的非易失性温度报警设置;

报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;

负电压特性,电源极性接反时,温度计不会因发热而烧坏,但不能正常工作.

(2)DS18B20的内部结构框图如图2—1所示,它采用3脚PR—35封装或8脚SOIC封装其管脚封装如图2-2所示。

(3)DS18B20单线智能温度传感器的工作原理

64位ROM的位结构如图2—3所示。

开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。

非易失性温度报警触发器TH和TL,可通过软件写入户报警上下限。

DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可

电擦除的EEPRAM。

高速暂存RAM的结构为8字节的存储器,结构如图2—6所示。

 

图2-1DS18B20内部结构

图2-2DS18B20的引脚排列

头2个字节包含测得的温度信息,第3和第4字节是TH和TL的拷贝,是易失的,每次上电复位时被刷新。

第5个字节为配置寄存器,它的内容用于确定温度值的数字转换分辨率。

DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。

该字节各位的定义如图2-5所示。

低5位一直为1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。

在DS18B20 出厂时该位被设置为0,用户不要改动,R1和R0决定温度转换的精度位数,即用来设置分辨率,方法见表2—4。

 

8位检验CRC

48位序列号

8位工厂代码(10H)

MSBLSBMSBLSBMSBLSB

图2—3位64位ROM结构图

由表3—3可见,DS18B20温度转换时间比较长,而且设定的分辨率越高,所需要的温度数据转换时间就越长。

因此,在实际应用中要将分辨率和转换时间权衡考虑。

高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。

第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。

表2—4DS18B20分辨率的定义规定

R1

R0

分辨率/位

温度最大转换时间/ms

0

0

9

93.75

0

1

10

187.5

1

0

11

375

1

1

12

750

温度LSB

温度MSB

TH用户字节1

TL用户字节2

配置寄存器

保留

保留

保留

CRC

1字节

2字节

3字节

4字节

TL用户字节2

5字节

6字节

7字节EEPROM

8字节

9字节

图2-5配置寄存器

图2—6高速暂存RAM结构图

TM

R1

R0

1

1

1

1

1

当DS18B20接收到温度转换命令后,开始启动转换。

转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。

单片机可以通过单总线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB形式表示。

温度值格式如图2—8所示。

当符号位S=0时,表示测得的温度值为正值,可以直接将二进制转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制值。

表2—4是一部分温度值对应的二进制温度数据。

 

23

22

21

20

2-1

2-2

2-3

2-4

S

S

S

S

S

S

S

S

LS字节

MS字节

图2—7温度数据值格式

在64位ROM的最高有效字节中存储器循环冗余检验码(CRC)。

主机根据ROM的前56位来计算CRC值,并和存入DS18B20的CRC值做比较,以判断主机收到的ROM数据是否正确。

DS18B20的测温原理如图2—9所示.图中低温度系数晶振的振荡频率受温度的影响很小,用它产生的信号作为减法计数器1的脉冲输入;高温度系数晶振随温度变化其振荡频率明显变化,所以产生的信号作为减法计数器2的脉冲输入。

图中还隐含着计数门,当计数门打开时,DS18B20对低温度系数振荡器产生的时钟脉冲进行计数,进而完成温度测量。

计数门的开启时间由高温度系数振荡器决定,每次测量前,首先将—55℃所对应的一个基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在—55℃所对应的一个基数值。

减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置值将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值就是所测温度值。

图2—9中的斜率累加器用于温度补偿和修正测温过程中的非线形性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直到温度寄存器值达到被测温度值。

另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时很重要。

系统对DS18B20的各种操作必须按协议进行。

操作协议为:

初始化DS18B20(发复位脉冲)发ROM功能命令发存储器操作命令处理数据。

(4)DS18B20与单片机的接口电路

DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。

另一种是寄生电源方式,如图2—10所示。

单片机端口接单总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。

当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开始时间最大为10μs。

采用寄生电源供电方式时VDD和GND端均接地。

由于单线制只有一根线,因此发送接口必须是三态的。

 

温度/℃

二进制

十六进制表示

+125

0000011111010000

07D0H

+85

0000010101010000

0550H

+25.0625

0000000110010001

0191H

+10.125

0000000010100010

00A2H

+0.5

0000000000001000

0008H

0

0000000000000000

0000H

—0.5

1111111111111000

FFF8H

—10.125

1111111101011110

FF5EH

—25.0625

1111111001101111

FE6FH

—55

1111110010010000

FC90H

表2—8DS18B20温度与测得值对应表

 

 

图2—9DS18B20测温原理图

图2—10DS18B20采用寄生电源的电路图

2.2驱动电路

74ls245引脚图与用法

74LS245是我们常用的芯片,用来驱动led或者其他的设备,用法很简单如上图,这里简单的给出一些资料,他是8路同相三态双向总线收发器,可双向传输数据。

74LS245还具有双向三态功能,既可以输出,也可以输入数据。

当8051单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。

当片选端/CE低电平有效时,DIR=“0”,信号由B向A传输;(接收)

*DIR=“1”,信号由A向B传输;(发送)当/CE为高电平时,A、B均为高阻态。

2.3显示电路

LED数码管显示原理

常用的LED显示器为8段(或7段)分别记作a、b、c、d、e、f、g、dp、其中dp为小数点,每一只发光二极管都有一根电极引到外部引脚上,而另外一只引脚就连接在一起同样也引到外部引脚上,记作公共端(COM),如上图所示。

LED数码管有两种,分为共阳极与共阴极.共阳极:

当数码管里面的发光二极管的阳极接在一起作为公共引脚,在正常使用时此引脚接电源正极.当发光二极管的阴极接低电平时,发光二极管被点亮,从而相应的数码段显示,而输入高电平的段则不能点亮。

相反,共阴极:

当数码管里面的发光二极管的阴极接在一起作为公共引脚,在正常使用时此引脚接电源负极.当发光二极管的阳极接高电平时,发光二极管被点亮,从而相应的数码段显示,而输入低电平的段则不能点亮。

为了使LED显示器显示不同的符号或数字,要把某些段的发光二极管点亮,这样就要为LED显示器提供代码,因为这些代码可使LED相应的段发光,从而显示不同字型,因此该代码也成为段码(或称字型码)。

段码与字节中各位对应关系

代码位

D7

D6

D5

D4

D3

D2

D1

D0

显示段

dp

g

f

e

d

c

b

a

八段LED数码管段代码编码表

字形

0

1

2

3

4

5

6

7

8

9

共阳

C0H

F9H

A4H

B0H

99H

92H

82H

F8H

80H

90H

共阴

3FH

06H

5BH

4FH

66H

6DH

7DH

07H

7FH

6FH

三、系统软件的设计

系统程序主要包括主程序、DS18B20复位初始化子程序,读出转换后的温度值,生成显示码子程序及显示子程序

3.1主程序

主程序的主要功能是负责温度的实际显示、读数并处理DS18B20的测量温度值,温度测量每1s进行一次。

3.2DS18B20复位初始化子程序

读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC检验,校验有错时不进行温度数据的改写。

3.3读出转换后的温度值

温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率知转换时间约750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。

3.4生成显示码子程序及显示子程序

计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,

显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0将符号显示位移入下一位

四、程序设计流程

程序流程图如图

 

附录一程序

DQBITP3.6

FLAG1BIT00H

SIGNBIT01H

MSBEQU30H;转换数据高位字节

LSBEQU31H;转换数据低位字节

INTEGEQU32H;转换数据整数部分

DECIMEQU33H;转换数据小数部分

SEG_SEQU34H

SEG_I3EQU35H

SEG_I2EQU36H

SEG_I1EQU37H;3位整数段码

SEG_D1EQU38H;1位小数段码

SEG_CEQU39H

SEG_I6EQU40H

SEG_I5EQU41H

SEG_I4EQU42H

 

;******************************************************

;主程序

;******************************************************

ORG0000H

MAIN:

LCALLINIT_1820;DS18B20初始化

LCALLGET_TEMPER;读取转换数据

LCALLDATA_PROC;数据处理

LCALLSEG_GEN;生成显示码

LCALLDISPLAY;数码显示

SJMPMAIN

;****************************************************************

;DS18B20复位初始化子程序

;****************************************************************

INIT_1820:

SETBDQ

NOP

CLRDQ;主机发出延时537微秒的复位低脉冲

MOVR1,#3

TSR1:

MOVR0,#107

DJNZR0,$

DJNZR1,TSR1

SETBDQ;拉高数据线

NOP

NOP

NOP

MOVR0,#25H

TSR2:

JNBDQ,TSR3;等待DS18B20回应

DJNZR0,TSR2;延时并检测应答信号

LJMPTSR4

TSR3:

SETBFLAG1;置标志位,表示DS1820存在

LJMPTSR5

TSR4:

CLRFLAG1;清标志位,表示DS1820不存在

LJMPTSR6

TSR5:

MOVR0,#117

DJNZR0,$;时序要求延时一段时间

TSR6:

SETBDQ

RET

;*****************************************************************

;读出转换后的温度值

;*****************************************************************

GET_TEMPER:

SETBDQ

LCALLINIT_1820;先复位DS18B20

JBFLAG1,TSS2

RET;判断DS1820是否存在

TSS2:

MOVA,#0CCH;跳过ROM匹配

LCALLWRITE_1820

MOVA,#44H;发出温度转换命令

LCALLWRITE_1820

LCALLDELAY;等待AD转换结束,12位转换需750微秒

LCALLINIT_1820;准备读温度前先复位

MOVA,#0CCH;跳过ROM匹配

LCALLWRITE_1820

MOVA,#0BEH;发出读温度命令

LCALLWRITE_1820

LCALLREAD_18200;将读出的温度数据保存到35H/36H

RET

;*****************************************************************

;写DS18B20的子程序(有具体的时序要求)

;*****************************************************************

WRITE_1820:

MOVR2,#8;一共8位数据

CLRC

WR1:

CLRDQ

MOVR3,#6

DJNZR3,$

RRCA

MOVDQ,C

MOVR3,#23

DJNZR3,$

SETBDQ

NOP

DJNZR2,WR1

SETBDQ

RET

;****************************************************************

;读DS18B20的程序,从DS18B20中读出两个字节的温度数据

;****************************************************************

READ_18200:

MOVR4,#2;将温度高位和低位从DS18B20中读出

MOVR1,#31H;低位存入31H,高位存入30H

RE00:

MOVR2,#8;数据一共有8位

RE01:

CLRC

SETBDQ

NOP

NOP

CLRDQ

NOP

NOP

NOP

SETBDQ

MOVR3,#9

RE10:

DJNZR3,RE10

MOVC,DQ

MOVR3,#23

DJNZR3,$

RRCA

DJNZR2,RE01

MOV@R1,A

DECR1

DJNZR4,RE00

RET

;***********************************************************

;数据处理子程序,判断正负,并分离转换值的整数和小数部分

;符号位为SIGN,0为正,1为负

;整数部分存放在INTEG(32H)中,小数部分存放在DECIM(33H)中

;***********************************************************

DATA_PROC:

CLRC

CLRSIGN

MOVA,MSB

RLCA

JCNEG;判断符号位

LJMPPROC

NEG:

CLRC;对负数取补码

SETBSIGN

MOVA,LSB

CPLA

ADDA,#1

MOVLSB,A

MOVA,MSB

CPLA

ADDCA,#0

MOVMSB,A

PROC:

MOVA,LSB;分离转换值的整数和小数部分

ANLA,#0FH

MOVDECIM,A;存储小数部分

MOVA,MSB

SWAPA

ANLA,#0F0H

MOVINTEG,A

MOVA,LSB

SWAPA

ANLA,#0FH

MOVR0,INTEG

ORLA,R0

MOVINTEG,A;存储整数部分

RET

;***************************************************************

;生成显示码子程序

;符号位段码存放在SEG_S中,整数段码存放在SEG_I3到SEG_I1中

;小数部分段码存放在SEG_D1到SEG_D4中

;***************************************************************

SEG_GEN:

MOVDPTR,#TABLE

JBSIGN,S_NEG

MOVSEG_S,#00H

SJMPS_INT

S_NEG:

MOVSEG_S,#40H

S_INT:

MOVA,INTEG

MOVB,#100

DIVAB

MOVCA,@A+DPTR

MOVSEG_I3,A;百位数段码

MOVA,B

MOVB,#10

DIVAB

MOVCA,@A+DPTR

MOVSEG_I2,A;十位数段码

MOVA,B

MOVCA,@A+DPTR

ORLA,#80H;加小数点

MOVSEG_I1,A;个位数段码

MOVDPTR,#SWITCH

MOVA,DECIM

MOVB,DECIM

ADDA,B

JMP@A+DPTR;根据小数值查表,求段码

SWITCH:

AJMPK0

AJMPK1

AJMPK2

AJMPK3

AJMPK4

AJMPK5

AJMPK6

AJMPK7

AJMPK8

AJMPK9

AJMPK10

AJMPK11

AJMPK12

AJMPK13

AJMPK14

AJMPK15

K0:

MOVSEG_D1,#3FH

AJMPRETURN

K1:

MOVSEG_D1,#06H

AJMPRETURN

K2:

MOVSEG_D1,#06H

AJMPRETURN

K3:

MOVSEG_D1,#5BH

AJMPRETURN

K4:

MOVSEG_D1,#4FH

AJMPRETURN

K5:

MOVSEG_D1,#4FH

AJMPRETURN

K6:

MOVSEG_D1,#66H

AJMPRETURN

K7:

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

当前位置:首页 > 自然科学 > 物理

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

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