温度传感器DS18B20及其应用

Download Report

Transcript 温度传感器DS18B20及其应用

温度传感器DS18B20及其应用
内容提要
•
•
•
•
•
•
•
DS18B20简介
DS18B20引脚
DS18B20内部结构
DS18B20操作流程
DS18B20指令表
DS18B20时序图
DS18B20示例
DS18B20简介
DS18B20数字温度计是DALLAS公司生产的1-Wire,
即单总线器件,具有线路简单,体积小的特点。因此用它来组
成一个测温系统,具有线路简单,在一根通信线,可以挂很多
这样的数字温度计,十分方便。
DS18B20产品的特点
(1)、只要求一个端口即可实现通信。
(2)、在DS18B20中的每个器件上都有独一无二的序列
号。
(3)、实际应用中不需要外部任何元器件即可实现测温。
(4)、数字温度计的分辨率用户可以从9位到12位选择。
。
(5)、测量温度范围在-55到+125 C之间。在-10~+85℃
时精度为±0.5℃,可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、
0.125℃和0.0625℃,可实现高精度测温在9位分辨率时最多在93.75ms内把温度转换为数字,
12位分辨率时最多在750ms内把温度值转换为数字
(6)、内部有温度上、下限告警设置。
单线总线(一线总线)
• “单线总线”是一种在一条总线上具有单主
机多从机的总线系统(这条总线只有一条
口线),在“单线总线”可挂多个从机系
统。为了不引起逻辑上的冲突,所有从机
系统“单线总线”接口都是漏极开路的,
多个从机系统输出信号在总线上实现线
与,因此在使用时必须对总线外加上拉电
阻。为了保证数据的完整性,所有的单线
总线器件都要遵循严格的通信协议。
单线总线(一线总线)
• “单线总线”通信协议定义了复位脉冲、应
答脉冲、写时序(写0和写1)和读时序
(读1和读0)等几种信号类型。所有的单
线总线命令都是由这些基本的信号类型组
成。在这些信号中,除了应答脉冲(从机
发出)外,其他均由主机发出,并且发送
的这些命令和数据都是字节的低位在前,
高位在后,一位一位的读或写操作。
DS18B20引脚
名称
引脚功能描述
GND
电压地
外接电源地引脚
DQ
数据输入/
输出引脚
开漏单总线接口引脚
(需外接4.7千欧的上拉
电阻)。当被用在寄生
电源下,也可以向器件
提供电源。
VDD
电源电压
外接电源输入引脚。当
工作于寄生电源时,此
引脚必须接地。
NC
空引脚
不需连接
DS18B20与控制器连接图
常用工作方式(外接电源方式)
寄生工作方式(操作时有些特殊的要求)
DS18B20内部结构
• DS18B20共有三种形态的存储器资源:
ROM 只读存储器、RAM 数据暂存器、
EEPROM 非易失性存储器。
DS18B20内部结构
• ROM 只读存储器:用于存放DS18B20的ID编码,其前8位是
单线系列编码(DS18B20的编码是 28H),后面48位是芯片
唯一的序列号,最后8位是以上56的位的CRC码(冗余校验)。
数据在出产时设置不由用户更改。DS18B20共8个字节(64
位)ROM。
• RAM 数据暂存器:用于内部计算和数据的存取,数据在掉电
后丢失,DS18B20共9个字节RAM,每个字节为8位。第1、2
个字节是温度转换后的数据值信息,第3、4个字节是用户
EEPROM(常用于温度报警值储存)的镜像。在上电复位时
其值将被刷新。第5个字节则是用户第3个EEPROM的镜像。
第6、7、8个字节为计数寄存器,是为了让用户得到更高的温
度分辨率而设计的,同样也是内部温度转换、计算的暂存单
元。第9个字节为前8个字节的CRC码。
• EEPROM 非易失性存储器:用于存放长期需要保存的数据,
上下限温度报警值和用户配置寄存器,DS18B20共3个字节的
EEPROM,并在RAM都存在镜像,以方便用户操作。
DS18B20内部结构
DS18B20内部结构
RAM
温度值低位
(LS Byte)
温度值高位
(MS Byte)
EEPROM
高温限值
(TH)
高温限值
(TH)
低温限值
(TL)
低温限值
(TL)
配置寄存器
配置寄存器
保留
保留
保留
CRC校验值
用户配置寄存器
TM
R1
R0
 R1和R0用来设置分辨率,R1
