DS18B20的测温仪设计.docx

上传人:b****7 文档编号:9430015 上传时间:2023-02-04 格式:DOCX 页数:30 大小:471.23KB
下载 相关 举报
DS18B20的测温仪设计.docx_第1页
第1页 / 共30页
DS18B20的测温仪设计.docx_第2页
第2页 / 共30页
DS18B20的测温仪设计.docx_第3页
第3页 / 共30页
DS18B20的测温仪设计.docx_第4页
第4页 / 共30页
DS18B20的测温仪设计.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

DS18B20的测温仪设计.docx

《DS18B20的测温仪设计.docx》由会员分享,可在线阅读,更多相关《DS18B20的测温仪设计.docx(30页珍藏版)》请在冰豆网上搜索。

DS18B20的测温仪设计.docx

DS18B20的测温仪设计

基于数字温度传感器DS18B20的测温仪设计

一功能要求:

㈠三位数码管显示温度值,保留小数点后一位。

㈡温度超过50摄氏度,红灯亮,低于50摄氏度,绿灯亮。

二方案论证

在日常生活及工农业生产中经常要用到温度的检测及控制,传统的测温元件有热电偶和热电阻。

而热电偶和热电组测出的一般都是电压,再转换成对应得温度,需要比较多的外部硬件支持,硬件电路复杂,软件调试复杂,制作成本高。

本数字温度计设计采用美国DALLAS半导体公司继DS1820之后推出的一种改进型智能温度传感器DS1820作为检测元件,测温范围为-55℃~125℃,分辨率最大可达0.0625℃。

DS18B20可以直接读出被测温度值。

而且采用3线制与单片机相连,减少了外部硬件电路,具有低成本和易使用的特点。

按照系统设计功能的要求,确定系统由3个模块组成:

主控制器.测温电路和显示电路。

数字温度计总体电路结构框图如图1所示。

图1数字温度计电路结构框图

三系统硬件电路的设计

温度计电路设计原理图如图2所示,控制器使用单片机AT89C51,温度传感器使用DS18B20,用4位公阳LED数码管以动态扫描法实现温度显示。

图2数字温度计设计电路图

1主控制器

单片机AT89C51具有低电压供电和小体积等特点,两个端口刚好满足电路系统的设计需要,很适合便携式产品的设计使用,系统可用二节电池供电。

2显示电路

显示电路采用4位共阳LED数码管,从P1口输出段码,列扫描用P3.0~P3.3来实现,列驱动用74LS04非门。

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,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。

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

图5高速暂存RAM结构图

图6配置寄存器

表1DS18B20分辨率的定义规定

由表1可见,DS18B20温度转换的时间比较长,而且设定的分辨率越高,所需要的温度转换时间越长.因此,在实际应用中要将分辨率和转换时间权衡考虑.

高速暂存RAM的第6,7,8字节保存未用,表现为逻辑1.第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性.

当DS18B20接收温度转换命令后,开始启动转换.转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1,2字节.单片机可以通过单线接口读出数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB形式表示.温度值格式如图7所示.

图7温度数据值格式

当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码转换为原码,再计算十进制.表2是一部分温度值对应的二进制温度数据.

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

DS18B20完成温度转换后,就把测得的温度值与RAM中的TH,TL字节内容作比较.若T>TH或T

在64位ROM的最高有效字节中存储有循环冗余检验码(CRC).主机根据ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到ROM数据是否正确.

DS18B20的测温原理如图8所示.图中第温度系数晶振的震荡频率受温度的影响很小,用于产生固定频率的脉冲送给减法计数器1;高温度系数晶振随温度变化其震荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入.图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数震荡器产生的时钟脉冲计数,进而完成温度测量.计数门的开启时间由高温度系数震荡器来决定,每次测量前,首先将-55℃所对应的一个基数分别置入减法计数器1,温度寄存器中,减法计数器1和温度寄存器被预置在-55℃所对应的一个基数值.

减法计数器1所对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置值将被重新装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值就是所测温度值.图8中的斜率累加器用于补偿和修正测温过程中的非线形性,其输出用于减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直到温度寄存器值达到被预测值.

