温度传感器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();
}
}
}
。。。。。。//其他代码