关键词不能为空

当前您在: 主页 > 英语 >

第22章使用DS28B20温传感器测温#

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-09 19:18
tags:

-

2021年2月9日发(作者:neko)



11


章使用


DS18 B20


温度传感器测温



11.1


概述



现实生产生活中,小到测量体温 的温度计,大到航天飞机的温控系统,处处都离不开


温度测量。工业生产中的三大指标< /p>


<


流量、压力、温度)之一就是温度,温度测量可以说

< p>
是无处不在,遍布了我们生活生产的方方面面。



DS18B20


温度传感器是美国


DALLAS


半导体公司生产的数字化温度传感器,它与以


往模拟量温度传感器不同,数字化 是其一大特点,它能将被测环境温度直接转化为数字


量,并以串行数据流的形式传输给单 片机等微处理器去处理。


DS18B20


温度传感器的另一


个主要特点是它是单总线的,即它与单片机等微处理器连接时,只需占用一个


I/O


管脚,


并且不再需要其它任何外部元器件,这大 大简化了它与但单片机之间的接口电路。



11.2DS18B 20


温度传感器介绍



目前,使用最普 遍的


DS18B20


温度传感器是三脚


TO-92


直插式封装这一种,这种封


装的

DS18B20


实物如图


11-1


所示。可以看到它体积很小,只有三只管脚,外形与一般的


三极管极其相似。图


11-2


是其三脚


TO-92

< br>直插式封装图,表


11-1


列出了


DS18B20


各个引


脚的定义。



如图


11-1


如图

11-2



11-1 DS18B20


引脚定义。




引脚号



1


2


3


引脚



GND


DQ



DD



定义



接地端



数据输入输出端



电源端



1



DS18B20



< br>◆


独特的单总线


<


< p>
理器通信只需一个


I/O


需其它外部元件;



传感器特性简介



条线)接口,与微处


管脚,且硬件连接无


测量结果直接输出数字量,可直接与微处理器通信;



◆< /p>


供电电压范围


3.0V~5.5V


;在寄 生电源方式下可有数据线供电;




测 温范围


-55



~+125

< p>
℃;在


-10



~+85


℃范围内,测量精度可达±


0.5


℃;




可编程的


9~12


位测温分辨率,对应的可分辨温度值分别为


0.5


℃,


0.25


℃,


0.125


℃,


0.0625


℃;


12


位分辨率时的温度测量转换最长时间


<


上限)只有


750ms





每一片


DS18B20


都有自己独一无二的芯片号码;多片


DS18B20

< p>
可以并联在一条数据总


线上实现不同地点的多点组网;



应用范围包括温度调控,工业现场测温,消费类产品, 温度计及热敏系统等。



2



DS18B20


温度传感器测温工作原理



DS18B20


的核心功能就是测量被测环境温度并直接转换成为数 字量。我们使用


DS18B20


测温,就是要将


DS18B20


转换成的数字量温度值从


DS18B2 0


内部读出,送入单


片机进行处理,所以了解

< br>DS18B20


内部的存储器的结构和组成是必要的。另外,控制


DS18B20


测温和读取温度值的指令也是必不可少的。以下就从这两个方面 逐个说明。




DS18B20


内部的存储器



笼统而言,可以说

< p>
DS18B20


内部的存储器有三个。一个是


64


位光刻


ROM


;另一个是


中间结果暂存


RAM


;第三个是

E


2


RAM




64


位光刻

< br>ROM


1 / 17


前面已经提及,每一片


DS18B20


都有一个独一无二的号码,用于唯一标识当前这片


DS18B20


。这个号码是


DS18B20


的生产厂家


DALLAS


公司在生产该 片


DS18B20


时固化在


其内部


ROM


中的,共有


64

位,所以称为


64


位光刻


ROM< /p>


号码,其数据格式如图


11-3



示。






11-3 64


位光刻

< p>
ROM


数据格式




64


位号码由三部分组成,分别是


64


位号码中的最低


8


位,

64


位号码中的中间


48


位和


64


位号码中的最高


8

位。其中,


64


位号码中的最低


8


位对每一片


DS18B20


而言都相< /p>


同,其值是


0x28H


,称为家族代码。 这个值是专门分配给


DS18B20


家族的,用以区别不同


的单总线设备家族。


64


位号码中的中间< /p>


48


位是唯一标识当前这片


DS18B2 0