另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要,系统对DS18B20的各种操作必须按协议进行.操作协议为:

初始化DS18B20→发ROM功能命令→发存储器操作命令→处理数据.

图8DS18B20测温原理图

㈣DS18B20与单片机的接口电路

DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源.另一种是寄生电源供电方式,如图9所示.单片机端口接单线总线,为为保证有效DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉.

图9DS18B20采用寄生电源的电路图

当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us.采用寄生电源供电方式时Vdd和GND端均接地.由于单线制只有一根线,因此发送接口必须是三态的.

四系统程序的设计

系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等等.

㈠主程序

主程序的主要功能是负责温度的实时显示,读出并处理DS18B20的测量温度值,温度测量1s进行一次,其程序流程图见图10.

㈡读出温度子程序

读出温度子程序的主要功能是读出RAM中的9个字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写.其程序流程图如图11所示.

图10DS18B20温度计主程序流程图

图11读出温度子程序流程图

㈢温度转换命令子程序

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

图12温度转换命令子程序流程图

4计算温度子程序

计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判断,其程序流程图如图13所示.

图13计算温度子程序流程图

5显示数据刷新子程序

显示数据刷新子程序主要是对显示数据进行刷新操作,当最高显示位为0时将符号显示位移入下一位.程序流程图如图14所示.

图14显示数据刷新子程序流程图

㈥DS18B20的各个ROM命令

⑴ReadROM[33H]

这个命令允许总线控制器读到DS18B20的8位系列编码,惟一的序列号和8位CRC码。

只有在总线上存在单只DS18B20的时候才能使用这个命令。

如果总线上有不止一个从机,当所有从机试图同时传送信号时,就会发生数据冲突。

⑵MatchROM[55H]

这个是匹配ROM命令,后跟64位ROM序列,让总线控制器在多点总线上定位一只特定DS18B20,只有和64位ROM序列完全匹配的DS18B20才能响应随后的存储器操作。

所有和64位ROM序列不匹配的从机都将等待复位脉冲。

这条命令在总线上有单个或三个器件时都可以使用。

⑶SkipROM[0CCH]

这条命令允许总线控制器不用提供64位ROM编码就使用存储器操作命令,在单点总线情况下,可以节省时间。

如果总线上不止一个从机,在SkipROM命令之后跟着发一条读命令,由于多个从机同时传送信号。

总线上就会发生数据冲突。

⑷SearchROM[0F0H]

当一个系统初次启动时,总线控制器可能并不知道单线总线上有多少器件或它们的64位ROM编码。

搜索ROM命令允许总线控制器用排除法识别总线所有从机的64位编码。

⑸AlarmSearch[0ech]

这条命令的流程和SearchROM相同。

然而,只有在最近一次测温后遇到符合报警条件的情况,DS18B20才会响应这条命令。

报警条件定义为温度高于TH或低于TL。

只要DS18B20不掉电,报警状态将一直保持,直到再一次测得的温度值达不到报警条件。

⑹WriteScratchpad[4EH]

这个命令向DS18B20的暂存器TH和TL中写入数据。

可以在任何时刻发出复位命令来中止写入。

⑺ReadScratchpad[0BEH]

这个命令读取暂存器的内容。

读取将从第1个字节开始,一直进行下去,直到第9个字节读完。

如果不想读完所有字节,控制器可以在任何时间发出复位命令来中止读取。

⑻CopyScratchpad[48H]

这个命令把暂存器的内容拷贝到DS18B20的EEROM存储器里,即把温度报警触发字节存入非易失性存储器里。

如果总线控制器在这条命令之后跟着发出读时间隙,而DS18B20又忙于把暂存器拷贝到EE存储器,DS18B20就会输出一个0,如果拷贝结束的话,DS18B20则输出1。

如果使用寄生电源,总线控制器必须在这条命令发出后立即启动强上拉并最少保持10ms。

⑼ConvertT[44H]

这条命令启动一次温度转换而无需其它数据。

温度转换命令被执行,而后DS18B20保持等待状态。

