单总线温度传感器DS18B20

合集下载

使用DS18B20温度传感器测温

使用DS18B20温度传感器测温

第11章使用DS18B20温度传感器测温11.1 概述现实生产生活中,小到测量体温的温度计,大到航天飞机的温控系统,处处都离不开温度测量。

工业生产中的三大指标(流量、压力、温度)之一就是温度,温度测量可以说是无处不在,遍布了我们生活生产的方方面面。

DS18B20温度传感器是美国DALLAS半导体公司生产的数字化温度传感器,它与以往模拟量温度传感器不同,数字化是其一大特点,它能将被测环境温度直接转化为数字量,并以串行数据流的形式传输给单片机等微处理器去处理。

DS18B20温度传感器的另一个主要特点是它是单总线的,即它与单片机等微处理器连接时,只需占用一个I/O管脚,并且不再需要其它任何外部元器件,这大大简化了它与但单片机之间的接口电路。

11.2 DS18B20温度传感器介绍目前,使用最普遍的DS18B20温度传感器是三脚TO-92直插式封装这一种,这种封装的DS18B20实物如图11-1所示。

可以看到它体积很小,只有三只管脚,外形与一般的三极管极其相似。

图11-2是其三脚TO-92直插式封装图,表11-1列出了DS18B20各个引脚的定义。

如图11-1 如图11-2表11-1 DS18B20引脚定义。

1、DS18B20温度传感器特性简介◆独特的单总线(一条线)接口,与微处理器通信只需一个I/O管脚,且硬件连接无需其它外部元件;◆测量结果直接输出数字量,可直接与微处理器通信;◆供电电压范围3.0V~5.5V;在寄生电源方式下可有数据线供电;◆测温范围-55℃~+125℃;在-10℃~+85℃范围内,测量精度可达±0.5℃;◆可编程的9~12位测温分辨率,对应的可分辨温度值分别为0.5℃,0.25℃,0.125℃,0.0625℃;12位分辨率时的温度测量转换最长时间(上限)只有750ms;◆每一片DS18B20都有自己独一无二的芯片号码;多片DS18B20可以并联在一条数据总线上实现不同地点的多点组网;◆应用范围包括温度调控,工业现场测温,消费类产品,温度计及热敏系统等。

温度传感器ds18b20实验报告

温度传感器ds18b20实验报告

温度传感器ds18b20实验报告温度传感器DS18B20实验报告引言温度传感器在现代生活中扮演着重要的角色,它们被广泛应用于各种领域,包括工业、医疗、农业等。

DS18B20是一种数字温度传感器,具有精准的测量能力和数字输出,因此备受青睐。

本实验旨在通过对DS18B20温度传感器的测试和分析,探讨其性能和应用。

实验目的1. 了解DS18B20温度传感器的工作原理和特性。

2. 测试DS18B20温度传感器的测量精度和响应速度。

3. 探讨DS18B20温度传感器在实际应用中的优缺点。

实验器材1. DS18B20温度传感器2. Arduino开发板3. 4.7kΩ电阻4. 连接线5. 电脑实验步骤1. 将DS18B20温度传感器连接到Arduino开发板上,并接入4.7kΩ电阻。

2. 编写Arduino程序,通过串口监视器输出DS18B20传感器的温度数据。

3. 将DS18B20传感器置于不同的温度环境中,记录其输出的温度数据。

4. 分析DS18B20传感器的测量精度和响应速度。

5. 探讨DS18B20传感器在实际应用中的优缺点。

实验结果经过实验测试,DS18B20温度传感器表现出了较高的测量精度和响应速度。

在不同温度环境下,其输出的温度数据与实际温度基本吻合,误差较小。

此外,DS18B20传感器具有数字输出,易于与各种微控制器和单片机进行连接,应用范围广泛。

然而,DS18B20传感器在极端温度环境下可能出现测量误差,且价格较高,需要根据实际需求进行选择。

结论DS18B20温度传感器具有较高的测量精度和响应速度,适用于各种温度测量场景。

然而,在选择和应用时需要考虑其价格和适用范围,以确保满足实际需求。

希望本实验能够为DS18B20温度传感器的应用提供参考和借鉴,推动其在各个领域的发展和应用。

DS18B20 温度传感器

DS18B20 温度传感器

