使用DS18B20温度传感器测温Word文档下载推荐.docx

上传人:b****2 文档编号:5071671 上传时间:2023-05-04 格式:DOCX 页数:29 大小:478.45KB
下载 相关 举报
使用DS18B20温度传感器测温Word文档下载推荐.docx_第1页
第1页 / 共29页
使用DS18B20温度传感器测温Word文档下载推荐.docx_第2页
第2页 / 共29页
使用DS18B20温度传感器测温Word文档下载推荐.docx_第3页
第3页 / 共29页
使用DS18B20温度传感器测温Word文档下载推荐.docx_第4页
第4页 / 共29页
使用DS18B20温度传感器测温Word文档下载推荐.docx_第5页
第5页 / 共29页
使用DS18B20温度传感器测温Word文档下载推荐.docx_第6页
第6页 / 共29页
使用DS18B20温度传感器测温Word文档下载推荐.docx_第7页
第7页 / 共29页
使用DS18B20温度传感器测温Word文档下载推荐.docx_第8页
第8页 / 共29页
使用DS18B20温度传感器测温Word文档下载推荐.docx_第9页
第9页 / 共29页
使用DS18B20温度传感器测温Word文档下载推荐.docx_第10页
第10页 / 共29页
使用DS18B20温度传感器测温Word文档下载推荐.docx_第11页
第11页 / 共29页
使用DS18B20温度传感器测温Word文档下载推荐.docx_第12页
第12页 / 共29页
使用DS18B20温度传感器测温Word文档下载推荐.docx_第13页
第13页 / 共29页
使用DS18B20温度传感器测温Word文档下载推荐.docx_第14页
第14页 / 共29页
使用DS18B20温度传感器测温Word文档下载推荐.docx_第15页
第15页 / 共29页
使用DS18B20温度传感器测温Word文档下载推荐.docx_第16页
第16页 / 共29页
使用DS18B20温度传感器测温Word文档下载推荐.docx_第17页
第17页 / 共29页
使用DS18B20温度传感器测温Word文档下载推荐.docx_第18页
第18页 / 共29页
使用DS18B20温度传感器测温Word文档下载推荐.docx_第19页
第19页 / 共29页
使用DS18B20温度传感器测温Word文档下载推荐.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

使用DS18B20温度传感器测温Word文档下载推荐.docx

《使用DS18B20温度传感器测温Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《使用DS18B20温度传感器测温Word文档下载推荐.docx(29页珍藏版)》请在冰点文库上搜索。

使用DS18B20温度传感器测温Word文档下载推荐.docx

12位分辨率时的温度测量转换最长时间(上限)只有750ms;

◆每一片DS18B20都有自己独一无二的芯片号码;

多片DS18B20可以并联在一条数据总线上,实现不同地点的多点组网;

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

11.2.2DS18B20温度传感器测温工作原理

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

我们使用DS18B20测温,就是要将DS18B20转换成的数字量温度值从DS18B20内部读出,送入单片机进行处理,所以了解DS18B20内部的存储器的结构和组成是必要的。

另外,控制DS18B20测温和读取温度值的指令也是必不可少的。

以下就从这两个方面分别加以说明。

1、DS18B20内部的存储器

笼统而言,可以说DS18B20内部的存储器有三个:

64位光刻ROM、中间结果暂存RAM和E2RAM。

(1)64位光刻ROM

前面已经提及,每一片DS18B20都有一个独一无二的号码,用于唯一标识当前这片DS18B20。

这个号码是DS18B20的生产厂家DALLAS公司在生产该片DS18B20时固化在其内部ROM中的,共有64位,所以称为64位光刻ROM号码,其数据格式如图11-3所示。

位63位56

位55位8

位7位0

8位CRC码

48位序列号

家族代码28H

图11-364位光刻ROM数据格式

这64位号码从最低位(位0)到最高位(位63)划分为三个组成部分,分别是:

最低8位,中间48位和最高8位,如图11-3所示。

其中,最低8位对每一片DS18B20而言都相同,其值是0x28,称为家族代码。

