寄生电源工作方式
采用寄生电源供电时,在远程温度测量和测量空间受限的情况下特别有价值。寄生电源供电的原理是在数据线为高电平的时候“窃取”数据线的电源,电荷被存储在寄生供电电容上,用于在数据线为低的时候为设备提供电源。需要注意的是,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<tl,则将该器件内的告警标志置位,并对主机发出的告警搜索命令作出响应。因此,可用多只ds18b20同时测量温度并进行告警搜索。[ size][="" font]
五、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 硬件连接和软件设计时也要给予一定的重视。