目录摘要²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²2 关键词²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²2 实验任务²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²2 实验目的²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²2 电路原理图²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²2 元件列表²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²2 “单线总线”通信协议简介²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²2 使用DS18B20作为传感器²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²3 DS18B20简介²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²3 DS18B20的内部结构²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²4 DS18B20内部结构图²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²4 DS18B20的使用注意事项²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²5 DS18B20的工作原理²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²5 DS18B20测温原理框图²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²6 DS18B20引脚定义²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²6 1602 ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²6焊接操作要领²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²10 焊接后的处理²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²11 三极管²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²12 电容²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²12相关程序²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²13 总结²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²19 心得体会²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²19 原理图²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²20 硬件图²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²21实验任务:DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。

温度传感器DS18B20PPT课件

温度传感器DS18B20PPT课件
23 22 21 20 2-1 2-2 2-3 2-4
MS Byte:
Bit Bit Bit Bit Bit Bit Bit Bit 11111198 543210
S
S
S
S
S 精2选6PPT课2件5
24
4
Bit7 23
Bit6 22
Bit5 21
Bit4 20
Bit3 2-1
Bit2 2-2
Bit1 2-3
2. 存在脉冲:在复位电平结束之后,控制器应该将数据单总线拉高, 以便于在15~60uS后接收存在脉冲,存在脉冲为一个60~240uS的 低电平信号。
3. 控制器发送ROM指令:双方打完了招呼之后最要将进行交流了, ROM指令共有5条,每一个工作周期只能发一条,ROM指令分别 是读ROM数据、指定匹配芯片、跳跃ROM、芯片搜索、报警芯 片搜索。ROM指令在下文有详细的介绍。
精选PPT课件
8
DS28B20芯片存储器操作指令表
Write Scratchpad (向RAM中写数据)[4EH] Read Scratchpad (从RAM中读数据)[BEH] Copy Scratchpad (将RAM数据复制到EEPROM中)
[48H] Convert T(温度转换)[44H] Recall EEPROM(将EEPROM中的报警值复制到
例如:+125℃的数字输出为 07D0H,+25.0625℃的数字输 出为 0191H,-25.0625℃的数字输出为 FF6FH,-55℃的数字输 出为 FC90H。
精选PPT课件
5
控制器对DS18B20操作流程
1. 复位:由单片机给DS18B20单总线500uS的低电平信号。当18B20 接到此复位信号后则会在15~60uS后回发一个芯片的存在脉冲。

DS18B20温度传感器使用简介

DS18B20温度传感器使用简介

DS18B20温度传感器使⽤简介DS18xx系列温度传感器是数字式温度传感器,相对于传统温度传感器精度⾼、稳定性好、电路简单、控制⽅便,在这⾥以DS18B20为例做简单应⽤介绍。

详细资料请参阅芯⽚⼿册。

⼀、特性:(1)应⽤中不需要外部任何元器件即可实现测温电路。

(2)测温范围-55~+125℃,最⼤精度0.0625℃。

(3)只通过⼀条数据线即可实现通信。

(4)每个DS1820器件上都有独⼀⽆⼆的序列号,所以⼀条数据线上可以挂接很多该传感器。

(5)内部有温度上、下限告警功能。

⼆、操作简介DS18B20⼯作时需要接收特定的指令来完成相应功能(指令,可以简单的理解为可以被识别并有相应意义的⼀系列⾼低电平信号),它的指令可分为ROM指令和RAM指令;ROM指令主要对其内部的ROM进⾏操作,如查所使⽤DS18B20的序列号等,如果只使⽤⼀个DS18B20,ROM操作⼀般就可以直接跳过了;RAM指令主要是完成对其内RAM中的数据进⾏操作,如让其开始进⾏数据采集、读数据等。

DS18B20数字温度传感器是单总线器件,数据的读写只通过⼀条数据线进⾏并且这⼀条线上允许挂很多该传感器;这样对器件进⾏读写指令时就会⿇烦⼀些,必须应⽤特定时序来识别⾼低电平信号(如写⾼电平1,并不是把数据线直接拉⾼,⽽是⽤有⼀定时序关系的⾼低电平来代表写1),所以指令表中的0、1在写给DS18B20时就得变成代表0、1电平的时序段序列。

同样,从DS18B20读数据时,也是由特定的时序来完成数据读取。

对DS18B20进⾏读写的时序图如下:硬件连接⽅式有两种,⼀种是由单独电源供电(3~5V);第⼆种是由数据线为DS18B20供电(⼯作速度相对较慢)。

单独电源供电⽅式数据线为DS1820供电⽅式三、DS1820的⼯作过程:1. 复位操作2. 执⾏ROM操作的5条指令之⼀:1)读ROM,2)匹配ROM,3)搜索ROM,4)跳过ROM,5)报警搜索。

