一、概述
传统的温度检测大多以热敏电阻为传感器,采用热敏电阻,可满足40℃至90℃测量范围,但热敏电阻可靠性差,测量温度准确率低,对于小于1℃的温度信号是不适用的,还得经过专门的接口电路转换成数字信号才能由微处理器进行处理。
目前常用的微机与外设之间进行的数据通信的串行总线主要有I2C总线,SPI总线等。其中I2C总线以同步串行2线方式进行通信(一条时钟线,一条数据线),SPI总线则以同步串行3线方式进行通信(一条时钟线,一条数据输入线,一条数据输出线)。这些总线至少需要两条或两条以上的信号线。而单总线( 1-wire bus ),采用单根信号线,既可传输数据,而且数据传输是双向的, CPU 只需一根端口线就能与诸多单总线器件通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。 因而,这种单总线技术具有线路简单,硬件开销少,成本低廉,软件设计简单,便于总线扩展和维护。同时,基于单总线技术能较好地解决传统识别器普遍存在的携带不便,易损坏,易受腐馈,易受电磁干扰等不足,因此,单总线具有广阔的应用前景,是值得关注的一个发展领域。
单总线即只有一根数据线,系统中的数据交换,控制都由这根线完成。主机或从机通过一个漏极开路或三态端口连至数据线,以允许设备在不发送数据时能够释放总线,而让其它设备使用总线。单总线通常要求外接一个约为 4.7K的上拉电阻,这样,当总线闲置时其状态为高电平。
DS18B20数字式温度传感器,与传统的热敏电阻有所不同的是,使用集成芯片,采用单总线技术,其能够有效的减小外界的干扰,提高测量的精度。同时,它可以直接将被测温度转化成串行数字信号供微机处理,接口简单, 使数据传输和处理简单化。 部分功能电路的集成,使总体硬件设计更简洁,能有效地降低成本,搭建电路和焊接电路时更快,调试也更方便简单化,这也就缩短了开发的周期 。
DS18B20单线数字温度传感器,即“一线器件”,其具有独特的优点:
( 1 )采用单总线的接口方式与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度测量,使用方便等优点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
( 2 )测量温度范围宽,测量精度高。DS18B20 的测量范围为-55℃ ~+125℃ ;在-10~+85℃ 范围内,精度为±0.5℃ 。
( 3 )在使用中不需要任何外围元器件即可实现测温。
( 4 )多点组网功能。多个DS18B20可以并联在惟一的三线上,实现多点测温。
( 5 )供电方式灵活。DS18B20可以通过内部寄生电路从数据线上获取电源。因此,当数据线上的时序满足一定的要求时,可以不接外电源,从而使系统结构更趋简单,可靠性更高。
( 6 )测量参数可配置。DS18B20的测量分辨率可通过程序设定9~12位。
( 7 ) 负压特性。电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。
( 8 )掉电保护功能。DS18B20内部含有EEPROM,在系统掉电以后,它仍可保存分辨率及报警温度的设定值。
DS18B20 具有体积更小、适用电压更宽、更经济、可选更小的封装方式,更宽的电压适用范围,适合于构建自己的经济的测温系统,因此也就被设计者们所青睐。
二、DS18B20测温原理
DS18B20 的内部测温电路框图
低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1,为计数器提供一频率稳定的计数脉冲。高温度系数晶振随温度变化其震荡频率明显改变,很敏感的振荡器,所产生的信号作为减法计数器2的脉冲输入,为计数器2提供一个频率随温度变化的计数脉冲。图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃ 所对应的基数分别置入减法计数器1和温度寄存器中,减法计数器 1 和温度寄存器被预置在-55℃ 所对应的一个基数值。减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,直至温度寄存器值达到被测温度值。
三、DS18B20 的管脚排列及封装图
DS18B20 实物管脚分布图
DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端,电源供电 3.0~5.5V (在寄生电源接线方式时接地)。
DS18B20的硬件接口非常简单。供电方式为计生电源供电或外部供电。
寄生电源工作方式
采用寄生电源供电时,在远程温度测量和测量空间受限的情况下特别有价值。寄生电源供电的原理是在数据线为高电平的时候“窃取”数据线的电源,电荷被存储在寄生供电电容上,用于在数据线为低的时候为设备提供电源。需要注意的是,DS18B20在进行温度转换或者将高速缓存里面的数据复制到EEPROM中时,所需的电流会达到1.5mA,超出了电容所能提供的电流,此时可采用一个MOSFET三极管来供电。
外接电源工作方式
当DS18B20采用外部供电时,只需将其数据线,与单片机的一位双向端口相连就可以实现数据的传递。
注意:当温度高于100℃ 时,不能使用寄生电源,因为此时器件中较大的漏电流会使总线不能可靠检测高低电平,从而导致数据传输误码率的增大。
四、DS18B20 内部结构
DS18B20的内部结构
DS18B20 内部结构如图所示,主要由四部分组成:64位光刻ROM 、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(地址: 28H )是产品类型标号,接着的 48 位是该 DS18B20 自身的序列号,并且每个 DS18B20 的序列号都不相同,因此它可以看作是该DS18B20 的地址序列码; 8 位则是前面 56 位的循环冗余校验码( CRC=X8+X5+X4+1 )。由于每一个DS18B20的ROM数据都各不相同,因此微控制器就可以通过单总线对多个 DS18B20 进行寻址,从而实现一根总线上挂接多个 DS18B20 的目的。
64B闪速ROM
DS18B20 中的温度传感器用于完成对温度的测量,它的测量精度可以配置成9位,10位,11位或12位四种状态。温度传感器在测量完成后将测量的结果存储在 DS18B20 的两个8BIT的RAM中,单片机可通过单线接口读到该数据,读取时低位在前,高位在后。数据的存储格式如下表(以 12 位转化为例):
温度信号寄存器格式
这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0 ,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。
例如:+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为 FC90H 。
DS18B20完成温度转换后,就把测得的温度值与TH,TL作比较,若T>TH或T
五、DS18B20 温度传感器的存储器
DS18B20 温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2RAM,后者存放高温度和低温度触发器TH 、TL和结构寄存器。数据先写入RAM,经校验后再传给 E2RAM 。
暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,个字节的内容是温度的低八位TL,第二个字节是温度的高八位TH。第三个和第四个字节是TH、TL的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每上电复位时被刷新。第六、七、八个字节用于内部计算。第九个字节是冗余检验字节,可用来保证通信正确。DS18B20的分布如下:
DS18B20 的暂存寄存器分布
在 64B ROM 的有效字节中存储有循环冗余校验码( CRC )。主机根据 ROM 的前 56 位来计算 CRC 值,并和存入 DS18B20 中的 CRC 值做比较,以判断主机收到的 ROM 数据是否正确。
1. 设置寄存器
该位于高速闪存的第5个字节,这个寄存器中的内容被用来确定测试模式和温度的转换精度。寄存器各位的内容如下:
DS18B20 的设置寄存器各位内容
该寄存器的低五位一直都是 1 , TM 是测试模式位,用于设置 DS18B20 在工作模式还是在测试模式。在 DS18B20 出厂时该位被设置为 0 ,用户不要去改动。 R1 和 R0 用来设置分辨率,如下表所示:( DS18B20 出厂时被设置为 12 位)
分辨率设置
由表可知,设定的分辨率越高,所需要的温度数据转换时间就越长。因此,在实际应用中要在分辨率和转换时间权衡考虑。
六、DS18B20 的温度测量
1-WIRE 网络具有严谨的控制结构,其结构如下图所示,一般通过双绞线与 1-WIRE 元件进行数据通信,它们通常被定义为漏极开路端点,主/从式多点结构,而且一般都在主机端接上一个上拉电阻 +5V 电源。通常为了给 1-WIRE 设备提供足够的电源,需要一个 MOSFET 管将 1-WIRE 总线上拉至 +5V 电源。
DS18B20 组成的 1-WIRE 网络
1-WIRE 网络通信协议是分时定义的,有严格的时隙概念,下图是复位脉冲的时隙。
1-WIRE 协议的复位脉冲时隙
1-WIRE 读写“ 0/ 1 ” 时隙
DS18B20 单线通信功能是分时完成的,他有严格的时隙概念,如果出现序列混乱, 1-WIRE 器件将不响应主机,因此读写时序很重要。系统对 DS18B20 的各种操作必须按协议进行。根据 DS18B20 的协议规定,微控制器控制 DS18B20 完成温度的转换必须经过以下 4 个步骤 :
(1)每次读写前对 DS18B20 进行复位初始化。复位要求主 CPU 将数据线下拉 500ms ,然后释放, DS18B20 收到信号后等待 16ms~60ms 左右,然后发出 60ms~240ms 的存在低脉冲,主 CPU 收到此信号后表示复位成功。
(2)发送一条 ROM 指令,如下表所示:
DS18B20 的ROM指令集
a. 读指令(33H):通过该命令可以读出ROM中8位系列产品代码、48位产品序列号和8位CRC码。
b. 选择定位指令(55H):多片DS18B20在线时,主机发出该命令和一个64位数列,DS18B20内部ROM与主机序列一致者,才能响应主机发送的寄存器操作指令,其它的DS18B20则等待复位。该指令也可用于单片DS18B20的情况。
c. 跳过ROM检测指令(CCH):若系统只用了一片DS18B20,该指令允许主机跳过ROM序列号检测而直接对寄存器操作,从而节省了时间。对于多片DS18B20测温系统,该指令将引起数据冲突。
d. 查询指令(F0H):该指令可以使主机查询到总线上有多少片DS18B20,以及各自的64位序列号。
e. 报警查询指令(ECH):该指令的操作过程同查询指令,但是仅当上次温度测量值已置为报警标志时,DS18B20才响应该指令。
(3)发送存储器指令,如下表所示:
DS18B20 的RAM指令集
a. 写入指令(4EH):该指令把数据依次写入高温报警触发器TH、低温报警触发器TL和配置寄存器。命令复位信号发出之前必须把这三个字节写完。
b. 写出指令(BEH):该指令可以读出寄存器中的内容,从第1字节开始,直到读完第9个字节,如果仅需要读取寄存器中的部分内容,主机可以在合适的时候发出复位指令以结束该过程。
c. 复制命令(48H):该指令把高速缓存器中第 2 ~ 4 字节转存到DS18B20的EEPROM中。命令发出后,主机发出读指令来读总线,如果转存正在进行时主机读总线结果为0,而转存结束则为1。
d. 开始转换指令(44H):DS18B20收到该指令后立即开始温度转换,不需要其他数据。此时DS18B20处于空闲状态,当温度转换正在进行时主机读总线结果为0,转换结束则为1.
e. 回调指令(B8H):该指令把EEPROM中的内容回调至寄存器TH、TL和配置寄存器单元中。命令发出后如果主机接着读总线,则读结果为0表示忙,为1表示回调结束。
f. 读电源标志命令(B4H):主机发出该指令后读总线,DS18B20将发送电源标志,0表示数据线供电,1表示外接电源。
(4)进行数据通信。
七、DS18B20 使用中注意事项
DS1820 虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题:
(1)每读写之前都要对 DS18B20 进行复位,复位成功后发送一条 ROM 指令,发送 RAM 指令,这样才能对 DS18B20 进行预定的操作。复位要求主 CPU 将数据线下拉 500 us,然后释放, DS18B20 收到信号后等待 16 ~60 us左右,后发出 60~240 us的存在低脉冲,主 CPU 收到此信号表示复位成功。(所有的读写时序至少需要 60us ,且每个独立的时序之间至少需要 1us 的恢复时间。在写时序时,主机将在下拉低总线 15us 之内释放总线,并向单总线器件写 1 ;若主机拉低总线后能保持至少 60us 的低电平,则向单总线器件写 0 。单总线仅在主机发出读写时序时才向主机传送数据,所以,当主机向单总线器件发出读数据指令后,必须马上产生读时序,以便单总线器件能传输数据。)
(2)在写数据时,写 0 时单总线至少被拉低 60us, 写 1 时 ,15us 内就得释放总线。
(3)转化后得到的 12 位数据,存储在 18B20 的两个 8 比特的 RAM 中,二进制中的前面 5 位是符号位,如果测得的温度大于 0 ,这 5 位为 0 ,只要将测到的数值乘于 0.0625 即可得到实际温度;如果温度小于 0 ,这 5 位为 1 ,测到的数值需要取反加 1 再乘于 0.0625 即可得到实际温度。
(4)较小的硬件开销需要相对复杂的软件进行补偿,由于 DS1820 与微处理器间采用串行数据传送,因此,在对 DS1820 进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。在使用 PL/M 、 C 等语言进行系统程序设计时,对 DS1820 操作部分采用汇编语言实现。
(5) 在 DS1820 的有关资料中均未提及单总线上所挂 DS1820 数量问题,容易使人误认为可以挂任意多个 DS1820 ,在实际应用中并非如此。当单总线上所挂 DS1820 超过 8 个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。
(6) 连接 DS1820 的总线电缆是有长度限制的。试验中,当采用普通信号电缆传输长度超过 50m 时,读取的测温数据将发生错误。当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达 150m ,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一步加长。这种情况主要是由总线分布电容使信号波形产生畸变造成的。因此,在用 DS1820 进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题。测温电缆线建议采用屏蔽 4 芯双绞线,其中一对线接地线与信号线,另一组接 VCC 和地线,屏蔽层在源端单点接地。
(7)在 DS1820 测温程序设计中,向 DS1820 发出温度转换命令后,程序总要等待 DS1820 的返回信号,一旦某个 DS1820 接触不好或断线,当程序读该 DS1820 时,将没有返回信号,程序进入死循环。这一点在进行 DS1820 硬件连接和软件设计时也要给予一定的重视。