- 相关推荐
DS18B20数字温度计的设计(一)
目录
第 一 章 引言----------------------------------------------------------- 2
第 二 章 系统硬件电路的设计-------------------------------------- 3
一 主控制器----------------------------------------------------- 3
二 显示电路----------------------------------------------------- 3
三 温度传感器工作原理-------------------------------------- 3
四 DS18B20 与单片机的接口电路------------------------- 8
第 三 章 系统程序的设计-------------------------------------------- 9
一 主程序--------------------------------------------------------- 9
二 读出温度子程序--------------------------------------------- 10
三 温度转换命令子程序--------------------------------------- 11
四 计算温度子程序--------------------------------------------- 11
五 显示数据刷新子程序--------------------------------------- 12
六 DS18B20的各条ROM命令---------------------------------- 12
七 温度数据的计算处理方法--------------------------------- 14
第 四 章 调试及性能分析--------------------------------------------- 15
第 五 章 程序清单------------------------------------------------------ 16
第 一 章 引言
在日常生活及工农业生产中,经常要用到温度的检测及控制,传统的测温元件有热电偶和热电阻。而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,需要比较多的外部硬件支持。其缺点如下:
硬件电路复杂;
软件调试复杂;
制作成本高。
本数字温度计设计采用美国DALLAS半导体公司继DS18B20之后推出的一种改进型智能温度传感器DS18B20作为检测元件,测温范围为-55~-125 ℃,最高分辨率可达0.0625℃.
DS18B20可以直接读出被测温度值,而且采用三线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点。
按照系统设计的功能和要求,确定系统由3个模块组成:主控制器,测温电路和显示电路。
数字温度计总体电路结构框图如图1所示。
设计要求:
1.测温范围 -55~~+125 ℃
2. 误差 +0.5℃以内
3.采用LED数码管直读显示
第 二 章 系统硬件电路的设计
温度计设计原理图如图所示,控制器使用单片机AT89C2051,温度传感器使用DS18B20,用4位共阳LED数码管以动态扫描法实现温度显示。
一 主控制器
单片机AT89C2051具有低电压供电和小体积等特点,两个端口刚好满足电路系统的设计需要,很适合便携手持式产品的设计使用。系统可用两节电池供电。
二 显示电路
显示电路采用4位共阳LED数码管,从P1口输出段码,列扫描用P3.0~P3.3来实现,列驱动用9012三极管。
三 温度传感器工作原理
1.DS18B20的性能特点
DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器。与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读取方式。DS18B20的性能特点如下:
●独特的单线接口仅需要一个端口引脚进行通信;
●多个DS18B20可以并联在惟一的三线上,实现多点组网功能;
●无须外部器件;
●可通过数据线供电,电压范围为3.0~5.5V;
●零待机功耗;
●温度以9或12位数字;
●用户可定义报警设置;
●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。
2.DS18B20的内部结构
DS18B20采用3脚PR-35封装或8脚SOIC封装,其内部结构如图2所示。
64位ROM的位结构如图3所示。开始8位是产品类型的编号;接着是每个器件的惟一的序号,共有48位;最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。非易失性温度报警触发器TH和TL,可通过软件写入户用户报警上下限数据。
8位检验CRC 48位序列号 8位工厂代码(10H)
MSB LSB MSB LSB MSB LSB
图3 64位ROM结构框图
DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的E2PROM。
高速暂存RAM的结构为9字节的存储器,结构如下图4所示。头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,其内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义如图5所示。其中,低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户不要去改动,R1和R0决定温度转换的精度位数,即用来设置分辨率。其定义方法见表1。
TM R1 R0 1 1 1 1 1
图5配置寄存器定义
R1 R0 分辨率//位 温度最大
转换时间/ms
0 0 9 93.75
0 1 10 187.5
1 0 11 375
1 1 12 750
表1DS18B20分辨率的定义和规定
由表1可见,DS18B20温度转换的时间比较长,而且设定的分辨率越高,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。
高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。
当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。
单片机可以通过单线接口读出该数据。读数据时低位在先,高位在后,数据格式以0.0625℃/LSB形式表示。
温度值格式如图6所示。
低字节
23 22 21 20 2-1 2-2 2-3 2-4
高字节
S S S S S 26 25 24
图6温度数据值格式
图中,S表示符号位。当S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表2是部分温度值对应的二进制温度数据。
温度/℃ 二进制表示 十六进制表示 温度/℃ 二进制表示 十六进制表示
+125 0000 0111 1101 0000 07D0H 0 0000 0000
0000 0000 0000H
+85 0000 0101
0101 0000 0550H -0.5 1111 1111
1111 1000 FFF8H
+26.0625 0000 0001
1001 0001 0191H -10.125 1111 1111
0101 1110 FF5EH
+10.125 0000 0000
1010 0010 00A2H -25.0625 1111 1110
0110 1111 FE6FH
+0.5 0000 0000
0000 1000 0008H -55 1111 1100
1001 0000 FC90H
表2 DS18B20温度与表示值对应表
DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较。若T>TH或T<TL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行报警搜索。
在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。主机ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到的ROM数据是否正确。
3.DS18B20测温原理
如图7所示,图中低温度系数振荡器的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数振荡器随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。
图7 DS18B20测温原理图
图中还隐含着计数门,当计数门打开时DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的一个基数分别置入减法计数器1和温度寄存器中,减法计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始停止温度寄存器值的累加,此时温度寄存器中的数值就是所测温度值,图7中的斜率累加器用于补偿和修正测温过程中的非线形性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直到温度寄存器值达到被测温度值。
另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行。操作协议为:初使化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。
四 DS18B20 与单片机的接口电路
DS18B20可以采用两种方式供电:一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如图8 所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。
当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为500us。采用寄生电源供电方式时,VDD端均接地。由于单线制只有一根线,因此发送接口必须是三态的。
图8 DS18B20采用寄生电源的电路图
第 三 章 系统程序的设计
系统程序主要包括主程序、读出温度子程序。温度转换命令子程序、计算温度子程序和显示数据刷新子程序。
一 主程序
主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。
主程序流程见图9所示。
主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,其程序流程见图9所示。
图9 主程序流程图
二 读出温度子程序
读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如图10示。
图10 读出温度子程序流程图
三 温度转换命令子程序
温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中,采用1s显示程序延时法等待转换的完成。温度转换命令子程序流程图11所示
图11 温度转换命令子程序流程图
四 计算温度子程序
计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,
其程序流程图如图12所示。
图12 计数温度子程序流程图
五 显示数据刷新子程序
显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位。程序流程图如图13。
图13 显示数据刷新子程序流程图
六 DS18B20的各条ROM命令
1.Read ROM[33H]。这条命令允许总线控制器读到DS18B20的8位系列编码、唯一的序列号和8位CRC码。只有在总线上存在单只DS18B20时,才能使用该命令。
如果总线上有不止一个从机,则当所有从机试图同时传送信号时就会发生数据冲突(漏极开路连在一起形成相“与”的效果)。
2. Match ROM[55H]。这是一条匹配ROM命令,后跟64位ROM序列,让总线控制器在多点总线上定位一只特定的DS18B20。只有与64位ROM序列完全匹配的DS18B20才能响应随后的存储器操作。所有与64位ROM序列不匹配的从机都将等待复位脉冲。这条命令在总线上有单个或多个器件时都可以使用。
3. Skip ROM[0CCh=H]。这条命令允许总线控制器不用提供64位ROM编码就使用存储器操作命令,在单点总线情况下,可以节省时间。如果总线上不止一个从机,则在Skip ROM命令之后跟着发一条读命令。由于多个从机同时传送信号,所以总线上就会发生数据冲突(漏极开路下拉效果相当于相“与”)。
4. Search ROM[0F0H]。当一个系统初次启动时,总线控制器可能并不知道单线总线上有多少器件或它们的64位ROM编码。搜索ROM命令允许总线控制器用排除法识别总线上的所有从机的64位编码。
5. Alarm Search[0ECH]。这条命令的流程与Search ROM相同。然而,只有在最近一次测温后遇到符合报警条件的情况下,DS18B20才会响应这条命令。报警条件定义为温度高于TH或低于TL。只要DS18B20不掉电,报警状态将一直保持,直到再一次测得的温度值达不到报警条件。
6. Write Scratchpad[4EH]。这条命令向DS18B20的暂存器TH和TL中写入数据。可以在任何时刻发出复位命令来中止写入。
7. Read scratchpad[0BEH]。这条命令读取暂存器的内容。读取将从第一字节开始,一直进行下去,直到第九字节(CRC)读完。如果不想读完所有字节,则控制器可以在任何时间发出复位命令来中止读取。
8. Copy scratchpad[48H]。这条命令把暂存器的内容拷贝到DS18B20的E2PROM存储器里,即把温度报警触发字节存入非易失性存储器里。如果总线控制器在这条命令之后跟着发出读时间隙,而DS18B20又忙于把暂存器拷贝到E2PROM存储器,则DS18B20就会输出一个0,如果拷贝结束则DS18B20输出1。如果使用寄生电源,则总线控制器必须在这条命令发出后立即启动强上拉,并最少保持10ms。
9. Convert[44H]。这条命令启动一次温度转换而无需其他数据。温度转换命令被执行后DS18B20保持等待状态。如果总线控制器在这条命令之后跟着发出读时间隙,而DS18B20又忙于做时间转换,则DS18B20将在总线上输出0;如果温度转换完成,则输出1.如果使用寄生电源,则总线控制器必须在发出这条命令后立即启动强上拉,并保持500ms以上时间。
10. Recall E2[0B80H]。这条命令把报警触发器里的值拷贝回暂存器。这种拷贝操作在DS18B20上电时自动执行,这样器件一上电暂存器里马上就存在有效的数据了。若在这条命令发出之后读数据隙,器件会输出温度转换忙的标识:0表示忙;1表示完成。
11. Read Power Supply[0B4H]。若把这条命令发给DS18B20后发出读时间隙,器件会返回它的电源模式:0表示寄生电源;1表示外部电源。
七 温度数据的计算处理方法
从DS18B20读出的二进制值必须先转换成十进制值,才能用于字符的显示。DS18B20的转换精度为9-12位可选,为了提高精度采用12位。在采用12位转换精度时,温度寄存器里的值是以0.0625为步进的,即温度值为温度寄存器里的二进制值乘以0.0626,就是实际的十进制温度值。
通过观察表4-2可以发现,一个十进制值与二进制值间有很明显的关系,就是把二进制的高字节的低半字节和低字节的高半字节组成一字节,这个字节二进制值化为十进制值后,就是温度值的百、十、个位值,而剩下的低字节的低半字节化成十进制后,就是温度值的小数部分。因为小数部分是半字节,所以二进制值范围是0-F,转换成十进制小数值就是0,0625的倍数(0-15倍)。这样需要4位的数码管来显示小数部分。实际应用不必有这么高的精度,采用1位数码管来显示小数,可以精确到0.1℃.
表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
表3 小数部分二进制和十进制的近似对应关系表
第 四 章 调试及性能分析
系统的调试以程序调试为主。
硬件调试比较简单,首先检查电路的焊接是否正确,然后可用万用表测试或通电检测。
软件调试可以先编写显示程序并进行硬件的正确性检测,然后分别进行主程序、读出温度子程序、温度转换命令子程序、计算温度子程序和显示数据刷新子程序等的编程和调试。
由于DS18B20与单片机采用串行数据传送,因此,对DS18B20进行读/写编程时必须严格地保证读/写时序;否则将无法读取测量结果。本程序采用单片机汇编编写,用Waver 3.2编译器编程调试。
软件调试到能显示温度值,而且在有温度变化时(例如用手去接触)显示温度能变化,就基本完成。
性能测试可用制作的温度计和已有的成品温度计同时进行测量比较。由于DS18B20的精度很高,所以误差指标可以限制在+0.5℃以内。
另外,-55~~+125 ℃的测温范围使得该温度计完全适合一般的应用场合,其低电压供电性能可做成用电池供电的手持电子温度计。
DS18B20温度计还可以在高低温报警、远距离多点测温控制等方面进行应用开发,但在实际设计中应注意以下问题:
DS18B20工作时电流高达1.5mA,总线上挂接点数较多且同时进行转换时要考虑增加总线驱动,可用单片机端口在温度转换时导通一个MOSFET供电。
连接DS18B20的总线电缆是有长度限制的,因此在用DS18B20进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配等问题。
在DS18B20测温程序设计中,向DS18B20发出温度转换命令后,程序总要等待DS18B20的返回信号。一旦某个DS18B20接触不好或断线,当程序读该DS18B20时,将没有返回信号,程序进入死循环。
第 五 章 程序清单
DS18B20采用4位LED共阳显示器显示测温值,显示精度为0.1 ℃,测温范围为-55~~+125 ℃,用AT89C2051单片机,12MHz晶振
TIMEL EQU 0E0H
TIMEN EQU 0B1H
TEMPHEAD EQU 36H
BITST DATA 20H
TIME1SOK BIT BITST.1
TEMPONEOK BIT BITST.2
TEMPL DATA 26H
TEMPH DATA 27H
TEMPHC DATA 28H
TEMPLC DATA 29H
TEMPDIN DIT P3.7
ORG 0000H
LJMP START
ORG 00BH
LJMP T0IT
ORG 100H
START: MOV SP , #60H
CLSMEM: MOV R0 , #20H
MOV R1 , #60H
CLSMEM1: MOV @R0,#00H
INC R0
DJNZ R1 , CLSMEM1
MOV TMOD ,#00100001B
MOV TH0, #TIMEL
MOV TL0, #TIMEH
SJMP INIT
ERROR: NOP
LJMP START
NOP
INIT: NOP
SETB ET0
SETB TR0
SETB EA
MOV PSW, #00H
CLR TEMPONEOK
LJMP MAIN
T0IT: PUSH PSW
MOV PSW,#10H
MOV TH0,#TIMEH
MOV TL0,#TIMEL
INC R7
CJNZ R7, #32H,T0IT1
MOV R7, #00H
SETB TIMEISOK
T0IT1: POP PSW
RETI
MAIN: LCALL DISP1
JNB TINE1SOK, MAIN
CLR TIME1SOK
JNB TEMPONEOK ,MAIN2
LCALL READTEMP1
LCALL CONVTEMP
LCALL DISPBCD
LCALL DISP1
MAIN: LCALL READTEMP
SETB TEMPONEOK
LJMP MAIN
INITDS1820: SETB TEMPDIN
NOP
NOP
CLR TEMPDIN
MOV R6 , #0A0H
DJNZ R6 ,$
MOV R6 ,#0A0H
DJNZ R6 ,$
SETB TEMPIND
MOV R6 ,#32H
DJNZ R6 ,$
MOV R6,#3CH
LOOP1820: MOV C , TEMPDIN
JC INITDS1820OUT
DJNZ R6, LOOP1820
MOV R6 , #064H
DJNZ R6 ,$
SJMP TNITDS1820
RET
INITDS1820OUT: SETB TEMPDIN
RET
READDS1820: MOV R7 ,#08H
SETB TEMPDIN
NOP
NOP
READDS1820LOOP: CLR TEMPDIN
NOP
NOP
NOP
SETB TEMPIND
MOV R6 ,#07H
DJNZ R6 ,$
MOV C , TEMPDIN
MOV R6 , #3CH
DJNZ R6 , $
RRC A
SETB TEMPDIN
DJNZ R7 ,READDS1820LOOP
MOV R6 , #3CH
DJNZ R6 , $
RET
WRITEDS1820: MOV R7 ,#08H
SETB TEMPDIN
NOP
NOP
WRITEDS1820LOP: CLR TEMPDIN
MOV R6 ,#07H
DJNZ R6, $
RRC A
MOV TEMPDIN
DJNZ R7 , WRITEDS1820LOP
RET
READTEMP: LCALL INITDS1820
MOV A ,#0CCH
LCALL WRITEDS1820
MOV R6 ,# 34H
DJNZ R6 ,$
MOV A , #44H
LCALL WRITEDS1820
MOV R6 ,# 34H
DJNZ R6 ,$
RET
READTEMP1: LCALL INITDS1820
MOV A , #0CCH
LCALL WRITEDS1820
MOV R6 , #34H
DJNZ R6 , $
MOV A , #0BEH
LCALL WRITEDS1820
MOV R6 , #34H
DJNZ R6 , $
MOV R5 , #09H
MOV B , #00H
READTEMP2: LCALL READDS1820
MOV @R0 , A
INC R0
READTEMP21: LCALL CRC8CAL
DJNZ R5 , READTEMP2
MOV A , B
JNZ READTEMPOUT
MOV A , TEMPHEAD +0
MOV TEMPL , A
MOV A , TEMPHEAD +1
READTEMPOUT: RET
CONVEMP: MOV A , TEMPH
ANL A , #80H
JZ TEMPC1
CLR C
MOV A , TEMPL
CLP A
ADD A, #01H
MOV TEMPL , A
MOV A , TEMPH
CLP A
ADDC A , #00H
MOV TEMPH , A
MOV TEMPHC , #0BH
SJMP TEMC11
TEMPC1: MOV TEMPHC , #0AH
TEMPC11: MOV A , TEMPHC
SWAP A
MOV TEMPHC , A
MOV A , TEMPL
ANL A , #0FH
MOV DPTR , #TEMPDOTTAB
MOVC A , @A+DPTR
MOV TEMPLC , A
MOV A , TEMPL
ANL A , #0F0H
SWAP A
MOV TEMPL , A
MOV A , TEMPH
ANL A , #0FH
SWAP A
ORL A , TEMPL
LCALL HEX2BCD1
MOV TEMPL , A
ANL A , #0F0H
SWAP A
ORL A , TEMPHC
MOV TEMPHC , A
MOV A , TEMPL
ANL A , #0FH
SWAP A
ORL A , TEMPLC
MOV TEMPLC , A
MOV A , R7
JZ TEMPC12
ANL A , #0FH
SWAP A
MOV A , TEMPHC
ANL A , #0FH
ORL A , R7
TEMPC12: RET
TEMPDOTTAB: DB 00H, 01H, 01H, 02H, 03H, 03H, 04H, 04H, 05H, 06H,
 BCD1:MOV B , #064H
DIV AB
MOV R7 , A
MOV A , #0AH
XCH A , B
DIV AB
SWAP A
ORL A , B
RET
CRC8CAL: PUSH ACC
MOV R7 , #08H
CRC8LOOP1: XRL A , B
RRC A
MOV A , B
JNC CRC8LOOP2
XRL A , #18H
CRC8LOOP2: RRC A
MOV B , A
POP ACC
RR A
PUSH ACC
DJNZ R7 , CRC8LOOP1
POP ACC
RET
END
【DS18B20数字温度计的设计(一)】相关文章:
谈数字IC设计技术08-25
数字时钟论文提纲06-23
数字视频接口-DVI 1.005-31
C语言程序设计 (一)05-11
宝洁如何在数字世界起舞05-02
数字媒体艺术的新美学特征分析05-03
我国高校数字图书馆服务对策探析06-07
简谈视觉艺术和数字媒体的关系03-13
酒店管理的数字化发展论文(精选8篇)09-30
浅谈数字媒体艺术的美学特征的表达分析论文04-18