的产品序列


号。任意两片


DS18B 20


的家族代码都是


0x28H


,但它 们的


48


位产品序列号绝对不相同,



48


位一般称为


48

< br>位序列号。


64


位号码中的最高


8


位是从前面的


56



<8



+48



=56


位)计算出的


CRC


码,这


8


位一般不大用,所以此处一笔带过,读者可以不予理睬 。



②中间结果暂存


RAM


中间结果暂存


RAM


共有


8


个字节,其结构如图


11-4


所示 。





11 -4


中间结果暂存


RAM


其中,字节 地址


0


是所测温度数值的低


8


位,字节地址


1


是所测温度数值的高

< p>
8


位,


字节地址


2


是设定温度的上限值,字节地址


3


是设定温度 的下限值,字节地址


4


是配置寄


存器字 节。字节地址


5,6,7


保留。这


8< /p>


个字节中,除字节地址


0,1,4


以外的


5


个字节几乎不


使用,所以可以忽略, 重点掌握字节地址


0,1,4


就足够了。



字节地址


0


和字节地址

< p>
1


中存放的就是测量的温度值,字节地址


1


中存放的是高


8


位,字节地址


0


中存放的是低


8


位。它们中 的温度数据存储格式如图


11-5


所示。其中,高


5


位是符号位


S


。若


5



S


全为


0


则表示温度是正值,因为是正值,补码与原码相同,余下



11


位按图示各位的权重计算所得数值就是所测温 度值;若


5



S


全为


1


,则余下


11


位的


补码对应的数值就是所测温度值,这个温度值自然是零度以下,是负值。在 实际计算温度


值时,在得到


11


位数值 原码值以后,再乘以


0.0625


就得到所测的温度值。这样计 算的原


因是:可以将图


11-5


中的小 数点


<


在权重


2


0



2


-1


之间)向右移动


4


位,即整个数值扩大了


2 / 17


2


4


=16


倍,要使与原值相等,自然需要再除以


16


,即 相当于乘以


0.0625






11-5


温度数据存储格式



字节地址


4


是配置寄存器字节。前面已经提及,


DS18 B20


的测温有


9


位,


10


位,


11


位,

< p>
12


位四种分辨率,实际测温时选用哪种分辨率是可以通过具体编程来设定 ,


DS18B20


出厂时设定的默认测温分辨率是


12


位。字节地址


4


配置寄 存器字节的数据格式如图


11-6


所示。其中的


R1



R0


的四种组合一一对 应


9


位,


10


位,


11


位,


12

位四种分辨率。对应


关系如表


11-2

所示。附带说明的是,一般选用出厂时设定的默认测温分辨率


12

< br>位,不用


改动。





11-6


配置寄存器字节的数据格式




11-2 R1



R0


的四种组合与测温分辨率的关系





E


2


RAM


E


2


RAM


的 结构如图


11-7


所示。可以看到,


E


2


RAM


是中间结果暂存


RAM


中字节地址



2,3 ,4


的三个字节内容的拷贝或者说是备份,以备数据的完备性需要。这个存储器一般不< /p>


使用,故可以忽略不予考虑。





11-7 E2RAM


的结构



综上所述,在不改 变测温出厂分辨率


<12


位)的前提下,


DS18B20


内部存储器中,我


们需关注的就只有


64


位光刻


ROM


和中 间结果暂存


RAM


中用于存放温度值的字节地址


0


和字节地址


1


了。




DS18B20


的 指令



DS18B20


的指令可分为三 大类,第一类是与


64


位光刻


ROM< /p>


相关联的一系列指令,第


二类是与中间结果暂存

< br>RAM


相关联的温度值读取等一些相关指令,第三类就是控制温度


转换的控制类指令。上面刚刚提到,在不改变测温出厂分辨率


<12

< p>
位)的前提下,


3 / 17


DS18B20< /p>


内部存储器中,我们只需关注


64


位光刻


ROM


和中间结果暂存


RAM


中字节地址


0


和字节地址


1


中的温度值。考虑到


DS18B20


的指令集中,部分指令极少使用,此处仅就


常用的、关键指令做解释说明,其余指令请 读者查阅参考其它相关资料。



①与


6 4


位光刻


ROM


相关的指令

< p>


◆读


64


位光刻


ROM


号码指令【


0x33H





本条指令用于读取唯一 标识当前这片


