温度测控器课程设计.docx
《温度测控器课程设计.docx》由会员分享,可在线阅读,更多相关《温度测控器课程设计.docx(29页珍藏版)》请在冰豆网上搜索。
![温度测控器课程设计.docx](https://file1.bdocx.com/fileroot1/2023-6/20/35081cf7-6198-4269-ba4b-b5f0ef3e5b7f/35081cf7-6198-4269-ba4b-b5f0ef3e5b7f1.gif)
温度测控器课程设计
温度测控器课程设计
吉吉林工商学院
温度测控器课程设计
设计名称:
温度测控器
班级:
电子信息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: