首页 理论教育探究温度传感器的使用及实验

探究温度传感器的使用及实验

【摘要】:掌握单片机对温度传感器DS18B20进行读、写控制的方法。图7-49温度传感器项目的电路原理图Step1.定义形位公差。正是由于具有以上特点,DS18B20在解决各种误差、可靠性和实现系统优化等方面与传统各种温度传感器相比,有着无可比拟的优越性,因而广泛应用于过程控制、环境控制、建筑物和机器设备中的温度检测等领域。温度传感器DS18B20的引脚排列和内部功能DS18B20全部传感元件及转换电路集成在形如一只三极管的集成电路内,如图7-52所示。

1.项目演示

项目演示步骤分别如图7-46、图7-47、图7-48所示。

图7-46 步骤1——当前环境温度值的显示

图7-47 步骤2——升高的温度值显示

图7-48 步骤3——制冷后的温度值显示

2.项目的设计

(1)了解温度传感器DS18B20的工作原理。

(2)掌握一线制总线的通信方式及原理。

(3)掌握单片机对温度传感器DS18B20进行读、写控制的方法。

(4)对照温度传感器DS18B20的数据手册,理解对其进行读和写的软件编制方法。

3.项目的任务

温度传感器项目的电路原理图如图7-49所示。温度传感器DS18B20与单片机STC89C52RC之间的数据读写采用了一线制总线方式,STC89C52RC本身不包含一线制总线通信控制器的功能,为了与具有一线制总线通信功能的DS18B20进行数据交换,STC89C52RC必须利用自身的1根I/O线(这里是P17引脚),作为一线制的通信信号线,利用软件模拟产生一线制通信协议规定的传输数据信号,以完成与DS18B20之间的数据交换。

本项目应完成以下程序设计:通过C51嵌入式软件对DS18B20进行初始化及当前温度的读取,并将读取的温度值在7段LED数码管和1602液晶显示器上进行实时显示。

4.系统板上硬件连线

PMY单片机开发板上温度传感器项目的连接插线设置如图7-50所示。

图7-49 温度传感器项目的电路原理图

图7-50 单片机开发板上温度传感器项目的连接插线设置

5.程序流程图

程序流程图如图7-51所示。

图7-51 温度传感器项目的程序流程图

6.系统构成和程序分析

(1)温度传感器DS18B20的概述

DS18B20是美国DALLAS半导体器件公司在其前代产品DS18B20的基础上推出的单线数字化智能集成温度传感器,其特点是:

独特的单线接口,只需1个引脚即可通信;不需要额外的外部元件搭建外围电路即可正常运行;可用数据线供电,不需备份电源;测量范围为-55℃~+125℃,增量值为0.5℃,等效的华氏温度范围是-67℉~257℉,增量值为0.9℉;以9~12位数字值方式读出温度;在1s典型值内把温度变换为数字;用户可定义的非易失性的温度告警设置。

主要的优点是:

①DS18B20可将被测温度直接转换成计算机能识别的数字信号输出。传统温度传感器的温度值转换需要先经电桥电路获取电压模拟量,再经信号放大和A/D转换成数字信号,其缺点是在更换传感器时,会因放大器出现零点漂移而必须对电路进行重新调试,以克服这种参数的不一致性。由于DS18B20为数字式器件,不存在这类问题,因此使用起来非常方便。

②DS18B20能提供9~12位温度读数,精度高且其信息传输只需1根信号线,与计算机接口十分简便,读写及温度变换的功率全部来自于数据线,因此不需额外的附加电源。

③每一个DS18B20都含有一个唯一的序列号,这样的设计是为了允许多个DS18B20连接到同一总线上,因此非常适合构建多点温度检测系统。

④负压特性。当DS18B20的电源极性接反时,它虽然不能正常工作,但也不会因发热而烧毁。正是由于具有以上特点,DS18B20在解决各种误差、可靠性和实现系统优化等方面与传统各种温度传感器相比,有着无可比拟的优越性,因而广泛应用于过程控制、环境控制、建筑物和机器设备中的温度检测等领域。

(2)温度传感器DS18B20的引脚排列和内部功能

DS18B20全部传感元件及转换电路集成在形如一只三极管集成电路内,如图7-52所示。三端口分别是地线、数据线和电源线,其外围电路非常简单。每一个DS18B20有唯一的序列号,多个DS18B20可以存在于同一条单线总线上。

图7-52 DS18B20

DS18B20的测温范围为-55℃~+125℃,增量值为0.5℃(9位温度读数),其内部功能结构如图7-53所示。它主要由4个数据部件部分组成:64位ROM温度传感器、非易失性的温度告警触发器TH和TL及中间结果暂存器。其中,64位ROM用于存储序列号,其首字节固定为28H,表示产品类型码,接下来的6个字节是每个器件的编码,最后1个字节是CRC校验码。