DS18B20



64< /p>


位号码,但要求总线上只能有一



DS1 8B20


,否则会出现多片


DS18B20

冲突的问题;



◆匹配


64


位光刻


ROM


号码指令【

0x55H




本条指令主要用在 单总线上挂接多片


DS18B20


的情况下,此时,执行本指令


0x55H


后,紧跟其后的是一


64< /p>


位光刻


ROM


号码


<


特别注意:在输入


64


位光刻


ROM


号码时,低


位在前)


,这一


64


位光刻


ROM


号码将与单总线上每一片


DS18B20



64


位光刻


ROM


码进行比对,号码匹配的那一片


DS18B20


将执行后续的指令,例如转换温度、读取温度值


等指令;而号码不匹配的 那些


DS18B20


将不执行任何指令,继续等待下去,直到总 线复位


后再等待下一次被匹配的机会。



◆跳过


64


位光刻


ROM

< p>
号码匹配指令【


0xCCH



可以设想,如果总线上只有一片


DS18B20


挂接其上,执行温度转换指令、读取温度


值指令等只能是针对这一片


DS18B20


而言。如果先读取其


64< /p>


位光刻


ROM


号码,再去匹



64


位光刻


ROM


号码,显然是画蛇添足,多此一举,所以完全可以跳过


64

< p>
位光刻


ROM


号码的匹配环节,直接执行转换温度 、读取温度值等指令。需要说明的是,不需要执行匹


配时,不用执行上一条


0x55H


指令,但必须执行跳过指令,即执行


0x CCH


指令完成跳过


功能。



◆搜索


64


位光刻


RO M


指令【


0xF0H





当总线上挂接多片


DS1 8B20


芯片时,执行本指令可以搜索当前挂接在总线上的


DS 18B20


芯片的个数,并识别它们的


64

位光刻


ROM


号码,便于后续方便操作各个


DS18B20


芯片。



②与 中间结果暂存


RAM


相关的温度数值读取指令

< br>


◆读中间结果暂存


RAM


指令 【


0xBEH



单片机发出并执行读中间结果暂存


RAM


指令


0xBEH


后,就可以从字节地址


0



始,每次读取一个字节,依次读取中间结果暂存


RA M



8


个字节中的数据。因为温度值< /p>


只保存在前面两个字节中,所以实际读取中只读取两个字节就可以了。


③控制温度转换指令



◆启动温 度转换指令【


0x44H




本指令是启动温度转换指令,转换结束后的温度值被存入中间结果暂存


R AM


的字节


地址


0<

< br>低


8


位)和字节地址


1<



8


位)中。然后就可以从中读取温度值了。




DS18B20

< br>的通信规则



仅用一条线通信的


DS18B20


的系统,在与微处理器通信时,其数据的传输规则不同

< br>于一般芯片,其数据传输规则的特殊性表现在每次操作都要按部就班的执行以下四个步

骤:



第一步初始化


DS18B2 0




第二步向


DS18B20


发送与


64


位光刻< /p>


ROM


相关的指令;


< br>第三步执行与中间结果暂存


RAM


相关指令


<


包括控制温度转换指令);



第四步是数据处理。



以下针对主要的 三个操作:读取


64


位光刻


ROM


号码操作,启动


DS18B20


温度转换< /p>


操作,读取温度操作,细化上述四个步骤。



4 / 17


①读取


64

< p>
位光刻


ROM


号码操作



第一步:初始化


DS18B20




第二步:单片机向


DS18B20


发送读


64


位光刻


R OM


号码指令


0x33H


< p>


第三步:因为读取


64


位光刻


ROM


号码操作不涉及中间结果暂存

RAM


,此步骤就什


么都不做;



第四步:单片机从单总线上一位接着一位地读取,共


64


位,得到


64


位光刻


ROM




<


注意:低位在前


)。



②启动


DS18B20


温度转换操作



第一步:初始化


DS18B20



第二步:单片机向


DS18B20


发送跳过


64


位光刻


ROM


号码匹配指令


0xCCH<


假设只有

< p>
一片


DS18B20


挂接在总线上);

< p>


第三步:单片机向


DS18B20


发送启动


温度转换指令


0x44H

< br>;



第四步:本操作只启动温度转换,无数据处理,故本 步骤什么都不做。



③读取温度操作



第一步:初始化


DS18B20




第二步:单片机向