这个值是专门分配给DS18B20家族的,用以区别不同的单总线设备家族。

中间48位是唯一标识当前这片DS18B20的产品序列号。

任意两片DS18B20的家族代码都是0x28H,但它们的48位产品序列号绝对不相同,这48位一般称为48位序列号。

最高8位是根据前面56位(8位+48位=56位)计算出的CRC码,一般不大使用,读者可以不予深究。

(2)中间结果暂存RAM

中间结果暂存RAM共有8个字节,其结构如图11-4所示。

字节地址

温度值低8位

温度值高8位

设置温度上限值

设置温度下限值

设置寄存器字节

4

保留

5

6

7

图11-4中间结果暂存RAM

其中,字节地址0是所测温度数值的低8位,字节地址1是所测温度数值的高8位,字节地址2是设定温度的上限值,字节地址3是设定温度的下限值,字节地址4是配置寄存器字节。

字节地址5,6,7保留。

这8个字节中,除字节地址0,1,4以外的5个字节几乎不使用,可以忽略,重点掌握字节地址0,1,4就足够了。

字节地址0和字节地址1中存放的就是测量的温度值,字节地址1中存放的是高8位,字节地址0中存放的是低8位。

它们中的温度数据存储格式如图11-5所示。

其中,高5位是符号位S。

若5个S全为0则表示温度是正值,由于是正值,补码与原码相同,余下的11位按图示各位的权重计算,所得数值就是所测温度值;

若5个S全为1,则余下11位的补码对应的数值就是所测温度值,这个温度值自然是零度以下,是负值。

在实际计算温度值时,在得到11位数值原码值以后,再乘以0.0625就得到所测的温度值。

这样计算的原因是:

可以将图11-5中的小数点(在权重20和2-1之间)向右移动4位,即整个数值扩大了24=16倍,要使它与原值相等,自然需要再除以16,即相当于乘以0.0625。

S

26

25

24

23

22

21

20

2-1

2-2

2-3

2-4

图11-5温度数据存储格式

字节地址4是配置寄存器字节。

前面已经提及,DS18B20的测温有9位,10位,11位,12位四种分辨率,实际测温时选用哪种分辨率,可以通过具体编程来设定,DS18B20出厂时设定的默认测温分辨率是12位。

字节地址4配置寄存器字节的数据格式如图11-6所示。

其中的R1和R0的四种组合一一对应9位,10位,11位,12位四种分辨率。

对应关系如表11-2所示。

附带说明的是,一般选用出厂时设定的默认测温分辨率12位,不用改动。

位7

位6

位5

位4

位3

位2

位1

位0

R1

R0

图11-6配置寄存器字节的数据格式

表11-2R1和R0的四种组合与测温分辨率的关系

温度分辨率

最大转换时间

9位

93.75ms(tconv/8)

10位

187.5ms(tconv/4)

11位

375ms(tconv/2)

12位

750ms(tconv)

(3)E2RAM

E2RAM的结构如图11-7所示。

可以看到,E2RAM是中间结果暂存RAM中字节地址位2,3,4的三个字节内容的拷贝或者说是备份,以备数据的完备性需要。

这个存储器一般不使用,故可以忽略不予考虑。

图11-7E2RAM的结构

综上所述,在不改变测温出厂分辨率(12位)的前提下,DS18B20内部存储器中,我们需关注的,就只有64位光刻ROM,还有中间结果暂存RAM中用于存放温度值的字节地址0和字节地址1了。

2、DS18B20的指令

DS18B20的指令可分为三大类,第一类是与64位光刻ROM相关联的一系列指令,第二类是与中间结果暂存RAM相关联的温度值读取等一些相关指令,第三类就是控制温度转换的控制类指令。

上面刚刚提到,在不改变测温出厂分辨率(12位)的前提下,DS18B20内部存储器中,我们只需关注64位光刻ROM和中间结果暂存RAM中字节地址0和字节地址1中的温度值。

考虑到DS18B20的指令集中,部分指令极少使用,此处仅就常用的、关键指令做解释说明,其余指令请读者查阅参考相关资料。

