单个总线适用于单个主机系统,可以控制一个或多个从属设备。主机可以是微控制器,slave可以是单总线部件,两者之间的数据交换只能通过一根信号线。

当只有一个从机设备时,系统可按单节点系统操作;当有多个从设备时,系统则按多节点系统操作。图12-1所示是单总线多节点系统。

图12-1 单总线多节点系统示意图

单总线硬件结构

顾名思义,单总线即只有一根数据线,系统中的数据交换、控制都由这根线完成。设备(主机或从机)通过一个漏极开路或三态端口连至该数据线,以允许设备在不发送数据时能够释放总线,而让其他设备使用总线,其内部等效电路如图12-2所示。

图12-2 单总线硬件接口示意图

单总线要求外接一个约5k的上拉电阻:这样,单总线的闲置状态为高电平。不管什么原因,如果传输过程需要暂时挂起,且要求传输过程还能够继续的话,则总线必须处于空闲状态。位传输之间的恢复时间没有限制,只要总线在恢复期间处于空闲状态(高电平)。如果总线保持低电平超过480μs,总线上的所有器件将复位。另外,在寄生方式供电时,为了保证单总线器件在某些工作状态下(如温度转换期间、EEPROM写入等)具有足够的电源电流,必须在总线上提供强上拉(如图中所示的MOSFET(metal-oxide semiconductor field-effect transistor,金属氧化物半导体场效应晶体管))。

单总线通信原理

主机和从机之间的通信可通过3个步骤完成,分别为初始化1-wire器件、识别1-wire器件和交换数据。由于单总线是主从结构,只有主机呼叫从机时,从机才能应答,因此主机访问1-wire器件都必须严格遵循单总线命令序列,即初始化、ROM命令和功能命令。如果出现序列混乱,1-wire器件将不响应主机(搜索ROM命令、报警搜索命令除外)。

(1)初始化

基于单总线上的所有传输过程都是以初始化开始的,初始化过程由主机发出的复位脉冲和从机响应的应答脉冲组成。应答脉冲使主机知道,总线上有从机设备,且准备就绪。

(2)ROM命令

在主机检测到应答脉冲后,就可以发出ROM命令。这些命令与各个从机设备的唯一64 位ROM代码相关,允许主机在单总线上连接多个从机设备时,指定操作某个从机设备。

这些命令还允许主机能够检测到总线上有多少个从机设备以及其设备类型,或者有没有设备处于报警状态。从机设备一般支持5种ROM命令(实际情况与具体型号有关)每种命令长度为8位,如表12-1所示。主机在发出功能命令之前,必须送出合适的ROM命令。

表12-1 ROM命令说明

(3)功能命令

在主机发出ROM命令后,接着就可以发出某个功能命令。功能命令则根据具体1-wire器件所支持的功能来确定。

单总线的信号方式

所有的单总线器件要求采用严格的通信协议,以保证数据的完整性。该协议定义了几种信号类型:复位脉冲、应答脉冲、写0、写1、读0和读1。所有这些信号,除了应答脉冲以外,都由主机发出同步信号。并且发送所有的命令和数据都是字节的低位在前,这一点与多数串行通信格式不同(多数为字节的高位在前)。

(1)初始化序列——复位和应答脉冲

单总线上的所有通信都是以初始化序列开始,包括:主机发出的复位脉冲及从机的应答脉冲,如图12-3所示。当从机发出响应主机的应答脉冲时,即向主机表明它处于总线上,且工作准备就绪。在主机初始化过程,主机通过拉低单总线至少480μs,以产生(Tx)复位脉冲。接着主机释放总线,并进入接收模式(Rx)。当总线被释放后,5k上拉电阻将单总线拉高。在单总线器件检测到上升沿后,延时15~60μs,接着通过拉低总线60~240μs,以产生应答脉冲。

图12-3 复位和应答脉冲

提示

黑色实线代表系统主机拉低总线,黑色虚线代表上拉电阻将总线拉高。

(2)读/写时隙

在写时隙期间,主机向单总线器件写入数据;而在读时隙期间,主机读入来自从机的数据。在每一个时隙,总线只能传输一位数据。

① 写时隙

存在两种写时隙:“写1”和“写0”。主机采用写1时隙向从机写入1,而采用写0时隙向从机写入0。所有写时隙至少需要60μs,且在两次独立的写时隙之间至少需要1μs的恢复时间。两种写时隙均起始于主机拉低总线(如图12-4所示)。产生写1时隙的方式:主机在拉低总线后,接着必须在15μs之内释放总线,由5k上拉电阻将总线拉至高电平;而产生写0时隙的方式;在主机拉低总线后,只需在整个时隙期间保持低电平即可(至少60μs)。

在写时隙起始后15~60μs期间,单总线器件采样总线电平状态。如果在此期间采样为高电平,则逻辑1被写入该器件;如果为0,则写入逻辑0。

图12-4 单总线通信协议中写时隙时序图

② 读时隙

