DS18B20 温度传感器的存储器DS18B20 温度传感器的内部存储器包括一个高速暂存 RAM 和一个非易失性的可电擦除的 E2RAM, 后者存放高温度和低温度触发器 TH 、 TL 和结构寄存器。数据先写入 RAM ,经校验后再传给 E2RAM 。
暂存存储器包含了 8 个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位 TL ,第二个字节是温度的高八位 TH 。第三个和第四个字节是 TH 、 TL 的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上
电复位时被刷新。第六、七、八个字节用于内部计算。第九个字节是冗余检验字节,可用来保证通信正确。 DS18B20 的分布如下:
寄存器内容 地址
温度的低八位数据 0
温度的高八位数据 1
高温阀值 2
低温阀值 3
保留 4
保留 5
计数剩余值 6
每度计数值 7
CRC 校验 8
DS18B20 的暂存寄存器分布
在 b ROM 的最高有效字节中存储有循环冗余校验码(CRC )。主机根据 ROM
的前 56 位来计算 CRC 值,并和存入 DS18B20 中的 CRC 值做比较,以判断主机收到的 ROM 数据是否正确。
设置寄存器
设置寄存器位于高速闪存的低5个字节,这个寄存器中的内容被用来确定温度的转换精度。寄存器各位的内容如下:
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
TM R1 R0 1 1 1 1 1
DS18B20 的设置寄存器各位内容
该寄存器的低五位一直都是 1 , TM 是测试模式位,用于设置 DS18B20 在工作模式还是在测试模式。在 DS18B20 出厂时该位被设置为 0 ,用户不要去改动。 R1 和 R0 用来设置分辨率,如下表所示:( DS18B20 出厂时被设置为 12 位)
R1 R0 分辨率 温度最大转换时间
0 0 9 位 93.75 ms
0 1 10 位 187.5 ms
1 0 11 位 375 ms
0 0 12 位 750 ms
分辨率设置
由表可知,设定的分辨率越高,所需要的温度数据转换时间就越长。因此,在实际应用中要在分辨率和转换时间权衡考虑。
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 指令,如下表所示:
指令名称 指令代码 指令功能
读 ROM 33H 读 DS18B20ROM 中的编码(即读 位地址)
ROM 匹配(符合 ROM ) 55H 发出此命令之后,接着发出 位 ROM 编码,访问单总线上与编码相对应 DS18B20 使之作出响应,为下一步对该 DS18B20 的读写作准备
搜索 ROM 0F0H 用于确定挂接在同一总线上 DS18B20 的个数和识别 位 ROM 地址,为操作各器件作好准备
跳过 ROM 0CCH 忽略 位 ROM 地址,直接向 DS18B20 发温度变换命令,适用于单片机工作
警报搜索 0ECH 该指令执行后,只有温度超过设定值上限或下限的片子才做出响应
DS18B20 的 ROM 指令集
(3)发送存储器指令,如下表所示:
指令名称 指令代码 指令功能
温度变换 44H 启动 DS18B20 进行温度转换,转换时间最长为 500ms (典型为 200ms ),结果存入内部 9 字节 RAM 中
读暂存器 0BEH 读内部 RAM 中 9 字节的内容
写暂存器 4EH 发出向内部 RAM 的第 3 , 4 字节写上,下限温度数据命令,紧跟该命令之后,是传送两字节的数据
复制暂存器 48H 将 RAM 中第 3 , 4 字节的内容复制到 EEPROM 中
重调 EEPROM 0B8H EEPROM 中的内容恢复到 RAM 中的第 3 , 4 字节
读供电方式 0B4H 读 DS18B20 的供电模式,寄生供电时 DS18B20 发送“ 0 ”,外接电源供电 DS18B20 发送“ 1 ”
DS18B20 的存储器指令集
(4)进行数据通信。
DS18B20 使用中注意事项
DS1820 虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题:
( 1 )每一次读写之前都要对 DS18B20 进行复位,复位成功后发送一条 ROM 指令,最后发送 RAM 指令,这样才能对 DS18B20 进行预定的操作。复位要求主 CPU 将数据线下拉 500 微秒,然后释放, DS18B20 收到信号后等待 16 ~ 60 微秒左右,后发出 60 ~ 240 微秒的存在低脉冲,主 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 硬件连接和软件设计时也要给予一定的重视。
阅读:5 次
录入:admin
参考链接:http://www.picavr.com/news/2011-02/2476.htm