图7-53 DS18B20的内部功能结构图

温度告警触发器TH和TL用于存储用户通过软件写入的报警上、下限值。中间结果暂存器由9个字节组成,其中有2个字节RAM单元用来存放温度值,前1个字节为温度值的补码低8位,后1个字节为符号位和温度值的补码高3位。

DS18B20通过使用在板(on-board)温度测量专利技术来测量温度,温度测量电路的方框图如图7-54所示,它是通过计数时钟周期来实现的。其中,低温度系数振荡器输出的时钟信号通过由高温度系数振荡器产生的门周期而被计数;计数器被预置在与-55℃相对应的一个基权值,如果计数器在高温度系数振荡周期结束前计数到零,表示测量的温度值高于-55℃,被预置于-55℃的温度寄存器的值就增加1℃,然后重复这个过程,直到高温度系数振荡周期结束为止。这时温度寄存器中的值就是被测温度值,这个值以16位形式存放在中间结果暂存器中,此温度值可由主器件通过发出存储器读命令而读出,读取时低位在前,高位在后;斜率累加器用于补偿温度振荡器的抛物线特性。

(3)温度传感器DS18B20的内部存储器分配

如图7-55所示为DS18B20的内部存储器分配示意图,它由一个中间结果暂存器RAM和一个非易失性电可擦除EEROM组成,后者存储高、低温度触发器TH和TL及程序设置字节。暂存存储器有助于在单线通信时确保数据的完整性,数据首先写入暂存存储器,在那里它可以被读回,当数据被校验之后,复制暂存存储器的命令把数据传送到非易失性EEROM。

图7-54 DS18B20温度测量电路方框图

图7-55 DS18B20内部存储器分配示意图

暂存存储器是按8位字节存储器来组织的,头两个字节包含测得的温度信息,第三、第四和第五个字节分别是TH、TL和程序设置字节的易失性拷贝,在每一次上电复位时被刷新;接着的3个字节没被使用,但是在读回时它们呈现为逻辑全1;第八个字节是冗余校验CRC字节,它是前面所有8个字节的CRC值。例如,图7-55所示的字节,头两个字节代表测得的温度读数,MSB中当S=1时表示温度为负,S=0时表示温度为正,其余低位以二进制补码形式表示,最低位为1时表示0.0625℃。规定TH中的有符号值必须大于TL中的有符号值,DS18B20的输出数据与温度的对应关系由表7-4给出。

程序设置寄存器主要是用来设置分辨率位数的,各位的意义:TM为测试模式位。TM=1表示测试模式,TM=0表示工作模式,出厂时该位设为0,且不可改变。R1、R0与温度分辨率有关。00表示9位,01表示10位,10表示11位,11表示12位。分辨率越高,则转换时间越长,12位分辨率的典型转换时间大约为750ms。

表7-4 DS18B20输出数据与温度的对应关系

(4)温度传感器DS18B20的寄生电源和硬件接法

如图7-53所示DS18B20的内部功能结构图给出了寄生电源电路。当I/O(DQ引脚)或VCC引脚为电平时,这个电路便“取”得电源,只要符合指定的充电时间和电压要求,I/O将提供足够的功率。寄生电源具有两个优点,第一,可以利用I/O引脚远程温度检测而无须本地电源;第二,在缺少正常电源条件下也可以读取ROM的值。

因为DS18B20的工作电流高达1mA,为了使DS18B20能准确地完成温度变换,当温度变换发生时,I/O线上必须提供足够的功率。有两种方法确保DS18B20在其有效变换期内得到足够的电源电流。第一种方法是发生温度变换时,在I/O线上提供一路强的上拉电源,如使用一个MOSFET把I/O线直接拉到电源电压。当使用寄生电源方式时,VCC引脚必须连接到地。向DS18B20供电的另外一种方法是通过使用连接到VCC引脚的外部电源。这种方法的优点是在I/O线上不要求附加强的上拉电源,总线上DS18B20便可以在温度变换期间保持自身供电,这就保证了在变换时间内其他数据能够在单线上正常传送。

此外,在单线总线上可以放置任何数目的DS18B20,而且如果它们都使用外部电源,那么通过发出SkipROM命令和接着发出ConvertT命令可以同时完成温度变换。此时要注意,只要外部电源处于工作状态,GND引脚就不可悬空。开发板上的J2连接插线设置了VCC的选择模式,参照图7-50,J2的3脚为DS18B20的电源输入脚,用短接片插入不同的位置,即可选择该脚与电源和地相连,从而完成上述两种方式的实验设置。为了更加清晰地说明开发板的系统连线,图7-56给出了温度计项目的系统功能图,请读者对照该图加深对以上内容的理解。

