DS18B20的使用方法.docx
《DS18B20的使用方法.docx》由会员分享,可在线阅读,更多相关《DS18B20的使用方法.docx(11页珍藏版)》请在冰豆网上搜索。
DS18B20的使用方法
图1DS18B20的封装图
DS18B20的特点:
1、DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内
2、温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃
3、支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定
4、工作电源:
3~5V/DC
5、可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温,测量结果以9~12位数字量方式串行传送
6、在9位分辨率时最多在93.75ms内把温度转换为数字量,12位分辨率时最多在750ms内把温度值转换为数字量,速度更快
7、测量结果直接输出数字温度信号,以"一线总线"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力
8、负压特性:
电源极性接反时,芯片不会因发热而烧毁,但不能正常工作
1)产品型号与规格
型号测温范围安装螺纹电缆长度适用管道
TS-18B20-55~125无1.5m
TS-18B20A-55~125M10X11.5mDN15~25
TS-18B20B-55~1251/2G接线盒DN40~60
图2
DS18B20测温原理如图2所示:
图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。
高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。
计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。
图2中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。
2)接线说明
特点:
独特的一线接口,只需要一条口线通信多点能力,简化了分布式温度传感器应用,无需外部元件可用数据总线供电,电压范围为3.0V至5.5V无需备用电源测量温度范围为-55℃至+125℃,-10℃至+85℃范围内精度为±0.5℃。
温度传感器可编程的分辨率为9~12位温度转换为12位数字格式最大值为750毫秒用户可定义的非易失性温度报警设置应用范围包括恒温控制,工业系统,消费电子产品温度计,或任何热敏感系统。
DS18B20提供9至12位温度输出。
信息发送从DS18B20通过1线接口,所以中央微处理器与DS18B20只有一条口线连接。
数据读写以及温度转换可以从数据线本身获得能量,不需要外接电源。
因为每一个DS18B20包含一个独特的序号,多个DS18B20可以同时存在于一条总线,这使得温度传感器可以放置在许多不同的地方。
它的用途很多,包括空调环境控制,感测建筑物内温设备或机器,并进行过程监测和控制。
3)DS18B20有4个主要的数据部件:
图3DS18B20内部结构图
DS18B20内部结构主要由四部分组成:
64位光刻ROM,温度传感器,非挥发的温度报警触发器TH和TL,配置寄存器。
(1)光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。
64位光刻ROM的排列是:
开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余检验码(CRC=X8+X5+X4+1)。
光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。
64位的光刻ROM又包括5个ROM的功能命令:
读ROM,匹配ROM,跳跃ROM,查找ROM和报警查找。
根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:
每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。
表1ROM指令表
指令
约定代码
功能
读ROM
33H
读DS18B20温度传感器ROM中的编码(即64位地址)
符合ROM
55H
发出此命令之后,接着发出64位ROM编码,访问单总线上与该编码相对应的DS18B20使之作出响应,为下一步对该DS18B20的读写作准备
搜索ROM
0F0H
用于确定挂接在同一总线上DS18B20的个数和识别64位ROM地址。
为操作各器件作好准备
跳过ROM
0CCH
忽略64位ROM地址,直接向DS18B20发温度变换命令,适用于单片工作
告警搜索命令
0ECH
执行后只有温度超过设定值上限或下限的片子才做出响应
表2RAM指令表
指令
约定代码
功能
温度转换
44H
启动DS18b20进行温度转换,12位转换时间最长为750ms(9位为93.75ms),结果存入内部9字节RAM中
读暂存器
0BEH
读内部RAM中9字节的内容
写暂存器
4EH
发出向内部RAM的3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送三字节的数据,三字节的数据分别被存到暂存器的第3、4、5字节
复制暂存器
48H
将RAM中第3、4、5字节的内容复制到E2PROM中
重调E2PR0M
0B8H
将E2PROM中内容恢复到RAM中的第3、4、5字节
读供电方式
0B4H
读DS18B20的供电模式。
寄生供电时DS18B20发送“0”,外接电源供电DS18B20发送“1”
(2)DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:
用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。
表3DS18B20温度值格式表
这是12位转化后得到的12位数据,存储在DS18B20的两个8bit的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。
例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FE6FH,-55℃的数字输出为FC90H。
表4DS18B20温度数据表
(3)DS18B20温度传感器的存储器
DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2PRAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。
存储器能完整的确定一线端口的通讯,数据开始用写寄存器的命令写进寄存器,接着也可以用读寄存器的命令来确认这些数据。
当确认以后就可以用复制寄存器的命令来将这些数据转移到可电擦除RAM中。
当修改过寄存器中的数据时,这个过程能确保数据的完整性。
高速暂存存储器由9个字节组成,其分配如表5所示。
当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第1和第2个字节。
CPU可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表3所示。
对应的温度计算:
当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。
第3和第4个字节是复制TH和TL,同时第3和第4个字节的数据可以更新;第5个字节是复制配置寄存器,同时第5个字节的数据可以更新;6、7、8三个字节是计算机自身使用。
第9个字节是冗余检验字节。
表5DS18B20暂存寄存器分布
寄存器内容
字节地址
温度值低位(LSByte)
1
温度值高位(MSByte)
2
高温限值(TH)
3
低温限值(TL)
4
配置寄存器
5
保留
6
保留
7
保留
8
CRC校验值
9
(4)配置寄存器该字节各位的意义如下:
表6配置寄存器结构
低五位一直都是"1",TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。
在DS18B20出厂时该位被设置为0,用户不要去改动。
R1和R0用来设置分辨率,如下表所示(DS18B20出厂时被设置为12位)。
表7温度分辨率设置表
4)DS18B20外部电源的连接方式
DS18B20可以使用外部电源VDD,也可以使用内部的寄生电源。
当VDD端口接3.0V~5.5V的电压时是使用外部电源;当VDD端口接地时使用了内部的寄生电源。
无论是内部寄生电源还是外部供电,I/O口线都要接4.7KΩ的上拉电阻。
DS18B20的外部电源供电方式在外部电源供电方式下,DS18B20工作电源由VDD引脚接入,此时I/O线不需要强上拉,不存在电源电流不足的问题,可以保证转换精度,同时在总线上理论可以挂接任意多个DS18B20传感器,组成多点测温系统。
注意:
在外部供电的方式下,DS18B20的GND引脚不能悬空,否则不能转换温度,读取的温度总是85℃。
图4外部电源连接
5)DS18B20温度处理过程
1、配置寄存器
配置寄存器是配置不同的位数来确定温度和数字的转化。
2、温度的读取
DS18B20在出厂时已配置为12位,读取温度时共读取16位,所以把后11位的2进制转化为10进制后再乘以0.0625便为所测的温度,还需要判断正负。
前5个数字为符号位,当前5位全为1时,读取的温度为负数;当前5位全为0时,读取的温度为正数。
16位数字摆放是从低位到高位。
3、DS18B20控制方法
DS18B20有六条控制命令(RAM):
见表2。
4、DS18B20的初始化
(1)总线主机发送一复位脉冲(最短为480us的低电平信号)
(2)总线主机释放总线,并进入接收方式
(3)单线总线经过5K的上拉电阻被拉至高电平状态
(4)DS18B20在I/O引脚上检测到上升沿之后,等待15-60us,接着发送存在脉冲(60us-240us的低电平信号)
初始化时序
5、向DS18B20发送控制命令
先通过总线向DS18B20发送ROM指令,对ROM进行操作;之后,发送ROM指令,来启动传感器或进行其它RAM操作,以完成对温度数据的转换。
6)DS1820使用中注意事项
DS1820虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题:
(1)较小的硬件开销需要相对复杂的软件进行补偿,由于DS18B20与微处理器间采用串行数据传送,因此,在对DS18B20进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。
在使用PL/M、C等高级语言进行系统程序设计时,对DS18B20操作部分最好采用汇编语言实现。
(2)在DS18B20的有关资料中均未提及单总线上所挂DS18B20数量问题,容易使人误认为可以挂任意多个DS18B20,在实际应用中并非如此。
当单总线上所挂DS18B20超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。
(3)连接DS18B20的总线电缆是有长度限制的。
试验中,当采用普通信号电缆传输长度超过50m时,读取的测温数据将发生错误。
当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一步加长。
这种情况主要是由总线分布电容使信号波形产生畸变造成的。
因此,在用DS18B20进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题。
(4)在DS18B20测温程序设计中,向DS18B20发出温度转换命令后,程序总要等待DS18B20的返回信号,一旦某个DS18B20接触不好或断线,当程序读该DS18B20时,将没有返回信号,程序进入死循环。
这一点在进行DS18B20硬件连接和软件设计时也要给予一定的重视。
测温电缆线建议采用屏蔽4芯双绞线,其中一对线接地线与信号线,另一组接VCC和地线,屏蔽层在源端单点接地。
数据的处理部分:
要求出正数的十进制值,必须将读取到的LSB字节,MSB字节进行整合处理,然后乘以0.0625即可。
Eg:
假设从,字节0读取到0xD0赋值于Temp1,而字节1读取到0x07赋值于Temp2,
然后求出十进制值。
unsignedintTemp1,Temp2,Temperature;
Temp1=0xD0;//低八位
Temp2=0x07;//高八位
Temperature=((Temp2<<8)|Temp1)*0.0625;
//又或者
Temperature=(Temp1+Temp2*256)*0.0625;//Temperature=125
在这里我们遇见了一个问题,就是如何求出负数的值呢?
很遗憾的,单片机不像人脑那
样会心算,我们必须判断BIT11~15是否是1,然后人为置一负数标志。
Eg.假设从,字节0读取到0x90赋值于Temp1,而字节1读取到0xFC赋值于Temp2,
然后求出该值是不是负数,和转换成十进制值。
unsignedintTemp1,Temp2,Temperature;
unsignedcharMinus_Flag=0;
Temp1=0x90;//低八位
Temp2=0xFC;//高八位
//Temperature=(Temp1+Temp2*256)*0.0625;//Temperature=64656
//很明显不是我们想要的答案
if(Temp2&0xFC)//判断符号位是否为1
{Minus_Flag=1;//负数标志置一
Temperature=((Temp2<<8)|Temp1)//高八位第八位进行整合
Temperature=((~Temperature)+1);//求反,补一
Temperature*=0.0625;//求出十进制
}//Temperature=55;
else
{Minus_Flag=0;
Temperature=((Temp2<<8)|Temp1)*0.0625;}
继续继续,以上我们是求出没有小数点的正数。
如果我要求出小数点的值的话,那么我
应该这样做。
Eg:
假设从,字节0读取到0xA2赋值于Temp1,而字节1读取到0x00赋值于Temp2,
然后求出十进制值,要求连同小数点也求出。
unsignedintTemp1,Temp2,Temperature;
Temp1=0XA2;//低八位
Temp2=0x00;//高八位
//实际值为10.125
//Temperature=((Temp2<<8)|Temp1)*0.0625;//10,无小数点
Temperature=((Temp2<<8)|Temp1)*(0.0625*10);//101,一位小数点
//Temperature=((Temp2<<8)|Temp1)*(0.0625*100);//1012,二位小数点
如以上的例题,我们可以先将0.0625乘以10,然后再乘以整合后的Temperature变量,就可以求出后面一个小数点的值(求出更多的小数点,方法都是以此类推)。
得出的结果是101,然后再利用简单的算法,求出每一位的值。
unsingedcharTen,One,Dot1
Ten=Temperature/100;//1
One=Temperature%100/10;//0
Dot1=%10;//1
DS18B20的读写操作方法:
总线控制器在写时间隙向DS18B20写数据,在读时间隙从DS18B20读数据;在每个时间隙有一位的数据通过单总线被传输。
写时间隙的产生过程:
写时间隙的产生从总线控制器把单总线拉低开始。
Write0和write1时间隙间隔要大于1us。
1、产生write1时间隙:
当总线控制器把单总线拉到低电平后,必须在15us内释放单总线,单总线被释放后5K的上拉电阻会把单总线拉到高电平。
2、产生write0时间隙:
当总线控制器把单总线拉到电平后,总线控制器在write0时间隙内必须继续保持低电平,最少60us。
在总线控制器发出写时间隙后15—60us,DS18B20会采样单总线上的数据。
如果在采样窗口期单总线为高电平,则视为向DS18B20写入“1”;如果在采样窗口期单总线为低电平,则视为向DS18B20写入“0”。
读时间隙的产生:
一个读时间隙的产生是通过控制器把单总线拉到低电平,并保持至少1us,之后释放总线产生的。
当控制器发出读时间隙后,DS18B20将开始传输数据“1”或“0”到总线上。
DS18B20通过把总线置于高电平传输“1”,通过把总线置于低电平传输“0”。
当传输“0”时,DS18B20将在读时间隙结束时释放总线,总线将会被上拉电阻拉回高电平闲置状态。
DS18B20的输出数据在发出读时间隙后的15us内有效,因此:
在读时间隙发出后,控制器必须释放总线并在15us内采样总线的电平状态。
DS18B20读/写时间隙:
Write0、write1和read0、read1方法(时序)