如右表所示:
0
(DS18B20出厂时被设
0
置为12位)
1
 低五位一直都是“1”,
TM是测试模式位,用于 1
设置DS18B20在工作模
式还是在测试模式。在
DS18B20出厂时该位被
设置为0,用户不要去改
动。
1
1
1
1
1
R0
分辨率
温度最大转换时间
0
9位
93.75ms
1
10位
187.5ms
0
11位
375ms
1
12位
750ms
DS18B20温度值的转换
正负温度之间关系
DS18B20温度值的转换
• DS18B20可完成对温度的测量,
以12位转化为例:用16位符号
扩展的二进制补码读数形式提
供,以0.0625℃/LSB形式表达,
其中S为符号位。
• 这是12位转化后得到的12位数
据,存储在DS18B20的两个8
比特的RAM中,二进制中的前
面5位是符号位,如果测得的
温度大于0,这5位为0,只要
将测到的数值乘于0.0625即可
得到实际温度;
• 如果温度小于0,这5位为1,
测到的数值需要取反加1再乘
于0.0625即可得到实际温度。
DS18B20操作流程
• 控制器对DS18B20操作流程:
复位脉冲
1、 控制器发送复位信号:首先我
们必须对DS18B20芯片进行复位,复位就是由
控制器(单片机)给DS18B20单总线至少
480uS的低电平信号。当18B20接到此复位信
号后则会在15~60uS后回发一个芯片的存在脉
冲。
2、DS18B20回复存在脉冲应
应答脉冲
5条ROM操作指令之一
答:在复位电平结束之后,控制器应该将数
据单总线拉高,以便于在15~60uS后接收存在
脉冲,存在脉冲为一个60~240uS的低电平信
号。至此,通信双方已经达成了基本的协议,
接下来将会是控制器与18B20间的数据通信。
如果复位低电平的时间不足或是单总线的电路
断路都不会接到存在脉冲,在设计时要注意意
外情况的处理。
6条存储器操作指令之一
执行/数据传输
DS18B20操作流程
• 控制器对DS18B20操作流程:
复位脉冲
3、控制器发送ROM指令:双方打
完了招呼之后最要将进行交流了,ROM指令
共有5条,每一个工作周期只能发一条,
ROM指令分别是读ROM数据、指定匹配芯片、
跳跃ROM、芯片搜索、报警芯片搜索。ROM
指令为8位长度,功能是对片内的64位光刻
ROM进行操作。其主要目的是为了分辨一条
总线上挂接的多个器件并作处理。诚然,单
总线上可以同时挂接多个器件,并通过每个
器件上所独有的ID号来区别,一般只挂接单
个18B20芯片时可以跳过ROM指令(注意:
此处指的跳过ROM指令并非不发送ROM指令,
而是用特有的一条“跳过指令”)。ROM指
令在下文有详细的介绍。
应答脉冲
5条ROM操作指令之一
6条存储器操作指令之一
执行/数据传输
DS18B20操作流程
• 控制器对DS18B20操作流程:
复位脉冲
4、控制器发送存储器操作指令:在
ROM指令发送给18B20之后,紧接着(不间断)
就是发送存储器操作指令了。操作指令同样为8位,
共6条,存储器操作指令分别是写RAM数据、读
RAM数据、将RAM数据复制到EEPROM、温度转
换、将EEPROM中的报警值复制到RAM、工作方
式切换。存储器操作指令的功能是命令18B20作什
么样的工作,是芯片控制的关键。
应答脉冲
5条ROM操作指令之一
5、执行或数据读写:一个存储器操作指
令结束后则将进行指令执行或数据的读写,这个
操作要视存储器操作指令而定。如执行温度转换
指令则控制器(单片机)必须等待18B20执行其指
令,一般转换时间为800uS。如执行数据读写指令
则需要严格遵循18B20的读写时序来操作。数据的
读写方法将有下文有详细介绍。
6条存储器操作指令之一
执行/数据传输
DS18B20操作流程
• 若要读出当前的温度数据我们需要执行两
次工作周期,第一个周期为复位、跳过
ROM指令、执行温度转换存储器操作指令、
等待800uS温度转换时间。紧接着执行第二
个周期为复位、跳过ROM指令、执行读
RAM的存储器操作指令、读数据(最多为9
个字节,中途可停止,只读简单温度值则
读前2个字节即可)。其它的操作流程也大
同小异,在此不多介绍。
内部存储空间
• 根据DS18B20的通讯协议,主机
(单片机)控制DS18B20完成温度
转换必须经过三个步骤:
• 每一次读写之前都要对DS18B20进
行复位操作
• 复位成功后发送一条ROM指令
• 最后发送RAM指令
• 这样才能对DS18B20进行预定的操
作。复位要求主CPU将数据线下拉
500微秒,然后释放,当DS18B20收
到信号后等待16~60微秒左右,后
发出60~240微秒的存在低脉冲,主
CPU收到此信号表示复位成功。
DS18B20芯片ROM指令表
序
号
指
令
约定
代码
作
用
功
能
1
Read ROM
0x33
读 总线控制器读取DS18B20温度传感器64位
Rom ROM中的编码;有且只有一个DS18B20时才
指令 能使用,否则不能使用(多个DS18B20通信
时会发生数据冲突,导致错误出现)。
2
Match ROM
0x55
指定
匹配
芯片
指令
3
Skip ROM
总线控制器先发出此命令之后,接着发出 64
位 序列号,当单总线上有多个芯片中时,只
有与该序列号相对应的 DS1820才可以作出
响应,其他芯片将等待下一次复位。(适应
于单芯片和多芯片挂接)
0xCC 跳跃 有且只有一个DS18B20时,为节约时间,不
Rom 对Rom编码做出反应则可以选用此指令,否
指令 则不能使用(多个DS18B20通信时会发生数
据冲突,导致错误出现)。
DS18B20芯片ROM指令表
序
号
指
令
约定
代码
作
用
功
能
4
Search ROM
5
Alarm Search 0xEC 报警芯 在多个芯片挂接的情况下,执行此指令后
片搜索 只有温度超过设定值上限或下限的片子才
指令 做出响应;只要芯片不掉电,报警状态将
一直被保存,直到再一次测得温度达不到
报警条件为止(适用于单总线上挂接多个
DS18B20)
0xF0 搜索芯 用于确定挂接在同一总线上 DS1820 的个
片指令 数和识别 64 位 ROM 编码。为操作各器
件作好准备。(适用于单总线上挂接多个
DS18B20)
DS18B20芯片存储器操作指令表
序
号
指
令
约定
代码
作
用
功
能
1
Convert T
0x44
2
Read
0xBE 从RAM 按顺序读内部RAM中全部9个字节的内容;
Scratchpad
中读数 芯片允许在读过程中用复位信号终止读取,
据指令 即可以不读取后面不需要的字节以减少读
取时间。
3
Write
0x4E 向RAM 发出向内部RAM的3、4、5字节写数据命
Scratchpad
中写数 令,紧跟该命令之后,是传送三字节的数
据指令 据,分别存放报警RAM至TH、报警RAM
至TL和RAM配置寄存器中。
温度转 该指令可以启动DS18B20进行一次温度转
换指令 换,此后芯片需要一定时间进行温度转换
处理,12位转换时最长为750ms(9位为
93.75ms)。结果存入内部9字节RAM中
的第1、2地址中。(总线0——忙;1——
转换完成)
DS18B20芯片存储器操作指令表
序
号
指
令
约定
代码
4
Copy
0x48
Scratchpad
5
Recall
EEPROM
6
Read
Power
Supply
作
用
功
能
将RAM数
据复制到
EEPROM中
的指令
将RAM中第3 、4、5字节的内容复制
到EEPROM中,以使数据掉电不丢失;
此后芯片需要一定的时间进行存储处
理。 (总线0——忙;1——复制完成)
0xB8 将EEPROM
中数据复制
到RAM中
的指令
将EEPROM中内容复制到RAM中的第
3 、4、5字节,此后需要一定的时间
进行复制处理。 (总线0——忙;1—
—完成)另外,该指令将在芯片上电
复位时将被自动执行。
0xB4 读供电方式 读DS1820的供电模式。寄生供电时
DS1820发送“ 0 ”,外接电源供电
指令
DS1820发送“ 1 ”。
初始化(复位脉冲+应答脉冲)
主机发送复位脉冲;从机回复应答脉冲;
应答脉冲可以让主机知道从机设备正在一线总线上并且已经准
备好了,可以接收或发送数据了。
初始化(复位脉冲+应答脉冲)
//返回值为0——从机存在,并已经准备好了接收或发送数据
//返回值为1——从机不存在
//一线总线设备初始化包括2个部分:主机发送复位脉冲;从机如果存在则发送
存在的应答脉冲
bit rst1bus(void)
{
bit f;
DQ=1;//准备阶段
DQ=0 ;//将DQ线拉低
延时500us;//主机发送复位脉冲:480us至960us的低电平
DQ=1 ;//将DQ线拉高
延时40us;//主机释放总线:15us至60us的高电平
f=DQ;//从机如果存在则60us至240us内回复低电平
延时100us;
DQ=1;
延时350us;//结束阶段
return(f);//f=0:从设备存在;f=1:从设备不存在
}
写时间隙(写1、写0)
启动写时隙后的前15us之内必须把数据(0或1)准备好
两位数据之间间隔时间大于1us
写时间隙(写1、写0)
//位写入函数:每次写1位数据
//位变量参数x为1,则写1;位变量参数x为0,则写0
void writebit(bit x)
{
DQ=1;//准备阶段
DQ=0;
延时2us;//主机发送15us的低电平
if(x==1)
DQ=1;
延时60us;//从机DS18B20在至少60us内完成采样
DQ=1;//结束阶段
延时1us;
}
写字节函数
//写字节函数:每次写8位数据,即1字节数据;低位在前,高位在后
//输入参数为单字节变量x
void writebyte(unsigned char x)
{
bit f;
unsigned char i,t;
t=x;
for(i=0;i<8;i++)
{
f=(bit)(t&0x01);
t=t>>1;
writebit(f);//写1位数据;低位在前,高位在后
}
}
读时间隙(读0、读1)
启动读时隙后的前大于1us之后主机必须释放总线(DQ拉高),等
待15us左右,DB18B20线与DQ;15us时间末读取数据。
两位数据之间间隔时间大于1us
读时间隙(读0、读1)
//位读出函数:每次读1位数据
//返回值为位变量1,则读1;返回值为位变量0,则读0
bit readbit(void)
{
bit f;
DQ=1;//准备阶段
DQ=0;//1us的低电平
延时2us;
DQ=1;
延时10us;//主机释放总线15us
f=DQ;//主机采样DS18B20的线与运算
延时45us;
DQ=1;//结束阶段
延时1us;
return(f);
}
读字节函数
//读字节函数:每次读8位数据,即1字节数据;低位在前,高位在后
//返回值为单字节变量
unsigned char readbyte(void)
{
bit f;
unsigned char i,x=0;
for(i=0;i<8;i++)
{
x=x>>1;
f=readbit();
if(f==1)
x=x|0x80;//读1位数据;低位在前,高位在后
}
return(x);
}
DS18B20示例
 DS18B20的仿真模型在Data Converters里面
。。。。。。 //其他代码
f1=rst1bus();
if(f1==0)//f==0有设备存在,复位成功
{
writebyte(0xcc);//跳跃ROM指令
writebyte(0x44);//发送温度转换指令
g=readbit();
if(g==0)
{g=readbit();//为0,还没转换完成;为1:温度转换完成
}
f2=rst1bus();
if(f2==0)//f==0有设备存在,复位成功
{
writebyte(0xcc);//跳跃ROM指令
writebyte(0xBE);//发送读取RAM指令
for(i=0;i<2;i++)//可以读取2个字节,也可以最多读取9个字节
{wd[i]=readbyte();
}
}
}
。。。。。。//其他代码