(1)与64位光刻ROM相关的指令

①读64位光刻ROM号码指令【0x33】

本条指令用于读取唯一标识当前这片DS18B20的64位号码,但要求总线上只能有一片DS18B20,否则会出现多片DS18B20冲突的问题;

②匹配64位光刻ROM号码指令【0x55】

本条指令主要用在单总线上挂接多片DS18B20的情况,此时,执行本指令0x55后,紧跟其后的是一64位光刻ROM号码(特别注意:

在输入64位光刻ROM号码时,低位在前)。

这一64位光刻ROM号码,将与单总线上每一片DS18B20的64位光刻ROM号码进行比对,号码匹配的那一片DS18B20将执行后续的指令,例如转换温度、读取温度值等指令;

而号码不匹配的那些DS18B20将不执行任何指令,继续等待下去,直到总线复位后,再等待下一次被匹配的机会。

③跳过64位光刻ROM号码匹配指令【0xCC】

可以设想,如果总线上只有一片DS18B20挂接其上,执行温度转换指令、读取温度值指令等只能是针对这一片DS18B20而言。

如果先读取其64位光刻ROM号码,然后再匹配这64位光刻ROM号码,显然是画蛇添足,多此一举,所以完全可以跳过64位光刻ROM号码的匹配环节,直接执行转换温度、读取温度值等指令。

应该注意的是,不需要执行匹配时,不用执行上一条0x55指令,但必须执行跳过指令,即执行0xCC指令完成跳过功能。

④搜索64位光刻ROM指令【0xF0】

当总线上挂接多片DS18B20芯片时,执行本指令可以搜索当前挂接在总线上的DS18B20芯片的个数,并识别它们的64位光刻ROM号码,方便后续操作各个DS18B20芯片。

(2)与中间结果暂存RAM相关的温度数值读取指令

读中间结果暂存RAM指令【0xBE】

单片机发出并执行读中间结果暂存RAM指令0xBE后,就可以从字节地址0开始,每次读取一个字节,依次读取中间结果暂存RAM的8个字节中的数据。

由于温度值只保存在前面两个字节中,实际应用中只读取前两个字节就可以了。

(3)控制温度转换指令

启动温度转换指令【0x44】

本指令是启动温度转换指令,转换结束后的温度值,被存入中间结果暂存RAM的字节地址0(低8位)和字节地址1(高8位)中。

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

3、DS18B20的通信规则

仅用一条线通信的DS18B20的系统,在与微处理器通信时,其数据的传输规则不同于一般芯片,其特殊性表现在,每次操作都要按部就班地执行以下四个步骤:

S1:

初始化DS18B20;

S2:

向DS18B20发送与64位光刻ROM相关的指令;

S3:

执行与中间结果暂存RAM相关的指令(包括控制温度转换指令);

S4:

数据处理。

以下针对三个主要操作:

读取64位光刻ROM号码操作,启动DS18B20温度转换操作,读取温度操作,来细化上述四个步骤。

(1)读取64位光刻ROM号码操作

单片机向DS18B20发送读64位光刻ROM号码指令0x33H;

由于读取64位光刻ROM号码操作不涉及中间结果暂存RAM,此步骤就什么都不做;

单片机从单总线上一位接着一位地读取,共64位,得到64位光刻ROM号码(注意:

低位在前)。

(2)启动DS18B20温度转换操作

单片机向DS18B20发送跳过64位光刻ROM号码匹配指令0xCCH(假设只有一片DS18B20挂接在总线上);

单片机向DS18B20发送启动温度转换指令0x44H;

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

(3)读取温度操作

单片机向DS18B20发送读中间结果暂存RAM指令0xBEH;

单片机从单总线上一位接着一位地读取,连续读取两个字节的数据(低字节在前,高位在前),得到温度值的低字节和高字节数据。

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

①DS18B20的操作时序很严格,特别是延时,要比较精确才行。

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

②由于DS18B20是单总线的,只有一条线与单片机的一个I/O管脚相连接。

