1 DS18B20数字温度传感器
1.1 简述
DS18B20是美国DALLAS半导体公司生产的单总线数字温度传感器,其可直接将温度转化成数字信号输出。
DS18B20数字温度传感器提供9-Bit至12-Bit(可配置)温度读数和一个用户可编程的非易失性且具有高温和低温触发报警的报警功能。DS18B20采用1-Wire通信即仅采用一根数据线(DQ)与微控制器进行通信。该传感器的温度检测范围为-55℃至+125℃,在范围-10℃至+85℃之间具有±0.5℃的精 度。此外读取、写入和执行温度转换的电源可以从数据线本身获得,而不需要外部电源,当然使用外部电源供电也行。
DS18B20可以无需外部电源供电,当数据线DQ为高时由数据线为设备供电。当总线拉高时给内部电容(Cpp)充电 ,当总线拉低时由该电容给设备供电。这种由总线给设备供电的方式称为“寄生电源”。
1.2 DS18B20特性:
-
独特的1-Wire接口只需要一个端口引脚用于通信。
-
多路采集能力使得分布式温度采集应用更加简单。
-
无需外围器件。
-
可以采用数据线供电,供电范围为3.0V至5.5V。
-
温度可测量范围为:-55℃到+125℃(-67℉℉至+125℉℉)。
-
内部温度采集精度可以由用户自定义为9-Bit至12-Bit。
-
12Bit的温度采集精度转换时间最大为750ms。
-
用户可自定义非易失性的温度报警设置。
-
报警搜索命令识别并寻址温度超出编程限值的设备(温度报警条件)。
-
应用于温度控制、工业系统、民用产品、温度传感器或者任何温度检测系统中。
1.3 内部结构
内部的64位ROM存储着其独一无二的序列号。高速缓存器包含了存储有数字温度结果的2个字节宽度的温度寄存器。另外,高速缓存器还提供了一个字节的高温(TH)和一个字节的低温(TL)温度报警寄存器和一个字节的配置寄存器。 配置寄存器允许用户自定义温度转换精度(9位,10位,11位,12位)。高温和低温温度报警器寄存是非易失性的(EEPROM),其可以在断电的情况下保存。
1.4 温度测量
其温度转换可由用户自定义为9、10、11、12位,精度分别为0.5℃、0.25℃、0.125℃、0.0625℃分辨率,若不设置则默认为12位的转换精度。若要测量温度,主设备必须向DS18B20发送温度转换命令[44h]才能开始温度转换。温度转换后,转换的温度值将会保存在高速缓存器的温度寄存器中。只有通过读高速缓存器命令[BEh]才能将数据读出,数据通过1-Wire总线传输,传输顺序为低位到高位依次传输。温度数据中包含“符号”(S)位,表示温度的正负。
温度以一个16位标志扩展二进制补码的形式存储在温度寄存器中。符号标志位(S)温度的正负极性:若S=0,则为正数;若S=1,则为负数。如果DS18B20被定义为12位的转换精度,温度寄存器中所有位都将包含有效数据。若定义为11位转换精度,则bit 0(最低位)为未定义的。若定义为10位转换精度,则bit 0和bit 1为未定义的。若定义9位转换精度,则bit 0、bit 1和bit 2为未定义的。下表为在12位转换精度下温度输出数据与相对应温度之间的关系。
温度是以二进制补码的形式存储在温度寄存器中,所以我们需要先求出其原码再去计算温度值。正数的原码反码补码都是一样的,而负数的补码就是对反码加一。当输出温度为正数时输出二进制转换为十进制数后乘以其精度即为其温度值。如:+125℃的十进制(通过二进制转得)输出为2000,乘以精度为:2000*0. 0625=125;+10.125十进制值为162,乘以精度为:162*0.0625=10.125 。当温度为负数时,需先求得其原码(补码取反加一即为其原码,和原码求补码是一样的),这里需要特别说明的是符号位只代表数据的正负,无论是取反还是求值它都是不算在里面的。如:-25.0625的二进制输出原码为1111 1001 1001 0001,其十进制数值为-401,乘以精度为:-401*0.0625=-20.0625 。同理其他温度值也可用该方法求得。另外上电复位时寄存器中的初始值为+85℃。
1.5 配置寄存器
高速缓存器中第四个字节即为配置寄存器;如图所示。用户通过改变R1和R0的值来配置DS18B20的分辨率。上电默认为R1=1以及R0=1(12位分辨率)。需要注意的是转换时间与分辨率时间是有关系的,如表格所示。另外寄存器中最高位和低5位作为内部使用而保留使用,不可被写入。
1.6 DS18B20实现温度转换
1.6.1 ROM命令
当初始化完成之后,就可以执行ROM命令。这些命令是对每个设备的64位ROM编码进行操作的,当总线上连接有多个设备时,可以通过这些命令识别各个设备。总共包含有5种ROM命令,每个命令的长度都是8bit。
-
搜索ROM[F0h]
当系统上电初始化后,主设备可识别该总线上所有的从设