DS18B20说明书.docx
《DS18B20说明书.docx》由会员分享,可在线阅读,更多相关《DS18B20说明书.docx(20页珍藏版)》请在冰豆网上搜索。
![DS18B20说明书.docx](https://file1.bdocx.com/fileroot1/2023-4/20/57514e52-609a-46fe-b9eb-74768b368fda/57514e52-609a-46fe-b9eb-74768b368fda1.gif)
DS18B20说明书
附录1:
DS18B20型单线智能温度传感器简介
由美国DALLAS半导体公司生产的DSl8B20型单线智能温度传感器,属于新一代适配微处理器的智能温度传感器,可广泛用于工业、民用、军事等领域的温度测量及控制仪器、测控系统和大型设备中,例如多路温度测控仪、中央空调、大型冷库、恒温装置等。
此外巧妙利用DSl8B20内部64位激光ROM中具有惟一性的48位产品序号,还可设计成专供大型宾馆客房或军事仓库使用的保密性极佳的电子密码锁。
DSl8B20的电源电压范围均扩展到+3~+5.5V,DSl8B20还能对温度分辨力进行编程,选择9位~12位模式下工作,在12位模式下的最高分辨力可达0.0625℃。
下面介绍DSl8B20的性能特点和工作原理。
1.1DS18B20的性能特点
(1)DSl8B20采用DALLAS公司独特的“单线(1-Wire)总线”专有技术,通过串行通信接口(I/O)直接输出被测温度值(9位二进制数据,含符号位)。
(2)在测温范围是-55~+125℃时,测量误差不超过±2℃,在-10~+85℃范围内,可确保测量误差不超过±0.5℃。
温度/数字量转换时间的典型值仅需93.75ms,比DS1820有很大的提高.
(3)内含64位经过激光修正的只读存储器ROM,扣除8位产品系列号和8位循环冗余校验码CRC之后,产品序号占48位。
出厂前就作为DSl8B20惟一的产品序号,存入其ROM中。
在构成大型温控系统时,允许在单线总线上挂接多片DSl8B20。
(4)适配各种单片机或系统机。
(5)用户可分别设定各路温度的上、下限并写入随机存储器RAM中。
利用报警搜索命令和寻址功能,可迅速识别出发生了温度越限报警的器件。
(6)内含寄生电源。
该器件既可由单线总线供电,亦可选用外部+5V电源(允许电压范围是3.0~5.5V),进行温度/数字转换时的工作电流约为1.5mA,待机电流仅25uA,典型功耗为5mW。
1.2DS18B20的工作原理
DSl8B20的原理与DS1820的原理是一样的。
DS18B20继承了DS1820的所有优点。
DS18B20采用3脚PR—35封装或8脚SOIC封装,引脚排列如图1-1所示。
I/O为数据输入/输出端(即单线总线),它属于漏极开路输出,外接上拉电阻后,常态下呈高电平。
UDD是可供选用的外部+5V电源端,不用时需接地。
GND为地,NC为空脚。
其内部框图如图1-2所示。
主要包括7部分:
①寄生电源;②温度传感器;
64位激光(laser)ROM与单线接口;④高速暂存器,即便笺式RAM,用于存放中间数据;⑤TH触发寄存器和TL触发寄存器,分别用来存储用户设定的温度上、下限tH、tL值;⑥存储与控制逻辑;⑦8位循环冗余校验码(CRC)发生器。
下面分别介绍各部分的工作原理。
(a)(b)
图1-1DS1820/DS18B20的引脚排列
(a)PR—35封装(b)SOIC封装
图1-2DS18B20的内部框图
(1)寄生电源
寄生电源由二极管VD1、VD2和寄生电容C所组成。
电源检测电路用于判定供电方式并输出相应的逻辑电平(“0”表示用寄生电源供电,“1”表示由外部电源供电),以便高速暂存器能够读出数据和命令。
采用寄生电源供电时UDD端需接地,DSl8B20就从单线总线上获取电源。
当I/O线为高电平时VD1导通,VD2截止,除向DSl8B20供电外,还把部分电储存在C中。
当I/O线呈低电平时,VD1截止,改由C上的电压Uc继续向DSl8B20供电,该寄生电源有两个显著优点:
第一,检测远程温度时无须本地电源;第二,在缺少正常电源时也能读ROM。
使用寄生电源时应注意,在温度转换期间uP,应使I/O线保持高电平。
若使用外部电源UDD,就通过VD2向器件供电,此时VD1截止。
图1-3示出N片DSl8B20与80C31单片机的接线,R为上拉电阻,典型值可取5.1kΩ或4.7kΩ。
80C31(主CPU)和DS18B20所用的电源电压,分别用Ucc、UDD表示,下同。
现将8031单片机P1口中的P1.0端接单线总线,加总线驱动电源后,理论上总线最多可挂接248片DSl8B20。
80C31依次发出操作指令,各片DSl8B20即可在200~500ms之内完成温度转换。
图1-3多片DS1820(DS18B20)与80C31的接线
(2)测温电路原理
DSl8B20内部测温电路框图如图1-4所示。
低温度系数振荡器用于产生稳定的频率ƒ0,高温度系数振荡器则相当于T/ƒ转换器,能将被测温度t转换成频率信号ƒ0图中还隐含着计数门,当计数门打开时,DSl8B20就对低温度系数振荡器产生的时钟脉冲ƒ0进行计数,进而完成温度测量。
计数门的开启时间由高温度系数振荡器来决定。
每次测量前,首先将-55℃所对应的基数分别置入减法计数器、温度寄存器中。
在计数门关闭之前若计数器已减至零,温度寄存器中的数值就增加0.5℃。
然后,计数器依斜率累加器的状态置入新的数值,再对时钟计数,然后减至零,温度寄存器值又增加0.5℃。
只要计数门仍未关闭,就重复上述过程,直至温度寄存值达到被测温度值。
这就是DSl8B20的测温原理。
斜率累加器能对振荡器的非线性予以补偿,提高测量准确度。
需要指出,温度值本应为9位(其中,符号占一位),但因符号位又被扩展成高8位,故实际以16位补码的形式读出。
其中,高8位代表符号,“0”表示t>0℃,“1”表示t<0℃;低8位则以0.5℃/LSB(最低有效位)的形式表示温度值。
图1-4内部测温电路框图
表1—1温度—数据的对应关系
温度/℃
数字输出(二进制)
数字输出(十六进制)
+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
温度与数据的对应关系见表1—1。
欲测量华氏温度(0F),需进行下述换算:
t(0F)=9/5(0C)+32(1—1)
DS18B20中温度字节中的位定义
低八位
23
22
21
20
2-1
2-2
2-3
2-4
高八位
S
S
S
S
S
26
25
24
DSl8B20型单线智能温度传感器典型的测温误差曲线如图3-6所示。
由图可见,在0~70℃范围内,DSl8B20的上、下限测温误差分别为+0.5℃、-0.5℃,而典型产品的误差仅为±0.25℃。
(3)64位激光ROM
芯片内部有经过激光修正的ROM,内含64位ROM编码,包括产品系列号(高8位)、产品序号(中间48位)和CRC编码(低8位)。
编码格式如下:
8位产品系列号
48位产品列号
8位CRC编码
MSBLSBMSBLSBMSBLSB
(4)高速暂存器(简称暂存器)
它由便笺式RAM、非易失性电擦写E2RAM所组成,后者用来存储tH和tL
图1-5暂存器的操作命令流程图
值。
数据先写入RAM,经校验后再传给E2RAM。
便笺式RAM占9个字节,第0、1字节是测量出的温度信息,第2、3字节分别是tH、tL值,第4、5字节不用。
第6、7字节为计数寄存器,可用于提高温度分辨力。
第8字节用来存储上述8字节的循环冗余校验码。
详见表3—2。
暂存器的命令集见表3—3。
6条命令分别为温度转换、读暂存器、写暂存器、复制暂存器、
重新调出E2RAM、读电源供电方式。
暂存器的操作命令流程如图3-7所示。
表1—2暂存器的内容
便笺式RAM
字节
E2RAM
温度低字节
0
温度高字节
1
报警上限/用户定义字节1
2
报警上限/用户定义字节1
报警下限/用户定义字节2
3
报警下限/用户定义字节2
保留
4
保留
5
计数余数值
6
每度计数值
7
CRC
8
表1—3暂存器命令集
指令
说明
约定代码
发生约定代码后单线总线
温度转换
启动DSl8B20进行温度转换
44H
主CPU读DSl8B20的“忙状态”
读暂存器
读暂存器9个字节的内容
BEH
主CPU读9个字节的数据
写暂存器
将数据写入暂存器的TH和TL字节
4EH
主CPU给DSl8B20发出两个字节的数据
复制暂存器
把暂存器的TH、TL字节写入E2RAM中
48H
主CPU读DSl8B20的“忙状态”
重新调E2RAM
把E2RAM中的TH、'FL字节分别调入暂存器TH、TL字节
B8H
主CPU读DSl8B20的“忙状态”
读电源供电方式
启动DSl8B20发送电源供电方式的信号给主CPU
B4H
主CPU读DSl8B20的“电源状态”
(5)初始化
对DSl8B20的操作是首先进行初始化,然后执行ROM操作命令,再执行暂存器操作命令,最后完成数据处理。
(6)报警信号
在完成温度转换之后,DSl8B20就把测得的温度值,同tH、tL作比较。
若t>tH或t因此可用多片DSl8B20同时测量温度并进行报警搜索。
一旦某个测温点越限,主CPU用报警搜索命令即可识别正在报警的DSl8B20,并且读出其序号,而不必考虑其他未报警的DSl8B20。
(7)循环冗余校验码(CRC)的产生
在64位激光ROM的最低8位字节中存有CRC。
主CPU根据ROM的前56位来计算CRC值,并与存入DSl8B20中的CRC值进行比较,以判断主CPU接收到的ROM数据是否正确。
CRC的函数表达式为:
CRC=X8+X5+X3+1(3—2)
此外,DSl8B20尚需按照式(3—2)所规定的格式,为暂存器中的数据产生一个8位CRC,送给主CPU,以确保暂存器的数据传送无误。
1.3DS18B20与主CPU的电路接法
单线总线是一种具有一个总线主机(亦称主CPU)和一个或多个从机(从属器件)的系统,DSl8B20起从机的作用。
根据定义,单线总线只有一根线,这意味着总线上的每个器件只能分时驱动单线总线,并要求每个器件必须具有漏极开路输出或三态输出的特性。
DSl8B20的单线接口I/O端就属于漏极开路输出。
DSl8B20与主CPU的电路接法如图3.8所示,TX、RX分别表示发送与接收。
在单线总线上必须接上拉电阻,其电阻值约为5KΩ(标称值可取5.1kΩ或4.7kΩ)。
当单线总线上挂有多个从属器件时,亦称之为多点总线。
图1-6DSl8B20与主CPU的电路接法
单线总线在空闲状态下呈高电平。
操作单线总线时,必须从空闲状态开始。
单线总线加低电子的时间超过480us时,总线上所有的器件均被复位。
在主CPU发出复位脉冲之后,从属器件就发出应答脉冲(PRESENCEPULSE),来通知主CPU它已做好了接收数据和命令的准备工作。
下图3-8DSl8B20与主CPU的电路接法。
1.4单线总线系统的通信协议
单线总线是一种具有一个总线主机(亦称主CPU)和一个或多个从机(从属器件)的系统,DSl820起从机的作用。
下面介绍单线总线的通信协议。
1、主CPU访问DSl820的工作流程
主CPU经过单线接口访问DSl820的工作流程为:
对DSl820进行初始化→ROM操作命令→存储器(包括便笺式RAM和E2RAM)操作命令一数据处理。
主CPU对ROM操作完毕,即发出控制操作命令,使DSl820完成温度测量并将测量结果存入高速暂存器中,然后读出此结果。
2、初始化
单线总线上的所有处理过程均从初始化开始。
初始化包括首先由主CPU发出一个复位脉冲,然后由从属器件发出应答脉冲,通知主CPU。
初始化时主CPU首先发出一个复位信号,将单线总线上所有DSl820复位;然后释放单线总线,改成接收状态,单线总线被上拉电阻只拉成高电平。
在检测到此上升沿后,DSl820需要等待15~60μs才向主CPU发出响应脉冲。
初始化过程的时序波形
如图4-1所示。
此后便可对ROM、RAM进行操作。
图1-7初始化过程的时序波形
3、对ROM的5种操作命令
—旦主CPU检测到从属器件的存在,就可以发出ROM操作命令。
所有ROM操作命令均为8位(二进制)字长。
主CPU对ROM的操作命令有以下5种:
(1)读ROM命令(READROM,约定代码为33H)。
该命令允许主CPU读取DSl820中的8位产品系列编码、48位序列号以及8位的CRC。
该命令适用于总线上只接一片DSl820的情况。
当总线上挂有多片DSl820时禁止使用该命令,否则多片DSl820同时发送数据,必然会导致互相冲突。
(2)符合ROM命令(MATCHROM,约定代码为55H)。
主CPU在发出“符合”ROM命令后,接着送出64位的ROM数据序列,从而使主CPU实对单线总线上特定DSl820的寻址。
只有与64位ROM序列严格相符的DSl820,才能对后续的存储器操作命令做出响应。
所有与64位ROM序列不相符的DSl820将等待复位脉冲。
该命令对于总线上挂有单个或多个器件的情况均适用。
(3)搜索ROM命令(SEARCHROM,约定代码为F0H)。
搜索ROM命令允许主CPU使用一种“消除法”(ELMINATION)来识别总线上所有DSl820的64位ROM编码,即完成整个系统的初始化工作。
为以后对各个单线器件的操作做好准备。
该部分也是对DSl820芯片进行软件编程的重点和难点之一。
(4)跳过ROM命令(SKIPROM,约定代码为CCH)。
在单线总线系统中,该命令使主CPU不必提供64位ROM编码就能访问各片DSl820。
该命令主要用于向所有的DSl820同时发出温度转换命令,从而大大节省访问各个器件的时间。
但有一点必须注意,主CPU如果在发出SKIPROM命令之后,又发出了读存储器命令,那么由于多片DSl820同时向总线上捉供数据且在漏极开路状态下产生“线与”的结果,此时读出的数据已经没有实际意义
了。
(5)报警搜索命令(ALARMSEARCH,约定代码为ECH)。
该命令的流程与搜索ROM命令的流程相同。
仅在最近一次温度测量出现报警的情况下,DSl820才对该命令做出响应。
报警的条件定义为温度超过上限(t>tH),或者低于下限(t上电时,IJSl820预置报警条件为设置状态,直到首次温度测量结果既不超过tH,也不低于tL时,报警信号才被解除。
此次设计只需用到CCH命令。
如下图4-2所示。
图1-8跳过ROM的操作流程图
4、DS1820的通信协议
DSl820有严格的通信协议来保证各位数据传输的正确性和完整性。
通信协议规定了复位脉冲、应答脉冲、写0、写1、读0和读1等几种信号的时序。
除了应答脉冲,其余信号均由主CPU控制。
在对DSl820进行ROM及RAM操作之前,主CPU首先发出一个复位脉冲(最小脉冲宽度为480μs的低电平信号);然后主CPU便释放单线总线(I/O线),使之处于接收状态。
单线总线经过上拉电阻被拉至高电平。
当DSl820检测到I/O端的上升沿后,就等待15~60μs,再向主CPU发出应答脉冲(60~240μs的低电平信号)。
在初始化过程中,复位脉冲与应答脉冲的波形参见图4-1。
5、存储器操作命令
存储器操作命令共6条,具体如下:
(1)温度转换命令(CONVERTT){44H}。
令DSl820进行温度转换。
如果主CPU在该命令之后为读时序,那么只要DSl820正忙于进行温度转换,即读得“0”;当温度转换完成时,DSl820则返回“1”。
假如由寄生电源给DSl820供电,主CPU在发出该命令后立即将单线总线拉成高电平,并且保持500ms时间,以便在温度转换期间给DSl820提供所需要的电源。
(2)读暂存存储器(READSCRATCHPAD){BEH}。
该命令为读暂存存储器9个字节的内容。
从字节0开始读,直至读到字节8。
主CPU可以在读暂存存储器期间发出一个复位脉冲来终止读操作。
(3)写暂存存储器(WRITESCRATCHPAD){4EH}。
该命令发出后,主CPU送给DSl820的两个字节数据就分别写入丁H触发寄存器和Tl触发寄存器中,顺序是先写TH,后写TL。
主CPU也可以在写暂存存储器期间发出一个复位脉冲来终止写操作。
(4)复制暂存存储器(COPYSCRATCHPAD){48H}。
该命令把触发寄存器中的TH、TL字节分别复制到E2RAM的TH、TL字节上。
若主CPU发出该命令后又进行读操作,只要DSl820正忙于复制,主CPU就读得“0”;当复制工作完成后,DSl820又返回“1”。
如果由寄生电源供电,主CPU在发出该命令后就把单线总线拉到高电平,并保持10ms。
(5)重新调出E22RAM(RECALLE2RAM){B8H}。
该命令是把存储在E2RAM温度触发器TH、TL内的数据重新调入暂存存储器的TH、TL字节。
每次DSl820上电时也自动进行这种操作。
因此,只要器件接通电源,暂存存储器的TH和TL中已经有有效的数据供使用。
若主CPU在发出该命令之后又进行读操作,只要DSl820正忙于进行调出,主CPU就读得“0”(表示“忙碌”);完成调出操作后DSl820即返回“1”(表示“操作完毕”)。
(6)读电源(READPOWERSUPPLY){B4H}。
此项命令发送给DSl820之后,对主CPU发出的每一条读命令,DSl820都向主CPU提供电源方式信号“0”(表示由寄生电源供电)或者“1”(表示由外部电源供电)。
6、读/写时序
主CPU通过时序(亦称作“时间片”)来写入或读出DSl820中的数据。
时序用于传输数据位和指定进行何种操作的命令字。
(1)写时序。
主CPU把I/O线(即单线总线,亦称数据线)从高电平拉至低电平时,作为一个写周期的开始。
写时序包括两种类型:
写1时序,写0时序。
写1或写0时序时必须保持至少60μs,在两个写周期之间至少要有1μs的恢复期。
DSl820在I/O线变为低电平后的15~60μs的时间内进行采样。
若I/O线为高电平,即认为写入了一位1;若I/O线为低电平,即认为写入了一位0。
写时序的波形如图4-3a所示。
主CPU在开始写1周期时,必须将I/O线拉至低电平,然后再释放,15μs内将I/O线拉成高电平。
主CPU在开始写0周期时,也应将I/O线拉至低电平,并保持60μs的时间。
图1-9读/写时序波形图
(a)写时序(b)读时序
(2)读时序。
当主CPU将I/O线从高电平拉成低电平时,就作为一个读周期的开始,并且I/O线保持低电平的时间至少为1μs。
DSl820的输出数据在读时序下降沿过后的15μs内有效。
在此期间,主CPU应释放I/O线,使之处于输入状态以便读取数据。
经过15μs后读时序结束,I/O线经外部上拉电阻又变成高电平。
读取一位数据至少需要60μs时间,并且在两位数据之间至少要有1μs的恢复期。
读时序的波形如图4-3b所示。
令初始化时间为TINIT,电路的时间常数为TRC。
主CPU的采样时间为TSAMPLE,高电平的闽值电压为UIH。
在如图4-4所示主CPU读一位数据的波形中,要求TINIT+TRC+TSAMPLE<15μs。
经过改进后,主CPU读一位数据的波形如图4-5所示,采用尽量缩短TINIT、TRC的周期并把主CPU采样期安排到末尾的方法,可以使总线有更充裕的稳定时间。
7、读/写时间片
DSl820的读/写时间片如图1-9所示。
这里讲的“时间片”(timeslot)亦称时间间隙,简称时隙。
该图对其他类型的单线智能温度传感器也适用。
图中,tSLOT代表时间片,TREC为恢复时间。
TLOW0、tLOWl分别表示在写0、写1时单线总线保持低电平的时间。
tRDV为读数据有效时间。
tRSTL为复位信号的低电平时间。
tPDHIGH、tPDLOW分别表示应答信号的高、低电平时间。
图1-10读一位数据的波形图
图1-11改进后一位数据的波形图
8、复位子程序的编写
图1-12复位子程序
复位子程序的编写:
CLRP3.3
LCALLYS600μs
SETBP3.3
LCALLYS20μs
RET
9、写一字节子程序
写一字节就是要对DS1820连续写入8位数据,写1位数据已经在前节
中作了详细的介绍,这里不再论述。
图1-13为写字节的流程图。
在编写程序时,首先把要写入的字节送入A中,然后执行以下程序:
图1-13写一字节的流程图
WRZC:
MOVR0,#08H
WR0:
SETBP3.3
NOP
CLRP3.3
RRCA
JNCWR1
SETBP3.3
WR1:
MOVR1,#0DH
LCALLYS
DJNZR0,WR0
SETBP3.3
NOP
RET
10、读一字节子程序
读一字节也是在读一位数据的基础上进行的。
通过连续读出8位数据,得到一字节。
低位在前,入口R3的值为字节数,R2为每个字节8位,R0为存数首址。
图4-10为读一字节流程图。
读一字节程序的编写如下:
RDD:
MOVR0,#60H
RD0:
MOVR2,#08H
RD1:
CLRP3.3
NOP
MOVC,P3.3
RRCA
MOVR1,#0EH
LCALLYS
DJNZR2,RD1
MOV@R0,A
INCR0
DJNZR3,RD0
RET
图4-10读一字节流程图