DS18B20温度传感器的控制方法

DS18B20温度传感器的控制方法

DS18B20温度传感器的控制方法DS18B20的初始化:(1)先将数据线置高电平“1”。

(2)延时(该时间要求的不是很严格,但是尽可能的短一点)(3)数据线拉到低电平“0”。

(4)延时750微秒(该时间的时间范围可以从480到960微秒)。

(5)数据线拉到高电平“1”。

(6)延时等待(如果初始化成功则在15到60毫秒时间之内产生一个由DS18B20所返回的低电平“0”。

据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制)。

(7)若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)最少要480微秒。

(8)将数据线再次拉高到高电平“1”后结束。

DS18B20的写操作:(1)数据线先置低电平“0”。

(2)延时确定的时间为15微秒。

(3)按从低位到高位的顺序发送字节(一次只发送一位)。

(4)延时时间为45微秒。

(5)将数据线拉到高电平。

(6)重复上(1)到(6)的操作直到所有的字节全部发送完为止。

(7)最后将数据线拉高。

DS18B20的读操作:(1)将数据线拉高“1”。

(2)延时2微秒。

(3)将数据线拉低“0”。

(4)延时15微秒。

(5)将数据线拉高“1”。

(6)延时15微秒。

(7)读数据线的状态得到1个状态位,并进行数据处理。

(8)延时30微秒。

根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。

复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。

表2 ROM指令表指令约定代码功能读ROM 33H 读DS1820温度传感器ROM中的编码(即64位地址)符合ROM 55H 发出此命令之后,接着发出64 位ROM 编码,访问单总线上与该编码相对应的DS1820 使之作出响应,为下一步对该DS1820 的读写作准备。

DS18B20中文资料

DS18B20中文资料在现代电子技术领域,温度测量是一项非常重要的任务。

而DS18B20 作为一款常用的数字温度传感器,以其出色的性能和简单的接口,在各种温度测量应用中得到了广泛的应用。

DS18B20 是由美国达拉斯半导体公司(Dallas Semiconductor)推出的一款单线数字温度传感器。

它具有体积小、硬件开销低、抗干扰能力强、精度高等优点。

从外观上看,DS18B20 通常采用小型的TO-92 封装或者SOP 封装,这使得它能够轻松集成到各种电路中,占用极小的空间。

在性能方面,DS18B20 的测量范围非常广泛,从-55℃到+125℃,能够满足大多数实际应用场景的温度测量需求。

其测量精度在-10℃到+85℃范围内可达到 ±05℃,这对于很多对温度精度要求较高的场合来说,是非常出色的表现。

DS18B20 之所以能够在众多温度传感器中脱颖而出,很大程度上得益于其独特的单线接口。

这意味着它只需要一根数据线就可以与微控制器进行通信,大大简化了电路设计和布线工作。

在使用 DS18B20 进行温度测量时,首先需要将其正确连接到微控制器。

通常,将 DS18B20 的数据线连接到微控制器的一个通用输入输出引脚(GPIO)上。

然后,通过微控制器发送特定的指令来启动温度转换,并读取转换后的温度值。

DS18B20 的工作原理基于其内部的温度敏感元件和模数转换电路。

当接收到温度转换指令后,传感器内部的温度敏感元件会感知当前环境温度,并将其转换为对应的数字信号,然后通过单线接口传输给微控制器。

在编程方面,不同的微控制器平台可能会有一些差异,但基本的流程大致相同。

一般来说,需要先初始化单线接口,然后发送复位脉冲和搜索 ROM 指令来识别总线上的 DS18B20 设备。

接着,发送启动温度转换指令,并等待转换完成。

最后,读取转换后的温度数据,并进行相应的处理和显示。

为了确保测量的准确性和稳定性,在实际应用中还需要注意一些问题。

DS18B20温度传感器资料

DS18B20 单线温度传感器一.特征:●独特的单线接口,只需 1 个接口引脚即可通信●每个设备都有一个唯一的64位串行代码存储在光盘片上●多点能力使分布式温度检测应用得以简化●不需要外部部件●可以从数据线供电,电源电压范围为3。

0V至5。

5V●测量范围从-55 ° C至+125 ° C(—67 ° F至257 ° F),从—10℃至+85 ° C的精度为0。