在初始化、指令数据、64位光刻ROM号码、温度值等等数据中,有些数据是从单片机发送到DS18B20的,有些数据是从DS18B20传送到单片机的,所有数据都是(也只能)借助这一条总线在传输,所以数据是在单片机与DS18B20之间一位一位地串行传输的。

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

前面已经提及,由于DS18B20是单总线的,所以其操作时序很严格,特别是延时,要比较精确才行。

(1)DS18B20的初始化

DS18B20的初始化时序如图11-8所示。

图11-8DS18B20的初始化时序

DS18B20的初始化时序是:

①首先是单片机发送一低电平到单一数据总线上,将单总线拉低,拉低的时间至少是480μs,但不能超过960μs。

实际中一般取750μs左右;

②然后,单片机释放单总线的控制权,转而准备被动地接收DS18B20发送来的数据。

此时,焊接在单总线上5KΩ的上拉电阻,将单总线由低电平拉高到高电平,此电平从低到高的上升沿被DS18B20捕捉到以后,单总线转而由DS18B20控制了;

③当DS18B20控制了总线时,在等待15~60μs以后,DS18B20将单总线再次拉低,作为向单片机做出的回应,表明自己(DS18B20)已经就绪,准备接收后续的指令等等。

DS18B20将单总线拉低的时间至少是60μs,但不能超过240μs。

④随后,DS18B20释放单总线,单总线上5KΩ的上拉电阻,再次将单总线由低电平拉高到高电平。

此时DS18B20的初始化完成。

具体到程序设计时,可以简化初始化过程。

实现如下:

◆首先,单片机发送一低电平到单一数据总线上,将单总线拉低,这一低电平的持续时间是750μs左右,时间值750μs=480μs+40μs+230μs,其中480μs是单片机将总线拉低所需的最少时间,40μs是单片机释放总线后DS18B20等待时间(大约),230μs是DS18B20的反馈回应的低电平时间。

这样处理的目的,是忽略DS18B20的反馈回应,改为延时处理,原因是单片机将总线拉低后,何时释放总线不太好把握,自然不太好确定何时接收DS18B20反馈回应的低电平,采用延时以后,可以不必考虑单片机何时释放总线、DS18B20等待多长时间、DS18B20发回应低电平多长一段时间后又释放总线、而总线又被上拉电阻拉高。

只要这些过程结束后,单总线是高电平就行,所以进入下一步骤:

拉高总线。

◆然后,单片机发送一高电平到单一数据总线上,将单总线拉高,拉高的时间500μs左右;

(2)单片机向DS18B20写数据

单片机向DS18B20写一位数据的时序图如图11-9所示。

图11-9单片机向DS18B20写一位数据的时序

单片机向DS18B20写一位数据的时序:

①首先,单片机将单总线拉低(延时时间小于15μs)

②然后,如果单片机向DS18B20写的数是二进制数0,则单片机继续将单总线拉低,让DS18B20采样当前单总线上的数据(低电平,即数据0),此总线拉低的延时时间最大45μs,因为单片机向DS18B20写一位数据的时间必须在60μs内完成;

如果单片机向DS18B20写的数是二进制数1,则单片机释放总线,由外接上拉电阻将单总线拉高,供DS18B20采样当前单总线上的数据(高电平,即数据1)。

实际编程中,将上拉电阻拉高总线更改为单片机将单总线拉高——只要得到高电平,不必考虑由谁将其拉高。

同样,此拉高的延时时间最大也是45μs,以此保证单片机向DS18B20写一位数据的时间必定在60μs内完成;

③最后,单片机再次将单总线拉高,准备下一位数据写入DS18B20,一般在总线拉高后延时10μs左右。

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

◆单片机将单总线拉低,延时15μs;

◆如果写0:

单片机将单总线拉低,延时60μs;

如果写1:

单片机将单总线拉高,延时40μs;

◆单片机将单总线拉高,延时10μs;

(3)单片机从DS18B20读数据

单片机从DS18B20读一位数据的时序如图11-10所示。

图11-10单片机从DS18B20读一位数据的时序

