单总线数字温度传感器的自动识别技术
发布时间:2008/5/26 0:00:00 访问次数:540
    
    引言
    
    在多点温度测量系统中,单总线数字温度传感器(例如ds18x20)因其体积小、构成的系统结构简单等优点,应用越来越广泛。每一个数字温度传感器内均有唯一的64位序列号(最低8位是产品代码,其后48位是器件序列号,最后8位是前56位循环冗余校验码),只有获得该序列号后才可能对其进行操作,也才能在多传感器系统中将它们一一识别。实际应用时的一般做法是:将每一个传感器的序列号测出,以表格的形式和程序存放在一起,并且给每个测温点编上号,做成标签粘贴在对应的传感器上。当系统中有传感器故障时,必须由专业人员测出备用的传感器序列号,贴上相应的标签,并在程序中修改表格,再将程序固化到程序存储器中。显然,这样做非常不利于系统维护。
    
    现有的单总线数字温度传感器的文献很少涉及自动识别序列号和排序(即与测量点对应)的问题,文献1给出了一种方法:通过特制的编码器,将一个传感器的序列号读出,并将其中48位器件序列号转换成bcd码,再通过手动拨盘将测温点编号拨入编码器,与器件序列号一起写入到传感器内的上下限温度报警寄存器th/tl中(两个字节的eeprom)。使用该方法,系统可以由运行人员来维护,并减少维护工作量,但仍有缺点:需要专门的编码器,维护工作量减少得仍不够;必须是在th/tl不使用的前提下。本文给出一种方法,只需在系统中增加一片eeprom芯片,通过编程,可实现多个传感器的出错指示、自动识别。
    
    硬件设计
    
    图1为系统电路原理图,主要由pic单片机pic16c63、四位led显示器、锁存器74ls373、二-四译码器74ls139、2kb的eeprom存储器dcm0016c、拨位开关k以及数字温度传感器ds18b20等组成。pic系列单片机是一种采用精简指令集(risc)、哈佛(harvard)双总线和两级指令流水线结构的高性价比的8位嵌入式控制器,i/o口线直接驱动led,片内有4kb的程序存储器和256b的数据存储器。可电改写的dcm0016c主要用于存储ds18b20的序列号。led显示器用于显示各测量点的编号、温度以及传感器故障时的指示。拨位开关k在系统正常运行时处于打开状态,需要更换传感器时将其拨至闭合位置,单片机调用相应的子程序进行传感器自动识别。图中数字温度传感器ds18b20的接线拓扑结构考虑了两种结构:总线结构和星型结构。总线结构是指在一根i/o口线上挂接若干只温度传感器,星型结构则在若干根i/o口线上分别挂接若干只温度传感器(图中虚线表示)。实际应用时考虑单总线的驱动能力、布线问题,更多地是采用星型结构,同时这种结构更容易对多个温度传感器进行出错指示、自动识别其序列号和排序。
    
    
    
    图1 系统电路原理图
    
    总线结构的传感器识别
    
    获取序列号的rom操作命令 操作单总线数字温度传感器必须严格按规定的协议操作,即应按以下顺序操作:初始化、rom操作命令、暂存存储器操作命令。在rom操作命令中,有两条命令专门用于获取传感器序列号:读rom命令(33h)和搜索rom命令(f0h)。读rom命令只能在总线上仅有一个传感器的情况下使用。搜索rom命令则允许总线主机使用一种“消去”处理方法来识别总线上所有的传感器序列号。搜索过程为三个步骤:读一位,读该位的补码,写所需位的值。总线主机在rom的每一位上完成这三个步骤,在全部过程完成后,总线主机便获得一个传感器rom的内容,其他传感器的序列号则由相应的另外一个过程来识别。具体的搜索过程为:(1)总线主机发出复位脉冲进行初始化,总线上的传感器则发出存在脉冲做出响应;(2)总线主机在单总线上发出搜索rom命令;(3)总线主机从单总线上读一位。每一个传感器首先把它们各自rom中的第一位放到总线上,产生“线与”,总线主机读得“线与”的结果。接着每一个传感器把它们各自rom中的第一位的补码放到总线上,总线主机再次读得“线与”的结果。总线主机根据以上读得的结果,可进行如下判断:结果为00表明总线上有传感器连着,且在此数据位上它们的值发生冲突;为01表明此数据位上它们的值均为0;为10表明此数据位上它们的值均为1;11表明总线上没有传感器连着;(4)总线主机将一个数值位(0或1)写到总线上,则该位与之相符的传感器仍连到总线上;(5)其它位重复以上步骤,直至获得其中一个传感器的64位序列号。
    
    
    引言
    
    在多点温度测量系统中,单总线数字温度传感器(例如ds18x20)因其体积小、构成的系统结构简单等优点,应用越来越广泛。每一个数字温度传感器内均有唯一的64位序列号(最低8位是产品代码,其后48位是器件序列号,最后8位是前56位循环冗余校验码),只有获得该序列号后才可能对其进行操作,也才能在多传感器系统中将它们一一识别。实际应用时的一般做法是:将每一个传感器的序列号测出,以表格的形式和程序存放在一起,并且给每个测温点编上号,做成标签粘贴在对应的传感器上。当系统中有传感器故障时,必须由专业人员测出备用的传感器序列号,贴上相应的标签,并在程序中修改表格,再将程序固化到程序存储器中。显然,这样做非常不利于系统维护。
    
    现有的单总线数字温度传感器的文献很少涉及自动识别序列号和排序(即与测量点对应)的问题,文献1给出了一种方法:通过特制的编码器,将一个传感器的序列号读出,并将其中48位器件序列号转换成bcd码,再通过手动拨盘将测温点编号拨入编码器,与器件序列号一起写入到传感器内的上下限温度报警寄存器th/tl中(两个字节的eeprom)。使用该方法,系统可以由运行人员来维护,并减少维护工作量,但仍有缺点:需要专门的编码器,维护工作量减少得仍不够;必须是在th/tl不使用的前提下。本文给出一种方法,只需在系统中增加一片eeprom芯片,通过编程,可实现多个传感器的出错指示、自动识别。
    
    硬件设计
    
    图1为系统电路原理图,主要由pic单片机pic16c63、四位led显示器、锁存器74ls373、二-四译码器74ls139、2kb的eeprom存储器dcm0016c、拨位开关k以及数字温度传感器ds18b20等组成。pic系列单片机是一种采用精简指令集(risc)、哈佛(harvard)双总线和两级指令流水线结构的高性价比的8位嵌入式控制器,i/o口线直接驱动led,片内有4kb的程序存储器和256b的数据存储器。可电改写的dcm0016c主要用于存储ds18b20的序列号。led显示器用于显示各测量点的编号、温度以及传感器故障时的指示。拨位开关k在系统正常运行时处于打开状态,需要更换传感器时将其拨至闭合位置,单片机调用相应的子程序进行传感器自动识别。图中数字温度传感器ds18b20的接线拓扑结构考虑了两种结构:总线结构和星型结构。总线结构是指在一根i/o口线上挂接若干只温度传感器,星型结构则在若干根i/o口线上分别挂接若干只温度传感器(图中虚线表示)。实际应用时考虑单总线的驱动能力、布线问题,更多地是采用星型结构,同时这种结构更容易对多个温度传感器进行出错指示、自动识别其序列号和排序。
    
    
    
    图1 系统电路原理图
    
    总线结构的传感器识别
    
    获取序列号的rom操作命令 操作单总线数字温度传感器必须严格按规定的协议操作,即应按以下顺序操作:初始化、rom操作命令、暂存存储器操作命令。在rom操作命令中,有两条命令专门用于获取传感器序列号:读rom命令(33h)和搜索rom命令(f0h)。读rom命令只能在总线上仅有一个传感器的情况下使用。搜索rom命令则允许总线主机使用一种“消去”处理方法来识别总线上所有的传感器序列号。搜索过程为三个步骤:读一位,读该位的补码,写所需位的值。总线主机在rom的每一位上完成这三个步骤,在全部过程完成后,总线主机便获得一个传感器rom的内容,其他传感器的序列号则由相应的另外一个过程来识别。具体的搜索过程为:(1)总线主机发出复位脉冲进行初始化,总线上的传感器则发出存在脉冲做出响应;(2)总线主机在单总线上发出搜索rom命令;(3)总线主机从单总线上读一位。每一个传感器首先把它们各自rom中的第一位放到总线上,产生“线与”,总线主机读得“线与”的结果。接着每一个传感器把它们各自rom中的第一位的补码放到总线上,总线主机再次读得“线与”的结果。总线主机根据以上读得的结果,可进行如下判断:结果为00表明总线上有传感器连着,且在此数据位上它们的值发生冲突;为01表明此数据位上它们的值均为0;为10表明此数据位上它们的值均为1;11表明总线上没有传感器连着;(4)总线主机将一个数值位(0或1)写到总线上,则该位与之相符的传感器仍连到总线上;(5)其它位重复以上步骤,直至获得其中一个传感器的64位序列号。