DS18B20


发送跳过


64


位光刻


ROM


号码匹配指令


0xCCH<


假设 只有


一片


DS18B20


挂接在总线上 );



第三步:单片机向


DS18B2 0


发送读


中间结果暂存


RAM


指令


0xBEH



< /p>


第四步:单片机从单总线上一位接着一位地读取,连续读取两个字节的数据


<


低字节


在前,高位在前),得到温度值的低字节和高 字节数据。



此处还需要解释说明两点:



1



DS18B20


的操作时序很严格,特别是 延时,要比较精确才行。所以以上每一步骤


后都紧跟一段延时,具体延时时间多长,后面 的初始化、读写操作等时序会给出详细说


明。



2


、因为


DS18B20


是单 总线的,只有一条线与单片机的一个


I/O


管脚相连接。初始< /p>


化、指令数据、


64


位光刻


ROM


号码、温度值等等数据,这些数据中,有些是从单片机到


DS18B20


,有些是从


DS18B20


到单片机,但都是


<


也只能)借助这一条总线在 传输,所以


数据是在单片机与


DS18B20

< br>之间一位一位地串行传输的。




DS18B20


的初始化、数据读写操作时序



前面已经提及,因为


DS18B20


是单总线的,所 以其操作时序很严格,特别是延时,


要比较精确才行。




DS18B20


的初始化

< br>


DS18B20


的初始化时序如图

11-8


所示。





11-8 DS18B20


的初始化时序



DS18B20


的初始化时序是:



5 / 17


◆首先是单片机发送一低电平到单一数据总线上 ,将单总线拉低,拉低的时间至少是


480


μ

< br>s


,但不能超过


960


μ


s


。实际中一般取


750

μ


s


左右;


◆然后,单片机释放单总线的控制权,转而准备被动地去接收


DS18B20


发送来的数


据。此时,焊接在单总线上


5K< /p>


Ω


的上拉电阻将单总线由低电平拉高到高电平,此电平从低


到高的上升沿被


DS18B20


捕捉到以后, 单总线转而由


DS18B20


控制了;



◆当


DS18B20


控制了总线时,在 等待


15~60


μ


s

< br>以后,


DS18B20


将单总线再次拉低,


作为向单片机做出的回应,表明自己



)已经就绪,准备接收后续的指令等等。


DS18B20


将单 总线拉低的时间至少是


60


μ


s


,但不能超过


240


μ


s




◆随后,

DS18B20


释放但总线,单总线上


5K


Ω


的上拉电阻再次将将单总线由低电平拉


高到高电平。 此时


DS18B20


的初始化完成。



具体到程序设计时,可以简化初始化过程。实现如下:



◆首先,单片机发送一低电平到单一数据总线上,将单总线拉低,拉低的时间

< br>750


μ


s


< br>右,这


750


μ


s=


480


μ


s+40


μ< /p>


s+230


μ


s


,其中


480


μ


s

是单片机将总线拉低所需的最少时


间,


40


μ


s


是单片机释放总线后


DS 18B20


等待时间


<


大约)),


230


μ


s



DS18B20


的反馈


回应的低电平时间。 这样处理的目的是忽略


DS18B20


的反馈回应,改为延时处 理,原因是


单片机将总线拉低后,何时释放总线不太好把握,自然不太好确定何时接收< /p>


DS18B20


的反


馈回应的低电平,采 用延时以后,至于单片机何时释放总线、


DS18B20


等待多 长时间、


DS18B20


发回应低电平多长一段时间后又释放总 线,使总线又被上拉电阻拉高,这期间的


细节可以不考虑。但这些过程结束后,单总线是 高电平就行,所以进入下一步骤:


拉高总


线。

< br>


◆然后,单片机发送一高电平到单一数据总线上,将单总线拉高,拉高的时间< /p>


500


μ


s


左< /p>


右;



②单片机向


DS18B20


写数据




单片机向


DS18B20


写一位数据的时序图如 图


11-9


所示。





11-9


单片机向


DS18B20


写一位数据的时序


单片机向


DS18B20


写一位 数据的时序:



◆首先,单片机将单总线拉低

< br><


延时时间小于


15


μ


s




◆然后,如果单 片机向


DS18B20


写的数是二进制数


0


,则单片机继续将单总线拉低,



DS18B20


采样当前单总线上的数据


<

低电平,即数据


