引言:通过本文可以了解DS18B20温度传感器工作原理、硬件设计、DS18B20单总线接口驱动编写。
1. 概述
DS18B20是常用的数字温度传感器,其输出的是数字信号,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。
DS18B20数字温度传感器接线方便,经封装成后可应用于多种场合,如电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。具有耐磨耐碰,体积小,使用方便,封装形式多样等特点,适用于各种狭小空间设备数字测温和控制领域。
2.原理学习
2.1 芯片概述
DS18B20数字温度计提供9到12bit分辨率的温度测量,可以通过可编程非易失性存储单元实现温度的下限和上限报警。DS18B20采用单总线协议与上位机进行通信,只需要一根信号线和一根地线。它的温度测量范围为-55℃~ +125℃(-67°F to +257°F)。在-10℃~70℃范围内的测试精度可以达到±0.5℃。此外它还可以工作在寄生模式下,直接通过信号线对芯片供电,从而不需要额外的供电电源。每个DS18B20都有一个全球唯一的64位序列号,可以将多个DS18B20串联在同一跟单总线上进行组网,只需要一个处理器就可以控制分布在大面积区域中的多颗DS18B20。这种组网方式特别适合HVAC环境控制,建筑、设备、粮情测温和工业测温以及过程监测控制等应用领域。
2.2 管脚描述
图2:常见封装管脚定义
DS18B20管脚描述如下表所示。
表1:DS18B20管脚描述
2.3 芯片内部结构
图3:DS18B20内部结构
2.4 硬件设计
DS18B20可以通过管脚VDD外部电源供电,也可以工作于寄生电源模式。
(1)寄生电源模式硬件设计
如图所示,当总线处于高电平状态,DQ与外部上拉电阻连接通过单总线对器件供电。同时处于高电平状态的总线信号对内部电容(Cpp)充电(如图3所示),在总线处于低电平状态时,该电容提供能量给器件,该提供能量的方式成为“寄生电源”。当DS18B20处于寄生电源模式时,VDD管脚必须接地。
寄生电源模式下,单总线和CPP在大部分操作中能够提供充分的满足规定时序和电压的电流(见直流电特性和交流电特性节)给DS18B20。然而,当DS18B20正在执行温度转换或从寄存器向EEPROM传送数据时,工作电流可高达1.5mA。这个电流可能会引起连接在单总线上的弱上拉电阻不可接受的压降,这需要更大的电流,而此时CPP无法提供。为了保证DS18B20有充足的供电,当进行温度转换或复制数据到EEPORM操作时,必须给单总线提供一个强上拉,采用MOSFET直接把总线上拉到电源上的方式实现,如图4所示。
图4:温度转换器件寄生电源模式硬件设计
(2)外部供电模式硬件设计
对DS18B20供电的另外一种方法是传统的从VDD管脚接入一个外部电源,如图5所示。这样做的好处是单总线上不需要强上拉,而且总线不用在温度转换期间总保持高电平。
图5:使用外部电源供电硬件设计
寄生电源模式在远距离测试或空间受限的应用场合是非常有用的。
对于温度高于100℃时,不推荐使用寄生电源,因为DS18B20在这种温度下表现出的漏电流比较大,通信可能无法进行。在类似这种温度的情况下,强烈推荐使用DS18B20的VDD管脚供电。
2.5 寄存器详解
(1) 64bit只读寄存器
图6:64bit ROM编码
每颗DS18B20都有一个全球唯一的存储在ROM中的64位编码。最低8bit是单线系列编码:28h。接着的48位是一个唯一的序列号。最后高8bit是低56bit编码的CRC编码。CRC的详细解释见CRC发生器节。64位ROM和ROM操作控制区允许DS18B20作为单总线器件并按照详述于单总线系统节的单总线协议工作。
(2)存储器结构
DS18B20的存储器结构如图7所示。
图7:DS18B20的存储器结构
(1)byte0和byte1:分别为温度寄存器的LSB和MSB,这两个字节的存储器为只读存储器;
这个两个字节寄存器用来存储温度传感器输出的数据,寄存器格式如图8所示。
图8:温度寄存器格式
温度与数据数据格式对应关系如图9所示。"S"bit表示温度符号位,上电复位时,温度寄存器默认值为+85℃。
图9:温度/数据关系
(2)byte2和byte3:是TH和TL,注意当报警功能不能使用时,TH和TL寄存器可以被当作普通寄存器使用。TH,TL和配置寄存器均为非易失性的可擦除寄存器(EEPROM),该存储的数据在器件掉电后不会消失。
图10:TH,TL寄存器格式
(3)byte4:配置寄存器。
配置寄存器允许用户将温度测量分辨率设定为9,10,11或12位,对应的温度分辨率分别为0.5℃、0.25℃、0.125℃和0.0625℃,芯片在上电状态下默认的精度为12位。
配置寄存器的bit7和bit0到bit4被器件保留,禁止写入;在读数据时,它们全部表现为逻辑1。
图11:配置寄存器格式
表2:传感器精度配置表
(4)byte5:被器件保留,禁止写入。
(5)byte6和byte7:用户可以使用;
(6)byte8:只读,包含以上八个字节的CRC码。
2.6 DS18B20操作流程
通过单总线访问DS18B20的执行步骤如下:
步骤1:初始化;
步骤2:ROM操作指令;
步骤3:DS18B20功能指令。每一次DS18B20的操作都必须满足以上步骤,若是缺少步骤或是顺序混乱,器件将不会有返回值。搜索ROM命令和报警搜索命令除外。当这两个命令执行时,主控制器必须返回步骤1。
2.7 单总线协议详解
DS18B20采用单总线协议,通过一个单线端口通信。DS18B20需要严格的单总线协议以确保数据的完整性。协议定义了几种单总线信号的类型:复位脉冲、存在脉冲、写0、写1、读0和读1。所有这些信号,除存在脉冲外,都是由总线控制器发出的。
(1)初始化:复位脉冲和存在脉冲
所有和DS18B20间的通信都以初始化序列开始,初始化序列如图12所示。一个复位脉冲跟着一个存在脉冲表明DS18B20已经准备好发送和接收数据。
图 12:初始化时序
如图所示,初始化包括两个阶段:
①复位脉冲阶段:总线控制器拉低总线并保持480us以发出(TX)一个复位脉冲信号,然后释放总线;
②检测存在脉冲阶段:当总线被释放后,进入接收状态(RX)。上拉电阻将总线拉到高电平。当DS18B20检测到IO引脚上的上升沿后,等待15~60us,然后发出一个由60~240us低电平信号构成的存在脉冲。
(2)写时序
DS18B20有两种写时序:写1时序和写0时序。总线控制器通过写1时序来写逻辑1;通过写0时序来写逻辑0。写时序必须最少持续60us,包括两个写周期之间至少1us的恢复时间。当总线控制器把数据线从逻辑高电平拉低到低电平的时候,写时序开始(见图13)。
图 13:写时序
总线控制器要写产生一个写时序,必须把数据线拉到低电平然后释放,且需在15us内释放总线。当总线被释放后,上拉电阻将总线拉高。总线控制器要生成写0时隙,必须把数据线拉到低电平且继续保持至少60us。
总线控制器初始化写时序后,DS18B20在一个15us到60us的窗口内对信号线DQ进行采样。如果线上是高电平,就是写1。反之,如果线上是低电平,就是写0。
(3)读时序
总线控制器发起读时序时,DS18B20仅被用来传输数据给控制器。因此,总线控制器在发出读寄存器指令[BEh]或读电源模式指令[B4h]后必须立刻开始读时序,以便DS18B20提供请求的数据。除此之外,总线控制器在发出发送温度转换指令平[44h]或召回EEPROM指令[B8h]之后读时序,详见DS18B20功能指令节。
图 14:读时序
所有读时序必须最少60us,包括两个读周期间至少1us的恢复时间。当总线控制把数据线从高电平拉低到低电平时,读时序开始,数据线必须至少保持1us,然后总线被释放(见图14)。在总线控制器发出读时序后,DS18B20过拉高或拉低总线上来传输1或0。当传输0结束后,总线将被释放,通过上拉电阻回到高电平空闲状态。从DS18B20输出的数据在读时序的下降沿出现后15us内有效。因此,总线控制器在读时序开始15us内释放总线然后采样总线状态,以读取数据线的状态。
3.实战操作
3.1 软件设计
本文要利用LCD1602实现DS18B20温度及时间实时显示。具体功能如下:
(1)DS18B20单总线接口驱动功能;
(2)温度值HEX转BCD码功能;
(3)时钟计时器功能;
(4)LCD1602显示DS18B20实时温度及时间显示。软件功能模块划分如图15所示。
图15:软件功能模块框图
各个模块功能:
(1)ds18b20_test.v模块为顶层模块,实现模块间互联;(2)ds18b20_driver.v实现芯片单总线接口通信功能;
(3)hex_bcd.v实现温度值HEX转BCD码功能;
(4)clock_timer.v实现时钟计时器功能;
(5)lcd1602_driver.v实现DS18B20实时温度及时间显示。
DS18B20接口驱动ds18b20_driver.v软件实现流程图如图16所示。
图15:DS18B20温度读取控制流程图
3.2 测试结果
软件下载至电路板,显示在LCD1602上,如图11所示,可以看到DS18B20温度及时间已经正确显示。
图1:DS18B20温度及时间显示