单总线器件仅在主机发出读时隙时,才向主机传输数据,所以,在主机发出读数据命令后,必须马上产生读时隙,以便从机能够传输数据。所有读时隙至少需要60μs,且在两次独立的读时隙之间至少需要1μs的恢复时间。每个读时隙都由主机发起,至少拉低总线1μs(如图12-5所示)。在主机发起读时隙之后,单总线器件才开始在总线上发送0或1。若从机发送1,则保持总线为高电平;若发送0,则拉低总线。当发送0时,从机在该时隙结束后释放总线,由上拉电阻将总线拉回至空闲高电平状态。从机发出的数据在起始时隙之后,保持有效时间15μs,因而,主机在读时隙期间必须释放总线,并且在时隙起始后的15μs之内采样总线状态。

图12-5 单总线通信协议中读时隙时序图

单总线器件

通常把挂在单总线上的器件称之为单总线器件,单总线器件内一般都具有控制、收发、存储等电路。为了区分不同的单总线器件,厂家生产单总线器件时都要烧录一个64位的二进制ROM代码,以标志其ID号。目前,单总线器件主要有数字温度传感器(如DS18B20)、A/D转换器(如DS2450)、门标、身份识别器(如DS1990A)、单总线控制器(如DS1WM)等。

12.1.2 单总线器件DS18B20

(一)DS18B20性能特点

图12-6 DS18B20引脚图

DS18B20是DALLAS公司继DS1820之后最新推出的一种改进型智能温度传感器。与传统的热敏电阻相比,他能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12位的数字值读取。可分别在93.75 ms和750 ms内完成9位和12位的温度数字量转换,从DS18B20读出信息或写入信息仅需要一根数据线。读写温度、变换功率可来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而使用DS18B20可使系统结构更趋简单,可靠性更高。

DS18B20的引脚如图12-6所示。

(1)GND为电源端;

(2)DQ为数字信号输入输出端;

(3)V DD 为外接供电电源输入端(在寄生电源接线方式时接地)。

(二)DS18B20的内部结构及主要功能部件

DS18B20的总体结构如图12-7所示,由64位光刻ROM及串行接口、高低温度传感器、高低温触发器、配置寄存器、8位CRC发生器、电源检测和寄生电容等各部分组成。

(1)64位ROM

64位光刻ROM是出厂前被光刻好的,它由8位产品系列号,48位产品序号和8位CRC编码组成,DS18B20的产品系列号均为28H,每个器件的48位产品序号各不相同,利用产品序号可以识别一线上的挂载的不同DS18B20器件。

图12-7 DS18B20内部结构框图

(2)配置寄存器

配置寄存器用于设置DS18B20的转换精度,配置寄存器的各位如表12-2所示。

表12-2 DS18B20配置寄存器

低5位一直为1;TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式,在出厂时该位被设置为0,用户不要去改动;R1和R2决定温度转换的精度位数。

DS18B20的温度转换时间与温度转换的精度位数(即温度转换的分辨率)相关,当温度转换的分辨率越高,转换需要的时间越长,其关系如表12-3所示。

表12-3 温度分辨率和最大转换时间关系表

(3)高温触发器TH和低温触发器TL

高温触发器TH中存在最高温度报警下限,低温触发器TL中存在最低温度报警下限,用户可通过软件写入。

(4)温度传感器

DS18B20中的温度传感器可完成对温度的测量,温度值用16位符号扩展的二进制补码读数形式提供,以0.0625℃/B形式表达,其中S为符号位,在12位转化情况下温度高低字节存放形式如表12-4所示。

表12-4 DS18B20温度的高低字节存放

二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625才能得到实际温度。

在12位分辨率下温度-数字量输出的关系表如表12-5所示。

表12-5 温度-数据关系表

DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较。若值高于TH或低于TL,则将该器件的报警标志位置位,并对主机发出报警搜索命令作出响应。

(三)DSl8B20工作过程

DSl8B20工作过程中的协议如下:

1. 初始化

单总线上的所有处理均从初始化开始;

2. ROM操作命令

总线主机检测到DSl8B20的存在便可以发出ROM操作命令,ROM操作命令如表12-6所示。

表12-6 DS18B20的ROM操作命令

3. 存储器操作命令

在执行ROM操作命令后执行存储器操作命令,存储器操作命令如表12-7所示。

表12-7 DS18B20的存储器操作命令

应用实例:8051单片机与DS18B20构成的测温系统

由DS18B20开发的一线式温度传感器具有接口简单、测量精度高等优点,广泛的应用到工业、仪器仪表、医疗电器等各个领域。

这里我们模仿一线式温度计的工作原理,以8051单片机(假设系统外接的是12MHz的晶振,即机器周期为1us)作为控制芯片,来读取DS18B20的温度值,并通过2位数码管显示被测对象的温度值。系统的结构如图12-8所示。

图12-8 8051单片机与DS18B20测温系统框图

程序设计说明:

1. 定义存放读取温度的变量TEMPER_L、TEMPER_H以及转换后的温度值变量TEMPER_NUM;定义单片机的P3.7口作为与DS18B20的数据通信口。定义位变量flag为判断DS18B20是否存在的标志。

2. 主程序通过循环调用读取温度程序、温度转换程序和数码管显示程序实现温度读取、转换和显示等功能。

3. 获取温度程序uint ReadTemperature(void),通过调用INIT_1820判断是否与DS18B20联络上。若联络上,接下来按照一定的时序发送命令,通过READ_18200程序读取温度值的高八位和低八位分别存放到TEMPER_H和TEMPER_L单元中。

4. 温度转换程序为void TemperConvert(void),显示程序为Display(void)。

C51源程序如下:

相关推荐