5 °C●温度计分辨率是用户可选择的9至12位●转换12位数字的最长时间是750ms●用户可定义的非易失性的温度告警设置●告警搜索命令识别和寻址温度在编定的极限之外的器件 (温度告警情况)●采用8引脚SO(150mil),8引脚SOP和3引脚TO — 92封装●软件与DS1822兼容●应用范围包括恒温控制工业系统消费类产品温度计或任何热敏系统二.简介该DS18B20的数字温度计提供9至12位的摄氏温度测量,并具有与非易失性用户可编程上限和下限报警功能。

信息单线接口送入 DS1820 或从 DS1820 送出,因此按照定义只需要一条数据线(和地线)与中央微处理器进行通信.它的测温范围从—55 °C到 +125 ° C,其中从—10 °C至+85 °C可以精确到0。

5°C 。

此外,DS18B20可以从数据线直接供电(“寄生电源"),从而消除了供应需要一个外部电源。

每个 DS18B20 的有一个唯一的64位序列码,它允许多个DS18B20s的功能在同一1-巴士线.因此,用一个微处理器控制大面积分布的许多DS18B20s是非常简单的。

此特性的应用范围包括 HVAC、环境控制、建筑物、设备或机械内的温度检测以及过程监视和控制系统.三.综述64位ROM存储设备的独特序号。

存贮器包含2个字节的温度寄存器,它存储来自温度传感器的数字输出。

18B20

2.2 器件选择2.2.1 温度传感器在现代检测技术中,传感器占据着不可动摇的重要位置。

主机对数据的处理能力已经相当的强,但是对现实世界中的模拟量却无能为力。

如果没有各种精确可靠的传感器对非电量和模拟信号进行检测并提供可靠的数据,那计算机也无法发挥他应有的作用。

传感器把非电量转换为电量,经过放大处理后,转换为数字量输入计算机,由计算机对信号进行分析处理。

从而传感器技术与计算机技术结合起来,对自动化和信息化起重要作用。

采用各种传感器和微处理技术可以对各种工业参数及工业产品进行测控及检验,准确测量产品性能,及时发现隐患。

为提高产品质量、改进产品性能,防止事故发生提供必要的信息和更可靠的数据。

由于系统的工作环境比较恶劣,且对测量要求比较高,所以选择合适的传感器很重要。

目前,国际上新型温度传感器正从模拟式向数字式、从集成化向智能化和网络化的方向飞速发展。

智能温度传感器DS18B20正是朝着高精度、多功能、总线标准化、高可靠性及安全性、开发虚拟传感器和网络传感器、研制单片测温系统等高科技的方向迅速发展。

因此,智能温度传感器DS18B20作为温度测量装置已广泛应用于人民的日常生活和工农业生产中[5]。

2.2.1.1 DS18B20简介DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种数字化单总线器件。

属于新一代适配微处理器的改进型智能温度传感器。

与传统的热敏电阻相比,它能够直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。

可以分别在93.75ms和750ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。

因而使用DS18B20可使系统结构更趋简单,可靠性更高。

同时其“一线总线”独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入了全新的概念。

ds18b20工作原理

ds18b20工作原理
DS18B20是一种数字温度传感器,它能够通过一根数据线来传输温度数据,因此非常适合用于需要长距离传输温度数据的应用场景。

那么,DS18B20是如何工作的呢?接下来我们将详细介绍DS18B20的工作原理。

首先,DS18B20内部包含一个温度传感器和一个存储器,这个存储器用来存储唯一的64位ROM代码。

这个ROM代码可以用来区分不同的DS18B20传感器。

当我们连接DS18B20到一个微处理器或者微控制器时,可以通过这个ROM代码来识别不同的传感器。

其次,DS18B20采用的是单总线通信协议,这意味着它只需要一根数据线就可以和微处理器或者微控制器进行通信。

这种通信协议大大简化了连接的复杂性,也降低了成本。

当我们需要获取DS18B20传感器的温度数据时,我们可以通过发送一系列的命令来实现。

首先,我们需要发送启动转换命令,这个命令会让DS18B20开始进行温度转换。

接着,我们需要发送读取温度命令,DS18B20会将转换好的温度数据发送回来,我们可以通过解析这个数据来获取实际的温度数值。

另外,DS18B20还具有一些特殊的工作模式,比如它可以进入低功耗模式以节省能量。

在这种模式下,DS18B20会进入休眠状态,不进行温度转换,这样可以延长传感器的使用寿命。

总的来说,DS18B20的工作原理非常简单而有效。

它通过单总线通信协议和内部的温度传感器来实现温度数据的传输和获取。

同时,它还具有一些特殊的工作模式,可以满足不同应用场景的需求。

希望通过本文的介绍,你对DS18B20的工作原理有了更清晰的认识。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单总线温度传感器DS18B20DS18B20是DALLAS公司生产的单总线式数字温度传感器,它特别适用于构成多点温度测控系统,可直接将温度转化成串行数字信号(提供9位二进制数字)给单片机处理,且在同一总线上可以挂接多个传感器芯片。

它具有3引脚TO-92小体积封装形式,温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出,其工作电源既可在远端引入,也可采用寄生电源方式产生,多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与多个DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。

以上特点使DS18B20非常适用于远距离多点温度检测系统。

⑴ DS18B20外形及引脚说明外形及引脚如图2所示:图2 管脚排列图在TO-92和SO-8的封装中引脚有所不同,具体差别请查阅PDF手册,在TO-92封装中引脚分配如下:1(GND):地2(DQ):单线运用的数据输入输出引脚3(VDD):可选的电源引脚⑵ DS18B20工作过程及时序DS18B20内部的低温度系数振荡器是一个振荡频率随温度变化很小的振荡器,为计数器1提供一频率稳定的计数脉冲。

高温度系数振荡器是一个振荡频率对温度很敏感的振荡器,为计数器2提供一个频率随温度变化的计数脉冲。

初始时,温度寄存器被预置成-55℃,每当计数器1从预置数开始减计数到0时,温度寄存器中寄存的温度值就增加1℃,这个过程重复进行,直到计数器2计数到0时便停止。

初始时,计数器1预置的是与-55℃相对应的一个预置值。

以后计数器1每一个循环的预置数都由斜率累加器提供。

为了补偿振荡器温度特性的非线性性,斜率累加器提供的预置数也随温度相应变化。

计数器1的预置数也就是在给定温度处使温度寄存器寄存值增加1℃计数器所需要的计数个数。

DS18B20内部的比较器以四舍五入的量化方式确定温度寄存器的最低有效位。

在计数器2停止计数后,比较器将计数器1中的计数剩余值转换为温度值后与0.25℃进行比较,若低于0.25℃,温度寄存器的最低位就置0;若高于0.25℃,最低位就置1;若高于0.75℃时,温度寄存器的最低位就进位然后置0。

这样,经过比较后所得的温度寄存器的值就是最终读取的温度值了,其最后位代表0.5℃,四舍五入最大量化误差为±1/2LSB,即0.25℃。

温度寄存器中的温度值以9位数据格式表示,最高位为符号位,其余8位以二进制补码形式表示温度值。

测温结束时,这9位数据转存到暂存存储器的前两个字节中,符号位占用第一字节,8位温度数据占据第二字节。

DS18B20测量温度时使用特有的温度测量技术。

DS18B20内部的低温度系数振荡器能产生稳定的频率信号;同样的,高温度系数振荡器则将被测温度转换成频率信号。

当计数门打开时,DS18B20进行计数,计数门开通时间由高温度系数振荡器决定。

芯片内部还有斜率累加器,可对频率的非线性度加以补偿。

测量结果存入温度寄存器中。

一般情况下的温度值应该为9位,但因符号位扩展成高8位,所以最后以16位补码形式读出。

DS18B20工作过程一般遵循以下协议:初始化→ROM操作命令→存储器操作命令→处理数据① 初始化单总线上的所有处理均从初始化序列开始。

初始化序列包括总线主机发出一复位脉冲,接着由从属器件送出存在脉冲。

存在脉冲让总线控制器知道DS1820 在总线上且已准备好操作。

② ROM操作命令一旦总线主机检测到从属器件的存在,它便可以发出器件ROM操作命令之一。

所有ROM操作命令均为8位长。

这些命令列表如下:Read ROM(读ROM)[33h]此命令允许总线主机读DS18B20的8位产品系列编码,唯一的48位序列号,以及8位的CRC。

此命令只能在总线上仅有一个DS18B20的情况下可以使用。

如果总线上存在多于一个的从属器件,那么当所有从片企图同时发送时将发生数据冲突的现象(漏极开路会产生线与的结果)。

Match ROM( 符合ROM)[55h]此命令后继以64位的ROM数据序列,允许总线主机对多点总线上特定的DS18B20寻址。

只有与64位ROM序列严格相符的DS18B20才能对后继的存贮器操作命令作出响应。

所有与64位ROM序列不符的从片将等待复位脉冲。

此命令在总线上有单个或多个器件的情况下均可使用。

Skip ROM( 跳过ROM )[CCh]在单点总线系统中,此命令通过允许总线主机不提供64位ROM编码而访问存储器操作来节省时间。

如果在总线上存在多于一个的从属器件而且在Skip ROM命令之后发出读命令,那么由于多个从片同时发送数据,会在总线上发生数据冲突(漏极开路下拉会产生线与的效果)。

Search ROM( 搜索ROM)[F0h]当系统开始工作时,总线主机可能不知道单线总线上的器件个数或者不知道其64位ROM编码。

搜索ROM命令允许总线控制器用排除法识别总线上的所有从机的64位编码。

Alarm Search(告警搜索)[ECh]此命令的流程与搜索ROM命令相同。

但是,仅在最近一次温度测量出现告警的情况下,DS18B20才对此命令作出响应。

告警的条件定义为温度高于TH 或低于TL。

只要DS18B20一上电,告警条件就保持在设置状态,直到另一次温度测量显示出非告警值或者改变TH或TL的设置,使得测量值再一次位于允许的范围之内。

贮存在EEPROM内的触发器值用于告警。

③ 存储器操作命令Write Scratchpad(写暂存存储器)[4Eh]这个命令向DS18B20的暂存器中写入数据,开始位置在地址2。

接下来写入的两个字节将被存到暂存器中的地址位置2和3。

可以在任何时刻发出复位命令来中止写入。

Read Scratchpad(读暂存存储器)[BEh]这个命令读取暂存器的内容。

读取将从字节0开始,一直进行下去,直到第9(字节8,CRC)字节读完。

如果不想读完所有字节,控制器可以在任何时间发出复位命令来中止读取。

Copy Scratchpad(复制暂存存储器)[48h]这条命令把暂存器的内容拷贝到DS18B20的E2存储器里,即把温度报警触发字节存入非易失性存储器里。

如果总线控制器在这条命令之后跟着发出读时间隙,而DS18B20又正在忙于把暂存器拷贝到E2存储器,DS18B20就会输出一个“0”,如果拷贝结束的话,DS18B20 则输出“1”。

如果使用寄生电源,总线控制器必须在这条命令发出后立即起动强上拉并最少保持10ms。

Convert T(温度变换)[44h]这条命令启动一次温度转换而无需其他数据。

温度转换命令被执行,而后DS18B20保持等待状态。

如果总线控制器在这条命令之后跟着发出读时间隙,而DS18B20又忙于做时间转换的话,DS18B20将在总线上输出“0”,若温度转换完成,则输出“1”。

如果使用寄生电源,总线控制器必须在发出这条命令后立即起动强上拉,并保持500ms。

Recall E2(重新调整E2)[B8h]这条命令把贮存在E2中温度触发器的值重新调至暂存存储器。

这种重新调出的操作在对DS18B20上电时也自动发生,因此只要器件一上电,暂存存储器内就有了有效的数据。

在这条命令发出之后,对于所发出的第一个读数据时间片,器件会输出温度转换忙的标识:“0”=忙,“1”=准备就绪。

Read Power Supply(读电源)[B4h]对于在此命令发送至DS18B20之后所发出的第一读数据的时间片,器件都会给出其电源方式的信号:“0”=寄生电源供电,“1”=外部电源供电。

④处理数据DS18B20的高速暂存存储器由9个字节组成,其分配如图3所示。

当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。

单片机可通过单线接口读到该数据,读取时低位在前,高位在后。

图3 高速暂存存储器分配图温度/0C二进制表示十六进制表示符号位(5位)数据位(11位)+125 0 0 0 0 0 1 1 1 1 1 0 1 0 0 0 0 07D0H+25.0625 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 1 0191H+10.125 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 00A2H+0.5 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0008H0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000H-0.5 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 FFF8H-10.125 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 0 FF5EH-25.625 1 1 1 1 1 1 1 0 0 1 1 0 1 1 1 1 FE6FH-55 1 1 1 1 1 1 0 0 1 0 0 1 0 0 0 0 FC90HDS18B20温度数据表上表是DS18B20温度采集转化后得到的12位数据,存储在DS18B20的两个8比特的RAM 中,二进制中的前面5位是符号位,如果测得的温度大于或等于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。

温度转换计算方法举例:例如当DS18B20采集到+125℃的实际温度后,输出为07D0H ,则: 实际温度=07D0H╳0.0625=2000╳0.0625=1250C 。

例如当DS18B20采集到-55℃的实际温度后,输出为FC90H ,则应先将11位数据位取反加1得370H (符号位不变,也不作为计算),则: 实际温度=370H ╳0.0625=880╳0.0625=550C 。

DS18B20软、硬件设计本实例介绍DS18B20与单片机之间的软、硬件接口,通过单片机来读取DS18B20的温度值,并将温度值通过数码管显示出来。

在实验中先要将功能选择开关调到DS18B20位置上。

硬件原理图6 硬件原理图程序流程图 图7 程序流程图 软件代码/***************************************************************************/ /*DS18B20演示程序 */ /*目标器件:AT89S51 *//*晶振:11.0592MHZ *//*编译环境:Keil 7.50A *//***************************************************************************/ /*********************************包含头文件********************************/ #include <reg51.h>/*******************************共阳LED段码表*******************************/ unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; /*********************************端口定义**********************************/ sbit DQ=P3^3; //数据传输线接单片机的相应的引脚/*********************************定义全局变量******************************/ unsigned char tempL=0; //临时变量低位unsigned char tempH=0; //临时变量高位float temperature; //温度值/**************************************************************************** 函数功能:延时子程序入口参数:k出口参数:****************************************************************************/ void delay(unsigned int k){unsigned int n;n=0;while(n < k){n++;}return;}/**************************************************************************** 函数功能:数码管扫描延时子程序入口参数:出口参数:****************************************************************************/ void delay1(void){int k;for(k=0;k<400;k++);}/**************************************************************************** 函数功能:数码管显示子程序入口参数:k出口参数:****************************************************************************/ void display(int k){P2=0xfe;P0=tab[k/1000];delay1();P2=0xfd;P0=tab[k%1000/100];delay1();P2=0xfb;P0=tab[k%100/10];delay1();P2=0xf7;P0=tab[k%10];delay1();P2=0xff;}/**************************************************************************** 函数功能:DS18B20初始化子程序入口参数:出口参数:****************************************************************************/ Init_DS18B20(void){unsigned char x=0;DQ=1; //DQ先置高delay(8); //延时DQ=0; //发送复位脉冲delay(85); //延时(>480ms)DQ=1; //拉高数据线delay(14); //等待(15~60ms)}/**************************************************************************** 函数功能:向DS18B20读一字节数据入口参数:出口参数:dat****************************************************************************/ ReadOneChar(void){unsigned char i=0;unsigned char dat=0;for (i=8;i>0;i--){DQ=1;delay(1);DQ=0;dat>>=1;DQ=1;if(DQ)dat|=0x80;delay(4);}return(dat);}/**************************************************************************** 函数功能:向DS18B20写一字节数据入口参数:dat出口参数:****************************************************************************/ WriteOneChar(unsigned char dat){unsigned char i=0;for(i=8;i>0;i--){DQ=0;DQ=dat&0x01;delay(5);DQ=1;dat>>=1;}delay(4);}/**************************************************************************** 函数功能:向DS18B20读温度值入口参数:出口参数:temperature****************************************************************************/ ReadTemperature(void){Init_DS18B20(); //初始化WriteOneChar(0xcc); //跳过读序列号的操作WriteOneChar(0x44); //启动温度转换delay(125); //转换需要一点时间,延时Init_DS18B20(); //初始化WriteOneChar(0xcc); //跳过读序列号的操作WriteOneChar(0xbe); //读温度寄存器(头两个值分别为温度的低位和高位)tempL=ReadOneChar(); //读出温度的低位LSBtempH=ReadOneChar(); //读出温度的高位MSB//温度转换,把高低位做相应的运算转化为实际温度temperature=((tempH*256)+tempL)*0.0625;delay(200);return(temperature);}/**************************************************************************** 函数功能:主程序入口参数:出口参数:****************************************************************************/ void main(){float i;while(1){i=ReadTemperature();display(i);}}1 ds1820 序列号获得;|------------------------------------------| ;| 读出 ds1820 序列号应用程序,P1.6 接ds1820 | ;|------------------------------------------| ORG 0000HAJMP MAINORG 0020HMAIN: MOV SP,#60HCLR EA ;使用ds1820 一定要禁止任何中断产生LCALL INT ;初始化ds1820MOV A,#33HLCALL WRITE ;送入读ds1820 的ROM 命令LCALL READ ;开始读出当前ds1820 序列号MOV 40H,ALCALL READMOV 41H,ALCALL READMOV 42H,ALCALL READMOV 43H,ALCALL READMOV 44H,ALCALL READMOV 45H,ALCALL READMOV 46H,ALCALL READMOV 47H,ASETB EASJMP $INT: CLR EA;初始化ds1820 子程序L0: CLR P1.6 ;ds1820 总线为低复位电平MOV R2,#200L1 CLR P1.6DJNZ R2,L1 ;总线复位电平保持400usSETB P1.6 ;释放ds1820 总线MOV R2,#30L4: DJNZ R2,L4 ;释放ds1820 总线保持60usCLR C ;清存在信号ORL C,P1.6JC L0 ;存在吗?不存在则重新来MOV R6,#80L5: ORL C,P1.6JC L3DJNZ R6,L5SJMP L0L3: MOV R2,#240L2: DJNZ R2,L2RETWRITE: CLR EA; 向ds1820 写操作命令子程序MOV R3,#8 ;写入ds1820 的bit 数,一个字节8 个bitWR1: SETB P1.6MOV R4,#8RRC A ;把一个字节data(A)分成8 个bit 环移给 CCLR P1.6 ;开始写入ds1820 总线要处于复位(低)状态WR2: DJNZ R4,WR2 ;ds1820 总线复位保持16usMOV P1.6,C ;写入一个bitMOV R4,#20WR3: DJNZ R4,WR3 ;等待40usDJNZ R3,WR1 ;写入下一个bitSETB P1.6 ;重新释放ds1820 总线RETREAD: CLR EAMOV R6,#8 ;连续读8 个bitRE1: CLR P1.6 ;读前总线保持为低MOV R4,#4NOPSETB P1.6 ;开始读总线释放RE2 DJNZ R4,RE2 ;持续8usMOV C,P1.6 ;从ds1820 总线读得一个bitRRC A ;把读得的位值环移给 AMOV R5,#30RE3: DJNZ R5,RE3 ;持续60usDJNZ R6,RE1 ;读下一个bitSETB P1.6 ;重新释放ds1820 总线RETEND2 温度转换和读取;|-----------------------------------------------------| ;| 获取单个ds1820 转化的温度值的应用程序,P1.6 接ds1820 | ;|-----------------------------------------------------| ORG 0000HAJMP MAINORG 0020HMAIN: MOV SP,#60HLCALL GET_TEMPSJMP $GET_TEMP:CLR PSW.4SETB PSW.3 ;设置工作寄存器当前所在的区域CLR EA ; 使用ds1820 一定要禁止任何中断产生LCALL INT ; 调用初使化子程序MOV A,#0CCHLCALL WRITE ; 送入跳过ROM 命令MOV A, #44HLCALL WRITE ;送入温度转换命令LCALL INT ; 温度转换完全,再次初使化ds1820MOV A,#0CCHLCALL WRITE ;送入跳过ROM 命令MOV A,#0BEHLCALL WRITE ;送入读温度暂存器命令LCALL READMOV R7,A ; 读出温度值低字节存入R7LCALL READMOV R6,A ; 读出谩度值高字节存入R6SETB EARETINT: CLR EA ;初始化ds1820 子程序L0: CLR P1.6 ;ds1820 总线为低复位电平MOV R2,#200L1:CLR P1.6DJNZ R2,L1 ;总线复位电平保持400usSETB P1.6 ;释放ds1820 总线MOV R2,#30L4: DJNZ R2,L4 ;释放ds1820 总线保持60usCLR C ;清存在信号ORL C,P1.6JC L0 ;存在吗?不存在则重新来MOV R6,#80L5: ORL C,P1.6JC L3DJNZ R6,L5SJMP L0L3: MOV R2,#240L2: DJNZ R2,L2RETWRITE: CLR EA ; 向ds1820 写操作命令子程序MOV R3,#8 ; 写入ds1820 的bit 数,一个字节8 个bit WR1: SETB P1.6MOV R4,#8RRC A ; 把一个字节data(A)分成8个bit 环移给 CCLR P1.6 ; 开始写入ds1820 总线要处于复位(低)状态WR2: DJNZ R4,WR2 ; ds1820 总线复位保持16usMOV P1.6,C ; 写入一个bitMOV R4,#20WR3: DJNZ R4,WR3 ;等待40usDJNZ R3,WR1 ;写入下一个bitSETB P1.6 ;重新释放ds1820 总线RETREAD: CLR EAMOV R6,#8 ;连续读8 个bitRE1: CLR P1.6 ;读前总线保持为低MOV R4,#4NOPSETB P1.6 ;开始读总线释放RE2: DJNZ R4,RE2 ;持续8usMOV C,P1.6 ;从ds1820 总线读得一个bitRRC A ;把读得的位值环移给 AMOV R5,#30RE3: DJNZ R5,RE3 ;持续60usDJNZ R6,RE1 ;读下一个bitSETB P1.6 ;重新释放ds1820 总线RETEND。

相关文档
最新文档