水温.docx
《水温.docx》由会员分享,可在线阅读,更多相关《水温.docx(30页珍藏版)》请在冰点文库上搜索。
水温
目录
1功能要求2
2方案论证2
3硬件电路的设计3
3.1主控制器3
3.2显示电路3
3.3温度传感器工作原理3
3.4DS18B20与单片机的接口电路8
4系统程序的设计9
4.1主程序9
4.2温度转换命令子程序10
4.3读出温度子程序10
4.4计算温度子程序11
4.5显示数据刷新子程序12
4.6DS18B20的各个ROM命令13
4.6.1ReadROM[33H]13
4.6.2MatchROM[55H]13
4.6.3SkipROM[0CCH]13
4.6.4SearchROM[0FCH]13
4.6.5AlarmROM[0ECH]14
4.6.6WriteScrathpad[4EH]14
4.6.7ReadScratchpad[0BEH]14
4.6.8CopyScratchpad[48H]14
4.6.9ConvertT[44H]14
4.6.10RecallE²[0B8H]15
4.6.11ReadPowerSupply[0B4H]15
4.7温度数据的计算处理方法15
5调试及性能分析16
6结束语17
DS18B20数字温度计的设计
王禹
西华师范大学物理与电子信息学院四川南充637002
摘要:
本系统主要由AT89C2051单片机、DS18B20温度传感器以及数码管等组成,实现温度显示等功能。
可以通过LED数码管的显示准确、快捷地读出所测温度。
该数字式温度计测温范围在0~99℃,误差在0.1℃以内。
关键字:
DS18B20传感器AT89C2051单片机数码管
DS18B20figurethermometer
Tutor:
TangZhengming
ChinaWestNormalUniversitySchoolofPhysicsandElectronicInformation
Class7ofGrade2003WangYu
Abstract:
ThissystemiscomposedofAT89C2051monolithicmachine,theDS18B20temperaturesensorandnumericalcodeetc.Inordertodemonstrateafunction,consumerscanreadtemperatureoutaccurately,rapidlybyLEDnumericalcodedisplay.thedigitalthermometer'sturntomeasuretemperaturerange0to99℃,errorwithin0.1℃.
引言:
21世纪将是我国电子信息产业发展的重要时期,通过信息化改造和提升传统产业,加强企业的自主创新能力,将成为国家一项重要的发展战略。
电子产业作为信息化的基础,特别是软件、集成电路、新型元器件将成为发展的重点。
从全球来说,从2006年开始行业将进入新一轮景气周期,随着新的技术和新的产品的不断推出,行业将进入一个比较平稳的发展时期,其波动将远远小于过去的5年。
未来我国电子行业的景气程度仍将会维持在一个较高的水平。
1功能要求
数字式温度计要求测温范围为0~99摄氏度,精度误差在0.1摄氏度以内,LED数码管直读显示.
2方案论证
在日常生活中及农业生产中经常要用到温度的检测及控制,传统的测温元件有热电偶和热电阻.而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,需要比较多的外部硬件支持,而硬件电路复杂,软件调试复杂,制作成本高.
本数字温度计设计采用美国DALLAS半导体公司继DS1820之后推出的一种改进型智能温度传感器DS18B20作为检测元件,测温范围为-55~125摄氏度,最大分辨率可达到0.0625摄氏度.DS18B20可以直接读出被测温度值,而且采用3线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点.
按照系统设计功能的要求,确定系统由3个模块组成:
主控制器,测温电路及显示电路.数字温度计总体电路结构如图1所示.
图1数字温度计电路结构框图
3硬件电路的设计
温度计电路的设计原理图如图2所示,控制器使用单片机AT89C2051,温度传感器使用DS18B20,用4位共阳极LED数码管以动态扫描法实现温度计显示.
图2数字温度计设计电路原理图
3.1主控制器
单片机AT89C2051具有低电压供电和小体积等特点,两个端口刚好满足电路系统的设计需要,很适合便携手持式产品的设计使用,系统可用二节电池供电。
3.2显示电路
显示电路采用4位共阳LED数码管,从P1口输出段码,列扫描用P3.0~P3.3口来实现,列驱动用9012三极管。
3.3温度传感器工作原理
DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
DS18B20的性能特点如下:
·独特的单线接口仅需要一个端口引脚进行通信;
·多个DS18B20可以并联在惟一的三线上,实现多点组网功能;
·无须外部器件;
·可通过数据线供电,电压范围为3.0~5.5V;
·零待机供耗;
·温度以9或12位数字量读出;
·用户可定义的非易失性温度报警设置;
·报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
·负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。
DS18B20采用3脚PR-35封装或8脚SOIC封装,其内部结构框图如图3所示。
图3DS18B20内部结构图
64位ROM的位结构图如图4所示。
开始8位是产品类型的编号,接着是每
个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。
非易失性温度报警触发器TH和TL,可通过
图464位ROM结构图
DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。
高速暂存RAM的结构为8字节的存储器,结构如图5所示。
头2个字节包含测得的温度信息,第3和第4字节是TH和TL的拷贝,是易失的,每次上电复位时被刷新。
第5个字节为配置寄存器,它的内容用于确定温度值的数字转换分辨率。
DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。
该字节各位的定义如图6所示。
低5位一直为1,TH是测试模式位,用于设置DS18B20在工作模式还是测试模式。
在DS18B20出厂时该位被设置为0,用户不要去改动,R1和R0决定温度转换的精度位数,即用来设置分辨率,定义方法见表1。
温度LSB
温度MSB
TH用户字节1
TL用户字节2
配置寄存器
保留
保留
保留
CRC
图5高速暂存RAM结构图
TM
R1
R0
1
1
1
1
1
图6配置寄存器
表1DS18B20分辨率的定义规定
R1
R0
分辨率(位)
温度最大转换时间/ms
0
0
9
93.75
0
1
10
187.5
1
0
11
375
1
1
12
750
由表可见,DS18B20温度转换的时间比较长,而且设定的分辨率越高,所需要的温度数据转换时间就越长。
因此,在实际应用中要将分辨率和转换时间权衡考虑。
高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。
第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。
当DS18B20接收到温度转换命令后,开始启动转换。
转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。
单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625摄氏度每LSB形式表示。
温度值格式如图7所示。
2³
2²
2
1
1/2
1/4
1/8
1/16
LS字节
S
S
S
S
S
64
32
16
MS字节
图7温度数据值格式
当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制。
表是一部分温度值对应的二进制温度数据。
温度/˚C
二进制表示
十六进制表示
+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
表2DS18B20温度计与测得值对应表
DS18B20完成温度转换后,就得测得的温度值与RAM中的TH、TL字节内容作比较。
若T>TH或T因此,可用多只DS18B20同时测量温度并进行报警搜索。
在64位ROM的最高有效字节中存储有循环荣誉检验码(CRC)。
主机根据ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到的ROM数据是否正确。
DS18B20的测温原理如图8所示。
图中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。
图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数,进而完成温度测量。
计数门的开启时间有高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的一个基数值。
图8DS18B20测温原理图
减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置值将重新被装如,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值就是所测温度值。
上图中的斜率累加器用语补偿和修正测温过程中的非线形性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直到温度计数器值达到被测温度值。
另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。
系统对DS18B20的各种操作必须按协议进行。
操作协议为:
初始化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。
3.4DS18B20与单片机的接口电路
DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。
另一种是寄生电源供电方式,如图9所示。
单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够电流,可用一个MOSFET管来完成对总线的上拉。
图9DS18B20采用寄生电源的电路图
当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10µs。
采用寄生电源供电方式时VDD和GND端均接地。
由于单线制只有一根线,因此发送接口必须是三态的。
4系统程序的设计
系统程序主要包括主程序、读出温度子程序、温度转换命令子程序、计算温度子程序、显示数据刷新子程序等等。
4.1主程序
主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量温度值,温度测量每1s进行一次。
其程序流程图见图10所示。
Y
图10DS18B20温度计主程序流程图
4.2温度转换命令子程序
温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。
温度转换命令子程序流程图如图11。
图11温度转换命令子程序流程图
4.3读出温度子程序
读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。
其程序流程图如图12所示。
图12读出温度子程序流程图
4.4计算温度子程序
计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图13所示。
图13计算温度子程序流程图
4.5显示数据刷新子程序
显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当
最高显示位为0时将符号显示位移入下一位。
程序流程图如图14所示。
图14显示数据刷新子程序流程图
4.6DS18B20的各个ROM命令
4.6.1ReadROM[33H]
这个命令允许总线控制器读到DS18B20的8位系列编码、惟一的序列号和8位CRC码。
只有在总线存在单只DS18B20的时候才能使用这个命令。
如果总线上有不止一个从机,当所有从机试图同时传送信号时就会发生数据冲突(漏极开路连在一起形成相“与”的效果)。
4.6.2MatchROM[55H]
这个是匹配ROM命令,后跟64位ROM序列,让总线控制器在多点总线上定位一只特定的DS18B20。
只有和64位ROM序列完全匹配的DS18B20才能响应随后的存储器操作。
所有和64位ROM序列不匹配的从机都将等待复位脉冲。
这条命令在总线上有单个或多个器件时都可以使用。
4.6.3SkipROM[0CCH]
这条命令允许总线控制器不用提供64位ROM编码就使用存储器操作命令,在单点总线情况下,可以节省时间。
如果总线上不止一个从机,在SkipROM命令之后跟着发一条读命令,由于多个从机同时传送信号。
总线上就会发生数据冲突(漏极开路下拉效果相当于相“与”)。
4.6.4SearchROM[0FCH]
当一个系统初次启动时,总线控制器可能并不知道单线总线上有多少器
件或它们的64位ROM编码。
搜索ROM命令允许总线控制器用排除法识别总
线上的所有从机的64位编码。
4.6.5AlarmROM[0ECH]
这条命令的流程和SearchROM相同。
然而,只有在最后一次测温后遇到
符合报警条件的情况,DS8B20才会响应这条命令。
报警条件定义为温度高
于TH或低于TL。
只要DS18B20不掉电,报警状态将一直保持,直到再一次
测得的温度值达不到报警条件。
4.6.6WriteScrathpad[4EH]
这个命令向DS18B20的暂存器TH和TL中写入数据。
可以在任何时刻发
出复位命令来中止写入。
4.6.7ReadScratchpad[0BEH]
这个命令读取暂存器的内容。
读取将从第一个字节开始,一直进行下去,
直到第9(CRC)字节读完。
如果不想读完所有字节,控制器可以在任何时
间发出任何时间发出复位命令来中止读取。
4.6.8CopyScratchpad[48H]
这个命令把暂存器的内容拷贝到DS18B20的E²ROM存储器里,即把温度
报警触发字节存入非易失性存储器里。
如果总线控制器在这条命令之后跟着
发出读时间隙,而DS18B20又忙于把暂存器拷贝到E²存储器,DS18B20就会
输出一个0,如果拷贝结束的话,DS18B20则输出1。
如果使用寄生电源,
总线控制器必须在这条命令发出后立即启动强上拉并最少保持10ms。
4.6.9ConvertT[44H]
这条命令启动一次温度转换而无需其它数据。
温度转换命令被执行,而
后DS18B20保持等待状态。
如果总线控制器在这条命令之后跟着发出时间
隙,而DS18B20又忙于做时间转换的话,DS18B20将在总线上输出0,若温
度转换完成,则输出1。
如果使用寄生电源,总线控制器必须在发出这条命
令后即启动强上拉,并保持500ms以上时间。
4.6.10RecallE²[0B8H]
这条命令把报警触发器里的值拷贝回暂存.作在DS18B20上电时自动执
行,这样器件一上电暂存器里马上就存在有效的数据了。
若在这条命令发出
之后发出读数据隙,器件会输出温度转换忙的标识:
0为忙,1为完成。
4.6.11ReadPowerSupply[0B4H]
若把这条命令发给DS18B20后发出读时间隙,器件会返回它的电源模式:
0为寄生电源,1为外部电源。
4.7温度数据的计算处理方法
从DS18B20读取出的二进制值必须先转换成十进制值,才能用于字符的显示。
因为DS18B20的转换精度为9~12位可选的,为了提高精度采用12位。
在采用12位转换精度时,温度寄存器里的值是以0.0625为步进的,即温度值为温度寄存器里的二进制值乘以0.0625,就是实际的十进制温度值。
通过观察下表可以发现一个十进制值和二进制值之间有很明显的关系,就是把二进制的高字节的低半字节和低字节的高半字节组成一个字节,这个字节的二进制值化为十进制值后,就是温度值的百、十、个位值,而剩下的低字节的低半字节化成十进制后,就是温度值的小数部分。
小数部分因为是半个字节,所以二进制值范围是0~F,转换成十进制小数值就是0.0625的倍数(0~15倍)。
这样需要4位的数码管来显示小数部分,实际应用不必有这么高的精度,采用1位数码管来显示小数,可以精确到0.1℃。
表3就是二进制和十进制的近似对应关系表。
表3小数部分二进制和十进制的近似对应关系表
小数部分二进
制值
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
十进制
值
0
0
1
1
2
3
3
4
5
5
6
6
7
8
8
9
5调试及性能分析
系统的调试以程序为主。
硬件调试比较简单,首先检查电路的焊接是否正确,然后可用万用表测试或通电检测。
软件调试可以先编写显示程序并进行硬件的正确性检验,然后分别进行主程序、读出温度子程序、温度转换命令子程序、计算温度子程序、显示数据刷新等子程序的编程及调试,由于DS18B20与单片机采用串行数据传送,因此,对DS18B20进行读写编码时必须严格地保持读写时序,否则将无法读取测量结果。
本程序采用单片机汇编编写,用wave3.2编译器编程调试。
软件调试到能显示温度值,而且在有温度变化时(例如用手去接触)显示温度能改变就基本完成。
性能测试可用制作的温度计和已有的成品温度计来同时测量比较,由于DS18B20的精度很高,所以误差指标可以限制在0.1℃以内,另外0~99℃的测温范围使得该温度计完全适合一般的应用场合,其低电压供电特性可做成用电池供电的手持电子温度计。
DS18B20温度计还可以在高低温报警、远距离多点测温控制等方面进行扩展,但在实际设计中应注意以下问题:
·DS18B20工作时电流高达1.5mA,总线上挂接点数较多且同时进行转换时,
要考虑增加总线驱动,可用单片机端口在温度转换时导通一个MOSFET供电。
·连接DS18B20的总线电缆是有长度限制的,因此在用DS18B20进行长距离
测温系统设计时,要充分考虑总线分布电容和阻抗匹配等问题。
·在DS18B20测温程序设计中,向DS18B20发出温度转换命令后,程序总要
等待DS18B20的返回信号,一旦某个DS18B20接触不好或断线,当程序
读该DS18B20时,将没有返回信号,程序进入死循环,这一点在进行
DS18B20硬件连接和软件设计时要给予一定的重视。
6结束语
本设计实现了温度显示功能。
用户可以通过LED数码管的显示准确、快
捷地读出所测温度。
该数字式温度计测温范围在0~99℃,误差在0.1℃
以内。
但是不足之处就在于测温范围不大,零下以及一XX以上的温度就不
能准确显示,另外DS18B20传感器只能测试空气中的温度,而不能测试溶液
的温度,这些都是需要扩展的内容。
致谢
感谢唐老师的亲切关怀和悉心指导。
从设计的选题、开题到方案设计及最后的论文撰写、修改,老师在百忙之中仍抽出宝贵的时间和我研究、讨论论文和设计中的难点,帮助我寻找解决问题的途径。
严谨的治学态度,使我受益匪浅。
在此,我要真诚地感谢唐老师。
参考文献
[1]沈荣金.DS1820数字温度计的应用.电子技术应用,1997,(04)
[2]马云峰.数字温度传感器DS18B20的原理与应用.世界电子元器件,2002,
(01)
[3]夏晓玲.基于AT89C2051的数字温度计的设计.鄂州大学学报,2005,(03)
[4]吴永春.单总线数字温度传感器DS18B20及其在单片机系统的应用.三明高等
专科学校学报,2004,(02)
[5]汪德彪主编,《MCS-51单片机原理及接口技术》,电子工业出版社2003
年8月第1版第1次印刷
附录:
程序部分
本程序测量温度范围:
0~99度,精确到0.06度;
DATBITP3.7;数据通信口
WDLSBDATA30H;读出的温度低字节
WDMSBDATA31H;读出的温度高字节
ORG0000H
LJMPMAIN;定时显示子程序,采用循环扫描方式
ORG0040H
T1MS:
;延时子程序
TT:
MOVR7,#0FFH
DJNZR7,$
RET
MAIN:
LOOP:
LCALLDSWD
;调用读出DS18B20温度程序;读出DS18B20温度程序
LCALLDISPLAY
SJMPLOOP
DSWD:
LCALLRST
JNBF0,KEND;如果没有应答,返回主程序
MOVR0,#0CCH
LCALLSEND_BYTE;跳过ROM匹配