DS18B20是一种新型数字温度传感器,它采用独特的单线接口方式,仅需一个端口引脚来发送或接收信息,在CPU和DS1B820之间仅需一条数据线和一条地线进行接口。DS1B820采用TO-92或8脚SOIC封装,引脚排列如图5-7所示。各引脚功能如下:
●GND:地。
●DQ:单线应用的数据输入/输出引脚。
●VDD:可选的外部供电电源引脚。
DS18B20内部有三个主要数字部件:64位激光ROM、温度传感器、非易失性温度报警触发器TH和TL。DS1B820可以采用寄生电源方式工作,从单总线上汲取能量,在信号线处于高电平期间,把能量储存在内部电容里,在信号线处于低电平期间,消耗电容上的电能工作,直到高电平到来再给寄生电源(电容)充电。DS18B20也可用外部3~5.5V电源供电,这两种供电方式的电路如图5-8所示。
图5-7 DS18B20引脚排列
图5-8 DS18B20的供电方式
采用寄生电源方式时,VDD引脚必须接地,另外为了得到足够的工作电流,应给CPU的I/O口线提供一个强上拉,一般可以使用一个场效应晶体管,将I/O口线直接拉到电源上。采用外部供电方式时,可以不用强上拉,但外部电源要处于工作状态,GND引脚不得悬空。温度高于100℃时,不推荐使用寄生电源,应采用外部电源供电。
DS18B20依靠一个单线端口通信,必须先建立ROM操作协议,才能进行存储器和控制操作。因此,CPU必须先提供下面5个ROM操作命令之一:
①读出ROM,代码为33H,用于读出DS18B20的序列号,即64位激光ROM代码。
②匹配ROM,代码为55H,用于辨识(或选中)某一特定的DS18B20进行操作。
③搜索ROM,代码为F0H,用于确定总线上的节点数以及所有节点的序列号。
④跳过ROM,代码为CCH,命令发出后系统将对所有DS18B20进行操作,通常用于启动所有DS18B20转换之前,或系统中仅有一个DS18B20时。
⑤报警搜索,代码为ECH,主要用于鉴别和定位系统中超出程序设定的报警温度界限的节点。
这些命令对每个器件的激光ROM部分进行操作,在单线总线上挂有多个器件时,可以区分出单个器件,同时指明有多少器件或是什么型号的器件。
图5-9 DS18B20内部存储器映像
DS18B20内部存储器映像如图5-9所示。存储器由一个高速暂存器和一个存储高低温报警触发值TH和TL的非易失性电可擦除E2RAM组成。头2个字节为实测温度值,低字节在前,高字节在后,第3和第4字节是用户设定温度报警值TH和TL的拷贝,是易失的,每次上电时被刷新。第5个字节为配置寄存器,其内容用于确定温度值的数字转换分辨率,DS18B20工作时,按此寄存器中的分辨率,将温度转换为相应精度的数值。
配置寄存器各位的分布如下:
其中,TM为测试模式位,用于设定DS18B20是处于工作模式还是处于测试模式,出厂时TM位被设置为0,用户一般不要改动。R1和R0用于设定温度转换的精度分辨率,如表5-11所列。其余低5位全为1。DS18B20温度转换时间较长,而且设定的分辨率越高,所需转换时间越长,因此实际应用中,要根据具体情况权衡考虑。
表5-11 DS18B20的分辨率设定
高速暂存器的第6、7、8字节保留未用,读出值为全1。第9字节为前面8个字节的CRC校验码,用于保证数据通信的正确性。
DS18B20提供了如下存储器操作命令:
①温度转换,代码为44H,用于启动DS18B20进行温度测量。温度转换命令被执行后,DS18B20保持等待状态。如果主机在这条命令之后跟着发出读时间隙,而DS18B20又忙于进行温度转换的话,DS18B20将在总线上输出“0”,若温度转换完成,则输出“1”。如果使用寄生电源,主机必须在发出这条命令后立即启动强上拉,并保持750ms,在这段时间内单总线上不允许进行任何其他操作。(www.daowen.com)
②读暂存器,代码为BEH,用于读取暂存器中的内容。从字节0开始最多可以读取9个字节,如果不想读完所有字节,主机可以在任何时间发出复位命令来中止读取。
③写暂存器,代码为4EH,用于将数据写入到DS18B20暂存器的地址2和地址3(TH和TL字节)。可以在任何时刻发出复位命令来中止写入。
④复制暂存器,代码为48H,用于将暂存器的内容复制到DS18B20的非易失性E2RAM中,即把温度报警触发字节存入非易失性存储器里。如果主机在这条命令之后跟着发出读时间隙,而DS18B20又正在忙于把暂存器的内容复制到E2RAM存储器,DS18B20就会输出一个“0”,如果复制结束的话,DS18B20则输出“1”。如果使用寄生电源,主机必须在这条命令发出后,立即启动强上拉并最少保持10ms,在这段时间内,单总线上不允许进行任何其他操作。
⑤重读E2RAM,代码为B8H,用于将存储在非易失性E2RAM中的内容重新读入到暂存器(温度触发器)中。这种复制操作在DS18B20上电时自动执行,这样,器件一上电,暂存器里马上就存在有效的数据了。若在这条命令发出之后发出读时间隙,器件会输出温度转换忙的标志:“0”代表忙,“1”代表完成。
⑥读电源,代码为B4H,用于将DS18B20的供电方式信号发送到主机。若在这条命令发出之后发出读时间隙,DS18B20将返回它的供电模式:“0”代表寄生电源,“1”代表外部电源。
一条温度转换命令启动DS18B20完成一次温度测量,测量结果以二进制补码形式存放在的高速暂存器中,占用暂存器的字节1(LSB)和字节2(MSB)。用一条读暂存器内容的存储器操作命令,可以把暂存器中的数据读出。温度报警触发器TH和TL各由一个E2PROM字节构成,可以用一条写存储器操作命令对TH和TL进行写入,对这些寄存器的读出需要通过暂存器。所有数据都以低位(LSB)在前的方式进行读写,数据格式以0.0625℃/LSB形式表示如下:
LSB字节
MSB字节
当符号位S=0时,表示测得的温度值为正,可以直接对测得的二进制数进行计算,并转换为十进制数。当符号位S=1时,表示测得的温度值为负,此时测得的二进制数为补码数,要先变成原码数再进行计算。表5-12所示为部分温度值对应二进制数据。
表5-12 DS18B20温度与测量值对应表
DS18B20完成温度转换后,就把测得的温度值t与暂存器中的TH、TL字节内容进行比较,若t>TH或t<TL,则将DS18B20内部报警标志位置1,并对主机发出的报警搜索命令做出响应,因此可用多只DS18B20进行多点温度循环监测。
例5-4图5-10所示为LPC2138与DS18B20组成的数字温度计电路。DS18B20采用外部3.3V电源供电,LPC2138的P1.25引脚外接一个4.7kΩ上拉电阻,连到DS18B20的DQ端作为数据线。温度转换结果通过点阵字符型LCD显示。
图5-10 LPC2138与DS18B20组成的数字温度计电路
本例中DS18B20驱动程序包括在DS18B20.C模块中,具体如下:
进入主程序后首先调用初始化子程序进行引脚配置,接着进行液晶模块初始化,初始化完成之后在LCD屏幕上显示提示信息,接着对DS18B20进行预读,这是由于DS18B20进行温度转换需要一定时间的原因,预读期间,LCD屏幕上没有温度值显示。最后启动DS18B20温度转换,并将转换结果显示在LCD屏幕上。
主程序文件main.c如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。