APP下载

单片机控制DS18B20测温要点剖析

2016-05-30宋世彦

现代职业教育·中职中专 2016年5期
关键词:字节测温小数

宋世彦

[摘 要] DS18B20数字温度传感器具有体积小、接线简单、测温精准、抗干扰能力强等优点,在空调、管槽线槽、电信机房等社会生活的各个方面都得到了广泛应用。

[关 键 词] 温度传感器;数据处理;精度

[中图分类号] G718 [文献标志码] A [文章编号] 2096-0603(2016)14-0083-01

DS18B20数字温度传感器采用单总线一线式总线协议,即在一根数据线上实现数据的双向传输,所以单片机对数据处理必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问,要求对读写的数据位有严格的时隙来保证各位数据传输的正确性和完整性。下面我们将就DS18B20传感器在接线、时序、数据处理等几个方面进行要点剖析,全面掌握它的使用。

一、硬件接线

对于TO封装的DS18B20只有3个引脚,正对平面(有字母的一面)引脚垂直,最右侧为电源,中间为数据,左侧是地线。

DS18B20采用单总线的接线方式,可以实现多点分布式测温。供电方式灵活,根据实际情况可以选择单独电源供电或者寄生供电方式。

(一)外部电源供电方式

外部电源供电方式是DS18B20最佳的工作方式,电路简单,工作稳定,抗干扰能力强,可以保证温度测量精度。当DS18B20采用外部供电时,工作电源由VDD引脚接入,GND引脚接地,此时I/O线不需要强上拉,不存在电源电流不足的问题,可以保证转换精度,只需将其数据线与单片机的一位双向端口相连就可以实现数据的传递,如果读取的温度始终显示85℃,那么很可能是电源接反了,改过来就可以了,一般不会损坏芯片。

(二)寄生电源供电方式

DS18B20可以通过内部寄生电路从单线数据线上获取电源,在信号线处于高电平期间把能量存储在内部电容里,在信号线处于低电平期间消耗电容上的电能使DS18B20工作,直到高电平到再次给寄生电源(电容)充电。

在寄生电源方式工作时,DS18B20可以进行远距离测温,无需本地电源,电路更加简单(VDD必须接地),在远程温度测量和测量空间受限的情况下非常有用。但是DS18B20在温度转换期间工作电流达到了1mA以上,超出了内部电容所能提供的电流,要想保证温度转换的精度,I/O线必须提供足够的能量,当多个

DS18B20挂在同一根总线上进行多点测温时,4.7K上拉无法提供足够的能量,会造成误差较大或无法转换温度。一般我们再拿出一根I/O口线控制MOSFET管把总线直接拉到VCC上就可以解决这个问题了。

(三)分布式测温

当多个DS18B20进行分布式测温时,可以将所有的器件引脚对应连接到一起就可以了,通过读取每个DS18B20内部芯片的序列号来识别。

在总线上理论上可以挂接任意多个DS18B20传感器,组成多点测温系统,但实际上,当单总线所挂DS18B20超过8个时,就需要解决总线驱动问题了。

(四)远距离测温

在进行远距离测温时,连接DS18B20的总线电缆长度也是有限制的,主要原因是总线分布电容使信号波形产生畸变,采用普通信号电缆传输长度超过50米时,读取的温度值就将发生错误,因此长距离测温时要充分考虑总线分布电容和阻抗匹配的问题。

二、时序要求

由于DS18B20在一根线上实现数据的发送与接收,因此,对读写的数据位有着严格的时隙要求,才能保证各位数据传输时的正确性和完整性。

控制器先发出负脉冲(750个微妙左右)“我要通信”的要求信号后等待DS18B20回复,DS18B20收到(上升沿)邀请后稍矜持(15~60个微妙)下,马上拉低总线(60~240个微妙)表示“我在”,产生应答脉冲,控制器收到响应后,表示握手成功,可以通信了。在实际使用上,我们往往发出邀请一段时间后(延时跳过响应信号),直接向DS18B20发出读写信号。

DS18B20进行温度转换的时间和分辨率有关,需要的时间大概在94~750个毫秒。

三、数据处理

DS18B20在启动温度转换后,温度数据存储在高速暂存器RAM的第0~1个字节里,我们在读取数据BE命令后,每次只能读取一位,读取时低位在前,这时数据的处理就很重要了。

(一)变量类型的定义

由于每次只能读、写一位数据,所以这时数据类型必须定义成位变量bit型。

温度数据存储在高速暂存器RAM的第0~1个字节里,不管分辨率是9位还是12位,温度数据都要占2个字节,单片机是8位的,所以都要对2个字节的数据进行高8位和低8位的合成处理,这时的2个接收变量要定义成8位字符型(unsigned char),合成16位完整温度数据时,数据类型就要定义成16位的unsigned int型,當我们进行最后的十进制温度转换时(含有小数),变量类型定义成为float就可以了。

(二)数据的处理方法

读字节数据时低位在前,很多人采用dat=(j<<7)|(dat>>1)语句,个人觉得可以采用库里自带的字符循环右移函数_cror_(a,b)更方便些。

DS18B20在出厂时默认配置为12位,其中最高位是符号位,即温度值共11位,2个字节合计16位,也就是说高5位都可以看成是相同的符号位,同时变化。前5位是1时,读取的温度值是负数,取得的数值需要取反加1再乘以0.0625才可以得到实际的温度值。当前5位为0时,读取的温度为正值,只要将得到的数值乘以0.0625就可以得到实际的温度值了。

在程序中,采用浮点型变量f_temp来接收整型变量temp乘以0.0625得到的实际温度值,这时得到的实际温度值是含有小数的,而我们的数码管处理显示的都是整数,要显示小数,必须人为地加上小数点,所以我们还要再次对数据处理,首先把得到的浮点型温度数据f_temp乘以10把数据扩大十倍,目的是为了在数码管上显示小数部分(人为加上小数点),再加上0.5后是为了对温度数据四舍五入,最后把f_temp送给整型变量temp舍去小数部分。这时得到的数据就可以送去数码管显示了,显示的数据精度为四舍五入后带一位小数。

在DS18B20程序调试时,如果发现诸如温度显示错误等故障,基本上都是由于时隙的误差较大甚至时序错误或者是变量类型定义错误导致的,一定要严格参照时序图,精确把握总线电平随时间(微秒级)的变化,正确地使用变量,才能够顺利地控制和操作DS18B20。

参考文献:

[1]戴佳,戴卫恒.51单片机C语言应用程序设计[M].北京:电子工业出版社,2006.

[2]李华.MCS-51单片机实用接口技术[M].北京:北京航空航天出版社,1997.

猜你喜欢

字节测温小数
小数加减“四不忘”
No.8 字节跳动将推出独立出口电商APP
我国古代的小数
小数的认识
小数的认识
No.10 “字节跳动手机”要来了?
基于WiFi无线通信测温系统的设计
简谈MC7字节码
变压器光纤测温探头的安装固定
基于DS18B20的单片机测温系统