从图11-10可以看到,单片机从DS18B20读一位数据时序比较严格,留给单片机采样窗口很窄,单片机从DS18B20读取一位二进制数据的时间,必须控制在开始读以后的15μs以内。

具体分析如下:

◆首先,单片机将单总线拉低,拉低后的延时时间极短,一般在1μs以内;

◆然后,单片机释放单总线,由DS18B20将单总线拉低,或者由外接上拉电阻将单总线拉高,供单片机去采样0或者1。

需要强调的是:

此时单片机只是读取这些高低电平,而不是控制单总线被拉低或者拉高。

整个拉低或者拉高电平的持续时间只有15-2=13μs左右,单片机此时应抓紧时间去读取,否则电平就要发生变化。

◆然后,单片机将单总线拉高,这一点不是单片机从DS18B20读一位数据的时序要求决定的,而是51单片机的I/O口在输入数据前必须先写1决定的。

为了使单片机I/O口读取数据稳定,此处一般延时8μs左右;

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

11.3DS18B20温度传感器测温实例1

功能要求:

单片机与一片DS18B20连接,在1602液晶屏第一行,显示所测的温度值(数据已处理过),以及中间结果暂存RAM的字节地址0和字节地址1的温度值(数据未处理);

在1602液晶屏第二行,显示该片DS18B20的64位光刻ROM号码。

硬件说明:

硬件电路图如图11-11所示。

注意DQ引脚接有一个10KΩ的上拉电阻。

实际练习结果如图11-12所示。

图11-11一片DS18B20与单片机的连接

程序清单如下:

#include<

reg52.h>

#include<

intrins.h>

#defineucharunsignedchar

#defineuintunsignedint

sbitRS=P2^0;

sbitRW=P2^1;

sbitE=P2^2;

sbitDQ=P2^3;

uinttemp;

ucharwdL,wdH;

staticucharsn[8]={0};

ucharcodeb2hex[]="

0123456789ABCDEF"

;

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

voidwrcmd1602(ucharcmd)

{

ucharm;

RW=0;

RS=0;

P1=cmd;

for(m=0;

m<

=2;

m++);

E=1;

E=0;

}

voidwrdata1602(ucharshuju)

{

ucharm;

RW=0;

RS=1;

P1=shuju;

voidinit1602(void)

E=0;

wrcmd1602(0x38);

wrcmd1602(0x0c);

wrcmd1602(0x06);

wrcmd1602(0x01);

voiddisp1602(ucharx,uchary,ucharch)

wrcmd1602(0x80+x*0x40+y);

=252;

wrdata1602(ch);

}

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

voidinit18b20(void)

DQ=0;

=90;

//延时732us

DQ=1;

=65;

//延时532us

voidwrcmd18b20(ucharcmd18b20)

bitsendbit;

uchari,m;

for(i=1;

i<

=8;

i++)

{

sendbit=cmd18b20&

0x01;

cmd18b20=cmd18b20>

>

1;

if(sendbit==0)

{

DQ=0;

for(m=0;

//延时12us

=20;

//延时66us

DQ=1;

for(m=0;

}

else

=1;

//延时9us

DQ=1;

=10;

//延时36us

}

bitrdbit18b20(void)

bitonebit;

DQ=0;

_nop_();

DQ=1;

//单片机的I/O口要输入,必须先写入1

onebit=DQ;

//延时36us

return(onebit);

ucharrdbyte18b20(void)

uchari,j;

uintwenduzhi=0;

for(i=1;

j=rdbit18b20();

wenduzhi=(j<

<

7)|(wenduzhi>

1);

return(wenduzhi);

voidstconv18b20(void)

ucharm,n;

init18b20();

//延时9us

wrcmd18b20(0xCC);

wrcmd18b20(0x44);

for(n=0;

n<

=250;

n++)

//延时760ms

uintrdwendu(void)

wrcmd18b20(0xCC);

wrcmd18b20(0xBE);

wdL=rdbyte18b20();

wdH=rdbyte18b20();

te

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 艺术创意

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2