DS18B20介绍、流程图和程序源代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DS18B20单线数字温度传感器
DALLAS半导体公司的数字化温度传感器DS1820是世界上第一片支持“一线总线”接口的温度传感器,体积更小、适用电压更宽、更经济。一线总线独特而且经济的特点,使用户可轻松地组建温度传感器网络,为测量系统的构建引入全新概念。DS18B20、DS1822 “一线总线”数字化温度传感器同DS1820一样,支持“一线总线”接口,测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C,而DS1822的精度较差为± 2°C 。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性,适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。
DS18B20可以程序设定9~12位的分辨率,精度为±0.5°C,分辨率设定,以及用户设定的报警温度存储在EEPROM中,掉电后依然保存。DS1822与DS18B20软件兼容,是DS18B20的简化版本。省略了存储用户定义报警温度、分辨率参数的EEPROM,精度降低为±2°C,适用于对性能要求不高,成本控制严格的应用,是经济型产品。继“一线总线”的早期产品后,DS1820开辟了温度传感器技术的新概念。DS18B20和DS1822使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。
1、 DS18B20性能特点
DS18B20的性能特点:①采用单总线专用技术,既可通过串行口线,也可通过其它I/O口线与微机接口,无须经过其它变换电路,直接输出被测温度值(9位二进制数,含符号位),②测温范围为-55℃-+125℃,测量分辨率为0.0625℃,③内含64位经过激光修正的只读存储器ROM,④适配各种单片机或系统机,⑤用户可分别设定各路温度的上、下限,⑥内含
寄生电源。
2、 DS18B20内部结构
DS18B20内部结构主要由四部分组成:64位光刻
ROM,温度传感器,非挥发的温度报警触发器TH和
TL,高速暂存器。DS18B20的管脚排列如图1所示。64
位光刻ROM是出厂前被光刻好的,它可以看作是该
DS18B20的地址序列号,不同的器件地址序列号不同。
8位产品系列号48位产品序号8位CRC编码DS18B20高速暂存器共9个存储单元,如表所示:
序号寄存器名称作用序号寄存器名称作用
0 温度低字节
以16位补码形式存放4、5 保留字节1、2
1 温度高字节 6 计数器余值
2 TH/用户字节1 存放温度上限7 计数器/℃
3 HL/用户字节2 存放温度下限8 CRC CRC校验
图1 DS18B20引脚分布图
以12位转化为例说明温度高低字节存放形式及计算:12位转化后得到的12位数据,存储在18B20的两个高低两个8位的RAM中,二进制中的前面5位是符号位。如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度(等价说明:高8位字节的低3位和低8位字节的高4位组成温度整数值的二进制数;或者说:12位测量时,所测数值乘以0.0625(=1/16),即右移4位后去掉了二进制数的小数部分);如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625才能得到实际温度(等价说明:当温度小于0时,整数部分就是各位取反,小数部分则是各位取反后加1)。
9位测量分辨率0.5℃;
10位测量分辨率0.25℃;
11位测量分辨率0.125℃;
12位测量分辨率0.0625℃;
9~12位的测量,无论采用哪种分辨率,温度整数的有效位均是表中26~20;
1、DS18B20控制方法
在硬件上,DS18B20与单片机的连接有两种方法,一种是VCC接外部电源,GND接地,I/O与单片机的I/O线相连;另一种是用寄生电源供电,此时U DD、GND接地,I/O接单片机I/O。无论是内部寄生电源还是外部供电,I/O口线要接5kΩ左右的上拉电阻。DS18B20有六条控制命令,如下表所示:
CPU对DS18B20的访问流程是:先对DS18B20初始化,再进行ROM操作命令,最后才能对存储器操作,数据操作。DS18B20每一步操作都要遵循严格的工作时序和通信协议。如主机控制DS18B20完成温度转换这一过程,根据DS18B20的通讯协议,须经三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。
Initialization procedure “reset and presence pulses ”
开始 发一个DS18B20序列号
执行期间匹配命令 延时1s 启动在线DS18B20温度AD 转换 发跳过ROM 命令、发转换命令
初始化DS18B20
读在线DS18B20序号
发出搜索ROM 命令
DS18B20复位 所有在线DS18B20访问完? 存在一个DS18B20?
初始化DS18B20 发读暂存RAM 指令 读匹配的DS18B20温度
Y
Y
N
N
多点温度检测软件流程图
Y
N
读DS18B20温度的流程图
DS18B20是否存在?
(读DS18B20测量温度子程序)
GET-TEMPA TURE 开始
Y
N
数据端置位 读温度值返回
复位DS18B20
(调用RESETDS18B20)
写温度转换命令44H (调用WRITE18B20)
写跳过ROM 匹配命令0CCH (调用WRITE18B20) 延时750μs ?
(读温度前)复位DS18B20 (调用RESETDS18B20) 写跳过POM 匹配命令0CCH
(调用WRITE18B20) 写读温度字节命令0BEH
(调用WRITE18B20)
读温度
(调用READ18B20)