如果总线控制器在这条命令之后跟着发出时间间隙,而DS18B20又忙于做时间转换的话,DS18B20将在总线上输出0,若温度转换完成,则输出1。

如果使用寄生电源,总线控制器必须在发出这条命令后立即启动强上拉,并保持500ms以上时间。

⑽Recall、EE[0E8H]

这条命令把报警触发器里的值拷贝回暂存器。

这种拷贝操作在DS18B20上点时自动执行,这样器件以上电暂存器里马上就存在有效的数据了。

若这条命令发出之后发出数据隙,器件会输出温度转换忙的标识:

0为忙,1为完成。

⑾ReadPowerSupply[0b4h]

若把这条命令发给DS18B20后发出读时间隙,器件会返回他的电源模式:

0为寄生电源,1为外部电源。

㈦温度数据的计算处理方法

从DS18B20读取出的二进制值必须先转换成十进制值,才能用于字符的显示。

因为DS18B20的转换精度为9~12位可选的,为了提高精度采用12位。

在采用12位转换精度时,温度寄存器里的值是以0.0625为步进的,即温度值为温度寄存器里的二进制值乘以0.0625,就是实际的十进制温度值。

通过观察表5.2可以发现一个十进制值和二进制值之间有很明显的关系,就是把二进制的高字节的低半字节和低字节的高半字节组成一个字节,这个字节的二进制值化为十进制之后,就是温度值的百、十、个位值,而剩下的低字节的低半字节化为十进制后,就是温度值得小数部分。

小数部分因为是半个字节,所以二进制值范围是0~F,转换成十进制小数值就是0.0625的倍数(0~15倍)。

这样需要4位的数码管来显示小数部分,实际应用不必有这么高的精度,采用1位数码管来显示小数部分,实际应用不必有这么高的精度,采用1位数码管来显示小数,可以精确到0.1℃。

表下就是二进制和十进制的近似对应关系表。

表3小数部分二进制和十进制的近似对应关系表

五调试及性能分析

系统的调试以程序为主,硬件调试比较简单,首先检查电路的焊接是否正确,然后可用万用表测试或通电检测。

软件调试可以先编写显示程序并进行硬件的正确性检验,然后分别进行主程序、读出温度子程序、温度转换子程序、计算温度子程序、显示数据刷新等子程序的

编程及调试,由于DS18B20与单片机采用串行数据传送,因此,对DA18B20进行读写编程时必须严格的保证读写时序,否则将无法读取测量结果。

本程序采用单片机汇编边写,用KeilC51编译器编程调试。

软件调试到能显示温度值,而且在有温度变化时(例如用手去接触)显示温度能改变就基本完成。

性能测试可用制作的温度计和已有的成品温度计来同时测量比较,由于DS18B20的精度很高,所以误差指标可以限制在0.1℃以内,另外-55℃~+125℃的测量范围使得该温度计完全适合一般的应用场合,其低电压供电特性可做成用电池供电的手持温度计。

DS18B20温度计还可以在高低温报警、远距离多点测温控制等方面进行应用开发,但在实际设计中应注意一下问题:

1DS18B20工作时电流高达1.5mA,总线上挂节点数较多且同时进行转换时,要考虑增加总线驱动,可用单片机端口在温度转换时导通一个MODFET供电。

2连接DS18B20的总线电缆是有长度限制的,因此在用DS18B20进行长距离测温系统设计时,要充分考虑总线分布电容和阻抗匹配等问题。

3在DS18B20测温程序设计中,向DS18B20发出温度转换命令后,程序总要等待DS18B20的返回信号,一旦某个DS18B20接触不好或短线,当程序读该DS18B20时,将没有返回信号,程序进行死循环,这一点在进行DS18B20硬件连接和软件设计时要给予一定的重视。

六控制源程序清单

以下是DS18B20温度计控制源程序清单;

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

;DS18B20温度计*

;采用4位LED共阳显示测温值,显示精度0.1c,测温范围-55~+125*

;采用AT89C2051单片机,12MHZ晶振*

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

;

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

;

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

;常数定义

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

TIMELEQU0E0H

