基于ds18b20单线多点温度测量系统(编辑修改稿)内容摘要:

DD 9 图 16 高速暂存存储器映象 存储器的第 4 位为配置寄存器。 用户可以通过按下图所示设置 R0和 R1 位来设定 DS18B20 的精度。 上电默认设置: R0=1,R1=1( 12位精度)。 注意:精度和转换时间之间有直接的关系。 暂存器的位 7和位 04 被器件保留,禁止写入;在读回数据时,它们全部表现为逻辑 1。 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 0 R1 R0 1 1 1 1 1 图 17 配置寄存器 表 11 温度分辨率配置 R1 R0 精度 最大转换时间 0 0 9bit Tconv/8 0 1 10bit Tconv/4 1 0 11bit 375ms Tconv/2 1 1 12bit 750ms Tconv (3)温度传感器 DS18B20 中的温度传感器可完成对温度的测量。 当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第 0 和第 1个字节。 单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如图所示。 对应的温度 计算:当符号位 S=0 时,直接将二进制位转换为十进制;当 S=1 时,先将补码变为原码,再计算十进制值。 TEMPERATURE LSB TEMPERATURE MSB TH/USERBYTE1 TL/USERBYTE2 RESERVED RESERVED COUNT REMAIN COUNT PER℃ CRC SCRATCHPAD BYTE 0 1 2 3 4 5 6 7 8 EERAM TH/USERBYTE1 TL/USERBYTE2 10 图 18 DS18B20 温度寄存器格式 表 12 温度 /数据关系 温度 /℃ 二进制表示 十六进制表示 +125 00000111 11010000 07D0H + 00000001 10010001 0191H + 00000000 10100010 00A2H + 00000000 00001000 0008H 0 00000000 00000000 0000H 11111111 11111000 FFF8H 11111111 01011110 FF5EH 11111110 01101111 FE6FH 55 11111100 10010000 FC90H ( 4) CRC 发生器 CRC 字节作为 DS18B20 64 位 ROM 的一部分存储在存储器中。 CRC 码由 ROM的前 56 位计算得到,被包含在 ROM 的重要字节当中。 CRC 由存储在存储器中的数据计算得到,因此当存储器 中的数据发生改变时, CRC 的值也随之改变。 CRC能够在总线控制器读 DS18B20 时进行数据校验。 为校验数据是否被正确读取,总线控制器必须用接受到的数据计算出一个 CRC值,和存储在 DS18B20 的 64位 ROM 中的值(读 ROM 时)或 DS18B20 内部计算出的 8位 CRC 值(读存储器时)进行比较。 如果计算得到的 CRC 值和读取出来的 CRC 值相吻合,数据被无错传输。 C23 22 21 20 21 22 23 24 S S S S S 26 25 24 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 LS BYTE BIT15 BIT14 BIT13 BIT12 BIT11 BIT10 BIT9 BIT8 MS BYTE S=SIGN 11 RC值的比较以及是否进行下一步操作完全由总线控制器决定。 图 19 CRC 生成 单线总线系 统 单总线系统只有一条定义的信号线。 每一个总线上的器件必须是漏极开路或三态输出。 这样的系统允许每一个挂在总线上的区间都能在适当的时间驱动它。 DS18B20 的单总线端口( DQ 引脚)是漏极开路式的,单总线需要一个约 5KΩ的外部上拉电阻;单总线的空闲状态是高电平。 无论任何理由需要暂停某一执行过程时,如果还想恢复执行的画,总线必须停留在空闲状态。 在恢复期间,如果单总线处于非活动(高电平)状态,位与位间的恢复时间可以无限长。 如果总线停留在低电平超过 480us,总线上的所有器件都将被复位。 图 110 DS18B20电路连接 处理顺序 经过单线总线接口访问 DS18B20 的协议如下: 步骤 1:初始化 步骤 2: ROM 操作指令 步骤 3: DS18B20 功能指令 5UA Typ RX TX +5V 100Ω MOSFET RX XOR XOR XOR INPUT (MSB) (LSB) 12 初始化 通过单总线的所有执行操作处理都从一个初始化序列开始。 初始化序列包括一个由总线控制器发出的复位脉冲和其后由从机发出的存在脉冲。 存在脉冲让总线控制器知道 DS18B20 在总线上且已准备好操作。 ROM 操作指令 一旦总线控制器探测到一个存在脉冲,它就发出一条 ROM 指令。 如果总线上挂有多只 DS18B20,这些指令将基于器件独有的 64 位 ROM 片序列码使得总线控制器选出特定要进行操作的器件。 这些指令同样也可以使总线控制器识别有多少个什么型号的器件挂在总线上,同样,它们也可以识别哪些器件已经符合报警条件。 ROM指令有 5条,都是 8 位长度。 总线控制器在发起一条 DS18B20 功能指令之前必须先发出一条 ROM 指令。 表 23 ROM 操作指令 DS18B20 功能指令 在总线控制器发给欲连接的 DS18B20 一条 ROM命令后,跟着可以发送一条 DS18B20 功能指令。 这些命令允许总线控制器读写 DS18B20 的暂存器,发起温度转换和识别电源模式。 DS18B20 功能指令如下图所示: 指令名称 指令代码 指令功能 读 ROM 33H 读 DS18B20 ROM 中的编码 (即读 64 位地址编码) ROM 匹配 55H 发出此命令之后,接着发出 64 位 ROM 编码,访问单总线上与编码相对应 DS18B20使之作出响应,为下一步对该 DS18B20的读写作准备 搜索 ROM 0F0H 用于确定接在同一总线上 DS18B20的个数和识别 64位 ROM 地址,为操作各器件作好准备 跳过 ROM 0CCH 忽略 64 位 ROM 地址,直接向 DS18B20 发温度变换命令,适用于单片机工作 报警搜索 0ECH 该指令执行后,只有温度超过设定值上限或下限的片子才做出响应 13 表 24 DS18B20 功能指令 指令名称 指令代码 指令功能 温度变换 44H 启动 DS18B20 进行温度转换,转换时间最长为 500ms(典型为 200ms),结果存入内部 9 字节 RAM 中 读暂存器 0BEH 读内部 RAM 中 9 字节的内容 写暂存器 4EH 发出向内部 RAM 的第 3,4 字节写上,下限温度数据命令,紧跟着该命令之后是传送两字节的数据 复制暂存器 48H 将 RAM 的第 3,4字节的内容复制到 EEPROM中 重调 EEPROM 0B8H EEPROM 中的内容恢复到 RAM 中的第 3,4 字节 读供电方式 0B4H 读 DS18B20 的供电模式,寄生供电时 DS18B20 发送 “0” ,外接供电时DS18B20发送 “1” 14 第三章 系统软件设计 整个系统的功能是由硬件电路配合软件来实现的,当硬件基本定型后,软件的功能也就基本定下来了。 从软件的功能不同可分为两大类:一是监控软件(主程序),它是整个控制系统的核心,专门用来协调各执行模块和操作者的关系。 二 是执行软件(子程序),它是用来完成各种实质性的功能如测量、计算、显示、报警等。 每一个执行软件也就是一个小的功能执行模块。 这里将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义。 各执行模块规划好后,就可以规划监控程序了。 以下是系统软件结构图 : 图 31 系统软件结构图 DSl8B20 温度测量 单点测量温度 如果总线上只有一个器件 , 则不需要识别器件的编码 , 直接访问该器件即可。 访问流程图如下: 主程序 液晶显示子程序 温度测量子程序 中断程序控制 键盘扫描选择程序 15 图 32 单点温度测量流程图 多点测量温度 多点测量温度中需每一片 DSl8B20在 ROM中都存有唯一的序列号 , 在出厂前己写入片内 ROM中 ,主机在进入操作程序前必须逐一接入 DS18B20用读 ROM(33H)命令将该 DS18B20 的序列号读出并登录。 当主机需要对众多在线 DS18B20 的某一个进行操作时 , 首先要发出匹配 ROM 命令 (55H),紧接着主机提供 64 位序列号 ,之后的操作就是针对该 DS18B20 的。 而所谓跳过 ROM 命令即为:之后的操作是对初始化 DS18B20 开始 发 Skip ROM 命令 温度转换 延时 500ms 等待温度转换 初始化 DS18B20 发 Skip ROM 命令 发读温度命令 读 DS18B20 返回 EEPROM 中的内容,顺序从字节 0 的 LSB 位开始 读两次,即读出温度值的高低 两字 将二进制温度转换成十进制温度取整数部分的 7 位至 ACC 各位中以实现温度转换 结束 16 所有 DS18B20 的。 框图 中先有跳过 ROM,即是启动所有 DS18B20 进行温度变换 ,之后通过匹配 ROM,再逐一地读回每个 DS18B20 的温度数据。 在 DS18B20 组成的测温系统中 ,主机在发出跳过 ROM 命令之后 , 再发出统一的温度转换启动码 44H, 就可以实现所有 DS18B20的统一转换 ,再经过 1秒后 ,就可以用很少的时间去逐一读取。 图 33 多点温度测量流程图 开始 结束 初始化 DS18B20 发送搜索 ROM 命令 读在线 DS18B20序列号 初始化 DS18B20 存在一个 DS18B20 发送温度转换命令 发送匹配 ROM 命令 发送匹配温度传感器序列号 所有传感器温度读取完毕 读取温度 N YN N Y 17 DS18B20 ROM 搜索 算法 搜索算法采用的是二叉树型结构,搜索过程沿各分节点进行,直到找到器件的 ROM 码即叶子为止;后续的搜索操作沿着节点上的其它路径进行,按照同样的方式直到找到 总线 上的所有器件代码。 搜索算法首先通过复位( reset)和在线应答脉冲( presence pulse)时隙将 1Wire 总线上的所有器件复位;成功地执行该操作后,发送 1 个字节的搜索命令;搜索命令使 1Wire 器件准备就绪、开始进行搜索操作。 搜索命令分为两类:标准搜索命令 (F0 hex)用来搜索连接到网络中所有器件;报警或有条件搜索命令 (EC hex)只 用来搜索那些处于报警状态下的器件 ,这种方式缩小了搜索范围,可以快速查找到所需要注意的器件。 当单线总线上挂有多个 DS18B20 时,系统对总线上器件的数量和每个器件的ROM 的识别与搜索是通过 DS18820 ROM 搜索命令与算法配合来实现的。 下面具体介绍 ROM 搜索命令的工作过程。 对 64 位 ROM 编码识别从最低位开始, ROM 编码的每一位搜索过程可总结为 “ 两读一写 ” :读一位,读该位补码;写一位。 总线主机在 ROM 编码每一位上完成这三步就可以获得一个器件的 ROM 编码。 (1)读两位 总线主机发布 ROM 搜索 命令后执行一次读,总线上所有器件就把它们各自 ROM 编码的第一位放到总线来作出响应。 这次读获得的数据是所有器件放在总线上数据的 “ 与 ”。 再执行一次读,因为 ROM 搜索命令正在执行所以总线上所有器件把各自 ROM 编码的第一位的补码放在总线上,第二次读获得的数据也是所有器件放在总线上数据的 “ 与 ”。 对第一位的 “ 两读 ” 就此完成。 之后主机再次进行的 “ 两读 ” 则是针对 ROM编码的第二位,以此类推。 从 “。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。