编辑: 笔墨随风 | 2016-07-07 |
5 - DS18B20 单线数字温度传感器 Email: [email protected] 另一种给 DS1820 供电的方法是从 VDD 引脚接入一个外部电源,见图 3.这样做的好处是 I/O 线上不需 要加强上拉,而且总线控制器不用在温度转换期间总保持高电平.这样在转换期间可以允许在单线总线上 进行其他数据往来.另外,在单线总线上可以挂任意多片 DS1820,而且如果它们都使用外部电源的话,就 可以先发一个 Skip ROM 命令,再接一个 Convert T 命令,让它们同时进行温度转换.注意当加上外部电源 时,GND 引脚不能悬空. 温度高于 100℃时,不推荐使用寄生电源,因为 DS1820 在这种温度下表现出的漏电流比较大,通讯可 能无法进行.在类似这种温度的情况下,强烈推荐使用 DS1820 的VDD 引脚. 对于总线控制器不知道总线上的 DS1820 是用寄生电源还是用外部电源的情况, DS1820 预备了一种信号 指示电源的使用意图.总线控制器发出一个 Skip ROM 协议,然后发出读电源命令,这条命令发出后,控制 器发出读时间隙,如果是寄生电源,DS1820 在单线总线上发回
0 ,如果是从 VDD 供电,则发回
1 , 这样总线控制器就能够决定总线上是否有 DS1820 需要强上拉.如果控制器接收到一个
0 ,它就知道必 须在温度转换期间给 I/O 线提供强上拉.这个命令协议详见 存储器操作命令 节. 测温操作 DS1820 通过一种片上温度测量技术来测量温度.图4示出了温度测量电路的方框图. 温度/数据关系(表1) -
6 - DS18B20 单线数字温度传感器 Email: [email protected] 温度℃ 数据输出(二进制) 数据输出(十六进制) +125
00000000 11111010 00FA +25
00000000 00110010
0032 +1/2
00000000 00000001
0001 0
00000000 00000000
0000 -1/2
11111111 11111111 FFFF -25
11111111 11001110 FFCE -55
11111111 10010010 FF92 DS1820 是这样测温的:用一个高温度系数的振荡器确定一个门周期,内部计数器在这个门周期内对一 个低温度系数的振荡器的脉冲进行计数来得到温度值.计数器被预置到对应于-55℃的一个值.如果计数器 在门周期结束前到达 0,则温度寄存器(同样被预置到-55℃)的值增加,表明所测温度大于-55℃. 同时,计数器被复位到一个值,这个值由斜坡式累加器电路确定,斜坡式累加器电路用来补偿感温振 荡器的抛物线特性.然后计数器又开始计数直到 0,如果门周期仍未结束,将重复这一过程. 斜坡式累加器用来补偿感温振荡器的非线性,以期在测温时获得比较高的分辨力.这是通过改变计数 器对温度每增加一度所需计数的的值来实现的.因此,要想获得所需的分辨力,必须同时知道在给定温度 下计数器的值和每一度的计数值. DS1820 内部对此计算的结果可提供 0.5℃的分辨力.温度以 16bit 带符号位扩展的二进制补码形式读 出, 表1给出了温度值和输出数据的关系. 数据通过单线接口以串行方式传输. DS1820 测温范围-55℃~+125 ℃,以0.5℃递增.如用于华氏温度,必须要用一个转换因子查找表. 注意 DS1820 内温度表示值为 1/2℃LSB,如下所示 9bit 格式: 最高有效(符号)位被复制充满存储器中两字节温度寄存器的高 MSB 位,由这种 符号位扩展 产生 出了示于表
1 的16bit 温度读数. 可用下述方法获得更高的分辨力.首先,读取温度值,将0.5℃位(LSB)从读取的值中截去,这个值 叫做 TEMP_READ.然后读取计数器中剩余的值,这个值是门周期结束后保留下来的值(COUNT_REMAIN).最后,我们用到在这个温度下每度的计数值(COUNT_PER_C).用户可以用下面的公式计算实际温度值: 报警搜索操作 DS1820 完成一次温度转换后,就拿温度值和存储在 TH 和TL 中的值进行比较.因为这些寄存器是