TIMEHEQU0B1H

TEMPHEADEQU36H

;

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

;工作内存定义

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

BITSTDATA20H

TIME1SOKBITBITST.1

TEMPONEOKBITBITST.2

TEMPLDATA26H

TEMPHDATA27H

TEMPHCDATA28H

TEMPLCDATA29H

;

;

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

;引脚定义

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

;

TEMPDINBITP3.7

;

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

;中断向量区

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

ORG0000H

LJMPSTART

ORG00BH

LJMPT0IT

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

;系统初始化

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

ORG100H

START:

MOVSP,#60H

CLSMEM:

MOVR0,#20H

MOVR1,#60H

CLSMEM1:

MOV@R0,#00H

INCR0

DJNZR1,CLSMEM1

;

MOVTMOD,#00100001B

MOVTH0,#TIMEH

MOVTL0,#TIMEL

SJMPINIT

;

ERROR:

NOP

LJMPSTART

;

NOP

INIT:

NOP

SETBET0

SETBTR0

SETBEA

MOVPSW,#00H

CLRTEMPONEOK

LJMPMAIN

;

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

;定时器0中断程序

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

T0IT:

PUSHPSW

MOVPSW,#10H

MOVTH0,#TIMEH

MOVTL0,#TIMEL

INCR7

CJNER7,#32H,TOIT1

MOVR7,#00H

SETBTIME1SOK

TOIT1:

POPPSW

RETI

;

;

;

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

;主程序

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

MAIN:

LCALLDISP1

JNBTIME1SOK,MAIN

CLRTIME1SOK

JNBTEMPONEOK,MAIN2

LCALLREADTEMP1

LCALLCONVTEMP

LCALLDISPBCD

LCALLDISP1

MAIN2:

LCALLREADTEMP

SETBTEMPONEOK

LJMPMAIN

;

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

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

;子程序区

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

;RESETDS18B20

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

INITDS1820:

SETBTEMPDIN

NOP

NOP

CLRTEMPDIN

MOVR6,#0A0H

DJNZR6,$

MOVR6,#0A0H

DJNZR6,$

SETBTEMPDIN

MOVR6,#32H

DJNZR6,$

MOVR6,#3CH

LOOP1820:

MOVC,TEMPDIN

JCINITDS1820OUT

DJNZR6,LOOP1820

MOVR6,#64H

DJNZR6,$

SJMPINITDS1820

RET

;

INITDS1820OUT:

SETBTEMPDIN

RET

;

;

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

;读DS18B20的程序,从DS18B20中读出一个字节的数据

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

READDS1820:

MOVR7,#08H

SETBTEMPDIN

NOP

NOP

READDS1820LOOP:

CLRTEMPDIN

NOP

NOP

NOP

SETBTEMPDIN

MOVR6,#07H

DJNZR6,$

MOVC,TEMPDIN

MOVR6,#3CH

DJNZR6,$

RRCA

SETBTEMPDIN

DJNZR7,READDS1820LOOP

MOVR6,#3CH

DJNZR6,$

RET

;

;

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

;写DS1820的程序,从DS18B20中写一个字节的数据

WRITEDS1820:

MOVR7,#08H

SETBTEMPDIN

NOP

NOP

WRITEDS1820LOP:

CLRTEMPDIN

MOVR6,#07H

DJNZR6,$

RRCA

MOVTEMPDIN,C

MOVR6,#34H

DJNZR6,$

SETBTEMPDIN

DJNZR7,WRITEDS1820LOP

RET

;

;

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

;READTEMP

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

READTEMP:

LCALLINITDS1820

MOVA,#0CCH

LCALLWRITEDS1820

MOVR6,#34H

DJNZR6,$

MOVA,#44H

LCALLWRITEDS1820

MOVR6,#34H

DJNZR6,$

RET

;

READTEMP1:

LCALLINITDS1820

MOVA,#0CCH

LCALLWRITEDS1820

MOVR6,#34H

DJNZR6,$

MOVA,#0BEH

LCALLWRITEDS1820

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

当前位置:首页 > PPT模板 > 其它模板

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

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