0


),此总线拉低的延时时间最大


45


μ


s


,因为单片机 向


DS18B20


写一位数据的时间必须在

60


μ


s


内完成;如果单片机向< /p>


DS18B20


写的数是二进制数


1


,则单片机释放总线,由外接上拉电阻将单总线拉高供


DS18B2 0


采样当前单总线上的数据


<


高电平, 即数据


1


)。实际编程中将上拉电阻拉高总

线更改为单片机将单总线拉高,都是高电平,无所谓是谁拉高的。同样,此拉高的延时时

间最大也是


45


μ


s


,以此保证单片机向


DS18B20


写一位数据的时 间必须在


60


μ


s

内;



◆最后,单片机再次将单总线拉高,准备下一位数据 写入


DS18B20


,一般在总线拉高


6 / 17


后延时


10


μ


s


左右。



具体程序设计时,实现如下:



◆单片 机将单总线拉低,延时


15


μ


s




◆如果写


0


:单片机将单总线拉低,延时


60


μ


s





如果写


1


:单片机将单总线拉高,延时


40


μ


s


< p>


◆单片机将单总线拉高,延时


10


μ


s



< br>③单片机从


DS18B20


读数据



单片机从


DS18B20


读一位数 据的时序如图


11-10


所示。





11-10


单片机从


DS18B20


读一位数据的时序

< br>


从图


11-10


可以看到,单 片机从


DS18B20


读一位数据时序比较严格,留给单片机采 样


窗口很窄,单片机从


DS18B20


读取一位二进制数据的时间必须要控制在开始读以后的


15


μ< /p>


s


以内。具体分析如下:



◆首先,单片机将单总线拉低,拉低后的延时时间极短,一般在


1

< p>
μ


s


以内;


< p>
◆然后,单片机释放单总线,由


DS18B20


将 单总线拉低,或者由外接上拉电阻将单


总线拉高,共单片机去采样


0


或者


1


。需要强调的是:此时单总 线被拉低或者拉高不是由


单片机控制拉低或者拉高,单片机此时是读取这些高低电平的。 整个拉低或者拉高电平的


持续时间只有


15-2=13


μ


s


左右,单片机此时应抓紧时间去读取,否则 电平就要发生变化。



具体程序设计时,实现如下:



◆首先 ,单片机将单总线拉低,拉低后的延时时间极短,一般在


1


μ< /p>


s


以内;



◆然 后,单片机将单总线拉高,这一点


不是


单片机从


DS18B20


读一位数据的时序要


求决定的,而是< /p>


51


单片机的


I/O

口在输入数据前必须先写


1


决定的。为了使单片机


I/O



读取数据稳定,此处一般延时


8


μ


s


左右;



◆最后,单片机读取单总线上的数据。



11.3 DS18B20


温度传感器测温实例


1


功能要求:


单片机与一片


DS18B20

连接,在


1602


液晶屏第一行显示所测的温度值


<


数据已处理过)及中间结果暂存


RAM


的字节地址


0


和字节地址

1


的温度值


<


数据未处

< p>
理),在


1602


液晶屏第二行显示该片


DS18B20



64


位光刻


ROM


号码。



7 / 17



#include



#include


#define uchar unsigned char


#define uint unsigned int


sbit RS=P2^0




sbit RW=P2^1




sbit E=P2^2




sbit DQ=P2^3




uint temp




uchar wdL,wdH




static uchar sn[8]={0}




uchar code b2hex[]=




//************************************


void wrcmd1602(uchar cmd>


{


uchar m




RW=0




RS=0




P1=cmd





for(m=0


< br>m<=7



m++>



//


延时


25us



E=1





for(m=0



m<=7

< p>


m++>



//


延时


25us



E=0




}


void wrdata1602(uchar shuju>


{



uchar m





RW=0





RS=1




P1=shuju




8 / 17

-


-


-


-


-


-


-


-



本文更新与2021-02-09 19:18,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/623276.html

第22章使用DS28B20温传感器测温#的相关文章

  • 爱心与尊严的高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊严高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊重的作文题库

    1.作文关爱与尊重议论文 如果说没有爱就没有教育的话,那么离开了尊重同样也谈不上教育。 因为每一位孩子都渴望得到他人的尊重,尤其是教师的尊重。可是在现实生活中,不时会有

    小学作文
  • 爱心责任100字作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任心的作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文