(5)温度传感器DS18B20的程序编制方法

单总线上每一个器件的使用都是从初始化开始的。初始化的时序是,单片机首先发出复位脉冲,在经过一定延时后,一个或多个单总线器件发出应答脉冲,如果单片机检测到单总线上有器件存在,就可以发出传送ROM命令。具体的ROM命令见表7-6。

图7-56 温度计项目的系统功能图

只有当表7-5所示的任意一条ROM指令被成功执行后,才会执行单片机发出的访问被选中器件的存储和控制命令。这些命令被存放在DS18B20的RAM中,主要实现启动单总线DS18B20温度转换等功能,具体的RAM命令格式见表7-6。

表7-5 DS18B20的ROM命令格式

表7-6 DS18B20的RAM命令格式

对DS18B20的访问可分为3个步骤,即初始化、序列号访问和内存访问。由于项目用开发板上只有一个DS18B20,因此在初始化DS18B20后,将跳过对ROM编码搜索的指令,直接调用温度转换命令,并在主程序中实现7段LED数码管和1602LCD液晶显示器同时显示当前温度值的功能。关于DS18B20实现多点温度测控系统的方法,请读者结合本章内容方法加以实现。

①DS18B20的初始化方法。DS18B20要求按照严格的协议来确保数据传送的完整性。协议由几种单线上的信号类别组成,即:复位脉冲、存在脉冲、写0、写1、读0和读1。所有这些信号除了存在脉冲之外,均由总线主器件(开发板上的STC89C52RC)产生。

图7-57给出了DS18B20的初始化复位脉冲时序图,当主器件开始与从器件DS18B20进行通信时,主器件必须先给出复位脉冲,经过给定时间,DS18B20发出存在脉冲,表示已经准备好发送或者接收由主器件发送的ROM命令和存储器操作命令。

图7-57 DS18B20的初始化复位脉冲时序图

首先,总线主器件发送最短为480μs的低电平TX复位脉冲信号,源代码中的以下语句实现这一过程:

接着总线主器件便释放此线,并进入接收方式,由于图7-49中上拉电阻R43的作用,一线制总线被拉至高电平状态,在检测到DQ(I/O)引脚上的上升沿之后,DS18B20等待15~60μs,源代码中的下条语句实现一线制总线置1大约66μs。

此时,DS18B20的最大等待时间60μs已被超过,可以检测一线总线上是否存在DS18B20给出的存在脉冲,可用检测DQ的引脚状态来实现:

_nop_()为执行一个时钟周期的空指令,本开发板采用了11.0592MHz的外部晶振,一个时钟周期大约要1.1μs;delay(1)延时函数则能够延时大致11μs。

至此,按照DS18B20的初始化复位脉冲时序图编制的程序实现代码分析完毕。

②写时间片。如图7-58所示,当主器件把数据线从高逻辑电平拉至低逻辑电平时,产生写时间片。写时间片有两种类型:分别为写1时间片和写0时间片,所有时间片必须有最短为60μs的持续期,在各写周期之间必须有最短为1μs的恢复时间。

在DQ线由高电平变为低电平之后,DS18B20在15~60μs的时间窗口之间对DQ线采样,如果DQ线为高电平,就发生写1;如果DQ线为低电平,便发生写0。

图7-58 DS18B20的写时间片脉冲时序图

源程序中的DS18B20_ReadByte函数完成对DS18B20的写时间片功能。源代码列写如下:

对于主器件产生写1时间片的情况,数据线DQ必须先被拉至逻辑低电平,然后被释放,使数据线在写时间片开始之后的15μs之内由主器件拉至高电平;对于主器件产生写0时间片的情况,数据线必须被主器件拉至逻辑低电平,且至少保持低电平60μs。读者可以对照图7-58给出的写时间片脉冲时序图,理解上面给出的程序代码。

③读时间片。如图7-59所示,当从DS18B20读数据时,主器件产生读时间片,当主器件把数据线DQ从逻辑高电平拉至低电平时,产生读时间片,数据线DQ必须保持在低逻辑电平至少1μs,来自DS18B20的输出数据在读时间片下降沿之后15μs有效,因此为了读出,从读时间片开始算起15μs的状态主器件必须停止把DQ引脚驱动至低电平。

以下程序代码模拟了这一过程:

图7-59 DS18B20的读时间片脉冲时序图

图7-59在读时间片结束时,DQ引脚经过外部的上拉电阻拉回至高电平,所有读时间片的最短持续期限为60μs,各个读时间片之间必须有最短为1μs的恢复时间。同样读者可以对照图7-59给出的读时间片脉冲时序图理解上面给出的程序代码。