引言
单总线技术是美国Dallas公司的一项专有技术,采用单根信号线传输数据,具有节省I/O口资源、结构简单、成本低、便于总线扩展和维护等诸多优点[1]。单总线技术适用于单个主机系统控制一个或多个从机设备。Dallas公司的单总线产品中均有一个8字节只读存储器(ROM),用于存放产品的序列号(每个芯片唯一的64位标识代码)。如图1所示,从低位起第一个字节(8位)是器件的家族代码,表示产品的分类;接下来的6个字节(48位)是每个器件唯一的ID号;最后一个字节(8位)是前56位的CRC校验码。同一种类型的器件有248个ID号码总量,确保了在总线上不会产生地址冲突[2]。
图164位ROM序列号示意图
传统的基于单总线的测温系统采用ROM搜索的方式在线识别挂接在总线上器件的注册码和器件的类型,由此可在线确定总线上的器件数量[3]。但是,随着挂接在总线上的单总线器件增加,搜索ROM的时间也随之增加,系统开销增大。基于此,本设计采用支持菊链模式的新型数字温度传感器芯片DS28EA00组建单总线测温网络。该方案无需进行传统的ROM搜索步骤,允许用户将器件在链路中的物理位置与序列号对应,节省了RAM开销,简化了基于单总线的应用设计。
1DS28EA00特性分析
DS28EA00是具有9位(05℃)至12位(00625℃)分辨率和用户可编程非易失性(NV)上/下触发点报警功能的数字温度计。每个DS28EA00都有工厂编程的唯一64位序列号[4]。DS28EA00具有滞回和干扰滤波功能,使其能够在大的单总线网络中可靠工作。与其他单总线器件(例如DS18B20)不同,DS28EA00具有两个额外的引脚用以执行顺序检测功能。该特性允许用户将器件在链路中的物理位置与序列号对应,例如用来测量储存塔不同高度处的温度。如果无需顺序检测功能,这些引脚可作为通用输入或输出。
2基于DS28EA00的测温系统的硬件连接
采用DS28EA00的单总线测温系统硬件连接图如图2所示,主控制器采用51系列单片机,通过一个通用I/O口与单总线器件DS28EA00连接。与Dallas其他的数字温度传感器不同,DS28EA00具有两个额外的引脚PIOA和PIOB。其中,除了连接在总线上的第一个DS28EA00的PIOB接地外,其他每一个器件的PIOA均与下一个器件的PIOB相连接,最后一个DS28EA00的PIOA悬空或接地,所有的DS28EA00采用菊链的方式互连在一起。微控制器的其他部分连接输入设备、输出设备和通信接口。
图2测温系统硬件连接示意图
3单总线菊链模式下的顺序检测分析
如表1所列,在菊链模式连接方式下,DS28EA00有3种工作状态:OFF、ON和DONE。这3种状态的转换由Chain command命令控制。当接通电源后,总线上所有的DS28EA00均处于OFF状态,在该状态下顺序检测ROM命令“Conditional Read ROM”不起作用。当处于ON状态时,如果DS28EA00的PIOB引脚处于低电平状态,那么它将响应“Conditional Read ROM”命令,发送自己的ROM序列号。当发送完成后,该DS28EA00将处于DOWN状态,不再响应“Conditional Read ROM”命令,并将自己的PIOA引脚置“0”电平,使得下一个DS28EA00继续响应“Conditional Read ROM”命令,发送自己的ROM序列号,直到连接在单总线上的最后一个DS28EA00。当微控制器把所有DS28EA00的序列号都读到后,发送Chain DOWN命令,使得总线上挂接的所有DS28EA00均回复到OFF状态。如此,便完成了对总线上所有DS28EA00的ROM检测,并且是按照顺序一个一个检测的,这使得检测的序列号与器件在链路中的物理位置相对应。
表1DS28EA00工作状态示意图
如图3所示,主控制器采用Chain command命令可以使DS28EA00在3种状态间切换,当发送Chain command命令后,主控制器必须接着往总线上先写入一个字符的命令码,然后把该命令码以反码的形式再写入一遍。3个命令码3Ch、5Ah、96h分别对应状态OFF、ON和DOWN。如果菊链状态改变成功,则微控制器收到字符AAh,否则收到00h。
图3状态转换示意图[4]
4 基于DS28EA00的测温系统的软件设计
菊链状态下利用DS28EA00进行多点测温的程序流程如图4所示,测温主要分为下面几步:
① 首先,单片机通过I/O口发送Skip ROM命令,同时向多个DS28EA00发送信号,接在Skip ROM命令后,发送Chain ON命令,使得所有的DS28EA00均处在ON状态,此时所有从器件的PIOA/PIOB引脚都是高电平状态除了总线网络中的第一个DS28EA00,它的PIOB是接地的。
② 主控制器发送Conditional Read ROM 命令,此时菊链网络中的第一个DS28EA00将响应此命令,并发送自己的64位ROM序列号,当主控制器接收到序列号后,接着发送Chain DONE命令,把第一个DS28EA00置为DOWN状态,并且使其PIOA脚输出低电平,由于状态变为DOWN,第一个DS28EA00将不再响应Conditional Read ROM 命令。
③ 主控制器继续发送Conditional Read ROM 命令,此时由于第二个DS28EA00的PIOB脚被置低电平,所以将响应该条命令,并发送自己的64位ROM序列号,当主控制器接收到序列号后,继续发送Chain DONE命令,把第二个DS28EA00也置为DOWN状态,并且使其PIOA脚输出低电平,将选通第三个DS28EA00。
④ 主控制器将重复的执行Conditional Read ROM命令,直到总线上所有的DS28EA00都完成发送ROM序列号。
⑤ 主控制器通过发送Skip ROM 命令和 Chain OFF命令结束顺序检测操作。
⑥ 主控制器根据读到的DS28EA00序列号,向指定的DS28EA00读取温度值。
图4测温系统软件流程
以下为部分测温的源程序,编程环境是Keil C。
unsigned char serchrom() {
//假设总线上挂接有20个DS28EA00
unsigned char i;
Master_reset ();//总线复位
Write_byte (0xCC);//Skip ROM命令
Write_byte (0x5A);//Chain ON命令
for (i=0; i<20; i++){
Master_reset ();
Write_byte (0x0F);//Conditional Read ROM命令
Master_receive_rom();
//接收DS28EA00发送的64位序列号并写入EPROM
Write_byte (0x96);//Chain DOWN命令
}
Master_reset ();
Write_byte (0xCC);
Write_byte (0x3C); //Chain OFF命令,顺序检测ROM结束
Read_temperature();
//读取挂接在单总线上的DS28EA00采集的温度
}
5小结
本文介绍了一种基于DS28EA00的单总线测温系统的设计方案。采用Dallas公司生产的支持菊连模式的数字温度传感器DS28EA00作为基本测温元件,重点分析了菊连模式下的顺序检测过程,给出了硬件连接图及软件流程。采用该方案无需进行传统的ROM序列号搜索步骤,节省了RAM开销,简化了基于单总线测温的设计。