DS18B20测温教程

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

DS18B20

一、DS18B20背景介绍

美国Dallas半导体公司的数字化温度传感器DS18B20是世界上第一片支持 "一线总线"接口的温度传感器,在其内部使用了在板(O N-B0ARD)专利技术。全部传感元件及转换电路集成在形如一只三极管的集成电路内。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。

二、DS18B20主要特性

在传统的模拟信号远距离温度测量系统中,需要很好的解决引线误差补偿问题、多点测量切换误差问题和放大电路零点漂移误差问题等技术问题,才能够达到较高的测量精度。因此,DS18B20具有以下特性:

1.适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数据线供电

2.独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯

3.DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温

4.DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内

5.温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃

6.可编程的分辨率为9~12位,对应的可分辨温度分别为0.

5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温

7.在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快8.测量结果直接输出数字温度信号,以"一线总线"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力9.负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。

三、DS18B20的外形和内部结构

1、DS18B20的外形结构如下图所示:

DS18B20引脚定义:

(1)DQ为数字信号输入/输出端;

(2)GND为电源地;

(3)VDD为外接供电电源输入端。

2、DS18B20内部结构图如下所示:

DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。

四、DS18B20的工作原理

DS18B20测温原理如下图所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图中的斜率累加

器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。

读和写操作

各种操作命令都是向DS18B20写0和写1组成的命令字节,接收数据时也是从DS18B20读取0或1的过程。

写周期最少为60微秒,最长不超过120微秒,写周期一开始作为主机先把总线拉低1微秒表示写周期开始,随后若主机想写0,则继续拉低电平最少60微秒直至写周期结束,然后释放总线为高电平;若主机想写1,在一开始拉低总线电平1微秒后就释放总线为高电平,一直到写周期结束。而作为从机的DS18B20则在检测到总线被拉低后等待15微秒然后从15μs到45μs开始对总线采样,在采样期内总线为高电平则为1,若采样期内总线为低电平则为0。

对于读数据操作时序也分为读0时序和读1时序两个过程,读时序是从主机把单总线拉低之后,在1微秒之后就得释放单总线为高电平,以让DS18B20把数据传输到单总线上。DS18B20在检测到总线被拉低1微秒后,便开始送出数据,若是要送出0就把总线拉为低电平直到读周期结束;若要送出1则释放总线为高电平。主机在一开始拉低总线1微秒后释放总线,然后在包括前面的拉低总线电平1微秒在内的15微秒时间内完成对总线进行采样检测,采样期内总线为低电平则确认为0,采样期内总线为高电平则确认为1,完成一个读时序过程,至少需要60μs才能完成。

了解了它的结构和工作原理,我们来看一下它是怎么运用在51开发板中的吧!

它在开发板中的局部连接原理图如下图所示:

由原理图可知,当我们运用DS18B20温度传器模块时,我们需要用跳帽插在1WRIE对应的排针上,实现与主板的连接。当传感器监测到周围的温度时,显示在数码管上,所以需要把跳帽插在138A、138B、138C对应的排针上。烧进程序,复位后,显示如下图所示:

当你用手去触摸DS18B20温度传感器时,温度会发生变化:

那么,问题来了

开发板是怎么实现这一功能的呢?让我们来一起揭开它的神秘面纱吧!

Tip1.

/*************************此部分为DS18B20的驱动程序*************************************/ #pragma SRC

#include

#include

sbit D18B20=P1^7;

#define NOP() _nop_() /* 定义空指令 */

#define _Nop() _nop_() /*定义空指令*/

void TempDelay (unsigned char idata us);

void Init18b20 (void);

void WriteByte (unsigned char idata wr); //单字节写入

void read_bytes (unsigned char idata j);

unsigned char CRC (unsigned char j);

void GemTemp (void);

void Config18b20 (void);

void ReadID (void);

void TemperatuerResult(void);

bit flag;

unsigned int idata Temperature;

unsigned char idata temp_buff[9]; //存储读取的字节,read scratchpad为9字节,read rom ID为8字节

unsigned char idata id_buff[8];

unsigned char idata *p,TIM;

unsigned char idata crc_data;

unsigned char code CrcTable [256]={

0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,

157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,

35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98, 190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,

70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7, 219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154,

相关文档
最新文档