摘要:本文介绍了一种基于微控制器的1-Wire®主机接口,适用于小规模、中等规模以及大规模的1-Wire网络。采用精细的阻抗匹配和"智能" (软件控制)强上拉、摆率控制等方法保证网络的可靠工作。本文给出了软件流程图,有助于用户利用任何适当的微控制器产生正确的复位脉冲、在线检测、写“1”、写“0”以及读时隙的1-Wire时序。示波器测试曲线说明了驱动器的时间特性以及远距离通信时传输线的影响。
1-Wire网络的可靠性在很大程度上取决于主机与1-Wire从机器件之间所采用的通信驱动电路的性能。本文介绍了一种1-Wire主机端接口,采用精细的阻抗匹配和"智能" (软件控制)强上拉等方法,保证网络在轻载到重载范围内均能可靠工作,且通信距离可达500m。关于创建可靠的1-Wire网络指南,请参见应用笔记148。
电路描述网络驱动器(图1)由下拉部分(Q1,R1,C1,R5)和上拉部分(Q2,R2,C2,R6)组成。晶体管Q3与周围的元件(C4、R7)组成强上拉电路,可为诸如EEPROM、温度传感器等器件提供额外电源。 本文没有讨论"强上拉"的功能。任何时候,三个晶体管中最多只有一个处于导通状态;当1-Wire不进行通信("空闲"状态)时,这三个晶体管都不导通。
图1. 驱动器原理图
R4、R1和R3的串联电路提供标准的1-Wire到VCC上拉。在这种电路情况下,总的上拉电阻近似为1kΩ。当1-Wire线空闲时,则线上呈现此阻抗。由于R4与Q1的漏极相连,因此Q1导通时电流会流过该电阻,但不会影响1-Wire总线的低电平电压。1-Wire总线电压升至5V的速度是由R4+R1+R3的电阻值和1-Wire网络的负载决定的。不建议减小R4阻值,否则会导致1-Wire总线的低电平电压升高,而这不是我们所期望的。通过把肖特基二极管D1、D2分别导通至GND和VCC,抑制ESD冲击以及来自邻近电缆的耦合信号。电阻R3限制ESD电流,保护D1和D2。
该驱动器一个最明显的特性就是可以在主机端实现与1-Wire电缆之间严格的终端匹配。在1-Wire网络中推荐使用5类非屏蔽双绞数据电缆,其特性阻抗约为100Ω。当Q1或Q2导通时,总线终端匹配分别通过R3与R1或R2的串联来实现。C3与R1和R3串联为在线应答脉冲提供一个交流耦合终端匹配。为了驱动器适应不同的特征阻抗电缆,需要相应地调整R1和R2。
驱动器的三个部分在相应的晶体管导通时,其压摆率受到控制。当驱动器将1-Wire总线变为低电平(例如某个时序或复位脉冲的起始点), R5和C1控制下降斜率;R6和C2限制动态上拉信号变为有效状态时的压摆率;而R7和C4限制强上拉的压摆率。这三个部分的时间常数均为0.5µs,压摆率近似为4V/µs。关于详细资料和示波器波形,请参见性能举例部分。
若忽略强上拉电路(Q3, R7, C4),驱动器要求连接三个信号至监控微控制器,这些信号分别为DRIVE、DPU和SENSE。DRIVE为高电平有效信号,它通过使 Q1导通,来启动 1-Wire通信。DPU为低电平有效信号,用来激活动态上拉晶体管Q2。SENSE是1-Wire电路与微控制器输入口之间的直连信号。1-Wire的地线与驱动器/微控制器GND共地。为了进行1-Wire通信,必须发出恰当的DRIVE信号和DPU信号,并在适当的时间内通过SENSE输入口读取1-Wire总线信号。1-Wire通信有四种波形,它们是复位/在线应答检测序列,和三种通信时隙波形。
复位/在线应答脉冲检测序列1-Wire通信过程都是从一个复位脉冲开始,之后跟随在线应答脉冲,波形如图2所示。当需要发出复位脉冲时, DRIVE信号要变为高电平并保持从A到B的时间(参见图2)。从A点开始,1-Wire的电压缓降为0V。在B点,DRIVE信号释放,除非1-Wire器件将总线拉低以产生中断信号(参见DS1994/DS2404数据资料,中断类型2),否则1-Wire电压开始上升。为了能正确处理这种中断,从C点开始就要对1-Wire进行重复采样,直到D点1-Wire状态变为逻辑高电平。在D点之后很短时间内,动态上拉DPU信号变为有效状态(E点),1-Wire总线将会以更快的速度被拉至5V,动态上拉在F点结束。假定总线上存在一个1-Wire器件,它就会发出在线应答脉冲,从G点开始,到I点结束。在G与I之间的某个地方(H点),对1-Wire状态进行采样,判定是否存在1-Wire 器件。在线应答脉冲结束后,1-Wire电压开始升至5V。在J点还要对1-Wire逻辑状态再次采样,判断是否发生了1A类中断信号(参见DS1994/DS2404数据资料)。无中断信号时,逻辑状态为高电平,从K点到L点动态上拉信号再次变为有效状态,以确保1-Wire总线电压上升到5V,如图2所示。当有中断信号产生时,J点所检测到的状态将为逻辑0,同时开始下一轮重复采样过程,就像在复位脉冲结束那样(如返回C点继续采样)。如果在总线上还存在其它的1-Wire器件,除发出中断的器件外,它们将把此中断脉冲看作是复位脉冲,随后发出在线应答脉冲作为响应。(如第二次到达J点时,1-Wire的逻辑状态为高,如图2所示)。在任何情况下,复位/在线应答脉冲检测在M点结束,同时也是下一个时隙的起始。
图2. 复位与在线应答脉冲时序
表1. 复位/在线应答脉冲检测序列的时间建议值
A to B | B to C | D to E | E to F | E to H | H to J | J to K | K to L | L to M |
480µs | 0 to 2µs | 0 to 2µs | 8µs | 72µs | 240µs | 0 to 2µs | 60µs | > 2µs |
采样点H必须选在应答脉冲窗口之内,在线应答脉冲窗口由最快和最慢的1-Wire器件在线应答脉冲的时间决定,数据资料中将此窗口时间长度规定为tMSP。复位脉冲结束后,当1-Wire器件检测到逻辑高电平时,标志着tMSP开始,图2中该参考点近似为E点。A到C之间的时间长度等于tF (下降时间)与tRSTL (低电平复位时间)之和。当发生2类中断时,有效的复位时间长度就是从A到B的持续时间与中断脉冲(参见DS1994/DS2404数据资料)持续时间的总和。从E到M的时间称为高电平复位时间tRSTH。数据资料规定了tRSTL,并说明了如何确定最小的tRSTH值,但对于tRSTH没有最大值要求。 通信时隙 写0时隙
写0时隙用于在1-Wire总线中传送比特0,对应的1-Wire波形如图3所示。需要进行写0时隙操作时,DRIVE信号首先要变为有效电平状态并持续一段时间,图中对应的为A点和B0点。从A点开始,1-Wire总线的电压缓降至0V。在B0点当DRIVE信号释放时,1-Wire总线电压开始上升。B0点之后很短时间内,动态上拉DPU变为有效(C0点),1-Wire总线将会以更快的速度被拉至5V。动态上拉信号在D0点结束,下一个时隙或复位/在线脉冲检测序列将紧随在E点之后。
图3. 写0时隙
写0时隙不需要对数据线进行采样,因此图3未标明任何采样点,但是也允许对1-Wire总线按照读时隙(图4或图5)中相同的时间点进行采样,不过获得的采样逻辑状态将始终为0,表明电路正在向1-Wire总线进行写0操作。从A到C0的持续时间长度等于tF (下降时间)与tW0L (写0低电平时间)之和,从C0至E0的时间称为恢复时间tREC。数据资料规定了tW0L和tREC的最小值。A至E0的时间称之为时隙周期tSLOT。
表2. 推荐的写0时隙时间值
A to B0 | B0 to C0 | C0 to D0 | A to E0 |
60µs | 2µs | 16µs | 80µs |
写1时隙用于从1-Wire总线上传送比特1,对应的1-Wire波形如图4所示。实际上,从1-Wire总线读取比特1的操作与写1操作的工作波形是相同的,因此,写1操作和读1操作就作为一种情况来讨论。若要产生写1或读1时隙,首先在A点将DRIVE信号变为有效并持续到BR。从A点开始,1-Wire总线电压缓降至0V。在BR点,DRIVE信号释放,无论是在进行读1操作还是进行写1操作,1-Wire总线电压都开始上升。在CR点对1-Wire总线进行取样。由于读到的比特为1,动态上拉DPU将立即变为有效状态,并从D1持续到E1。这将使1-Wire总线电压以更快的速度升至5V。下一时隙或复位/在线应答脉冲检测序列可以从F1点开始。
图4. 写1/读时隙(读1)
采样点CR必须落在主机采样窗口范围内,由最快的1-Wire器件响应时间决定。在数据资料中该时间窗口称为tMSR。时隙开始后,1-Wire器件检测到逻辑低电平时作为tMSR的开始点,图4中这一参考点近似为A点加上脉冲的下降时间tF。从A到BR的持续时间等于tF (下降时间)和tRL (读低电平时间)之和。数据资料中规定了tRL (等于tW1L)和tMSR,从A到F1的时间也就是时隙周期时间tSLOT。
表3. 推荐的写1/读时隙(读1)时间值
A to BR | A to CR | CR to D1 | D1 to E1 | A to F1 |
9µs | 18µs | 0 to 2µs | 60µs | 80µs |
读0时隙用于从1-Wire总线上读取比特0,对应的1-Wire波形如图5所示。需要进行读时隙操作时,DRIVE信号首先要变为有效电平状态并持续一段时间,图中对应为A点和BR点。从A点开始,1-Wire总线的电压缓降至0V。为了发送比特0, 1-Wire器件需要把1-Wire拉为低电平,从A点,到BR点结束。这样的话,1-Wire总线在开始时先由1-Wire主机将电压拉低,在BR点时主机下拉结束,随后由总线上存在的一个或多个1-Wire器件继续把1-Wire总线电压维持在逻辑低电平状态。在CR点对1-Wire总线进行采样。由于读到的比特为0,1-Wire总线将被重复采样。在D0点1-Wire器件停止下拉, 1-Wire总线电压开始升高。随后在E0再次进行取样,判断总线是否已经处于逻辑高电平状态,同时动态上拉DPU变为有效状态,1-Wire总线电压开始以更快的速度升至5V。动态上拉DPU的有效状态从F0持续到G0。下一个时隙或复位/在线应答脉冲检测时序可以从H0开始。
图5. 读时隙(读0)
CR采样点的选取与写1/读时隙时相同,随后的重复采样间隔应该在微控制器和软件允许范围内尽可能的短。从A到H0的时间也就是时隙周期时间tSLOT。
表4. 推荐的读时隙(读0)时间值
A to BR | A to CR | E0 to F0 | CR to G0 | A to H0 |
9µs | 18µs | 0 to 2µs | 60µs | 82µs |
控制这个高级的1-Wire网络驱动器的信号结构相对来说比较复杂。然而,算法还是比较直观,因此这个驱动器通常用软件来实现,采用速度足够快的微控制器,以产生实时信号。下面的流程图将有助于用户采用自己熟悉的、任何一款能够满足要求的微控制器来实现该驱动器。为能产生合适的定时信号,必须要考虑在选定晶振频率下每个命令的执行时间。
软件流程图
注1: 若仅将定时器作为计数器而不是实时定时器,则必须采用递减计数器。定时器应该在5000µs后终止。
注2:Presence和Short是用来向高级程序报告复位/在线应答脉冲检测时隙结果的逻辑变量。由于在这里只有一款可产生中断的1-Wire芯片(DS1994/DS2404),并且使用中断会大大降低1-Wire网络的有效速度,因此中断不作为变量来进行报告。
在该流程图,采用一个逻辑输入变量来控制是产生写0时隙还是产生读0时隙。写1时隙与读0时隙是相同的。位变量BitValue用来向上级程序报告时隙执行的结果 。
注1: 若仅将定时器作为计数器而不是实时定时器,则必须采用递减计数器。定时器应该在45µs后终止。
注2:按照此流程图,在定时器停止之前,DPU信号会被重复置为有效状态。若信号已处于有效状态,则激活操作不会对它产生影响,因此允许对已处于有效状态的DPU信号进行激活。如果需要,也可以进行检测DPU信号是否有效,如果DPU信号有效,则在执行程序时无需再次激活。
本文讨论的驱动器产生的1-Wire信号的示波器波形如下页所示。当对信号进行检验时,尤其是在电缆的最远端,必须使用差分探头,探头的参考地悬空,否则探头的地将旁路1-Wire的参考地,从而改变系统的拓扑结构。如果不能提供差分探头,则必须通过变压器或使用电池供电的示波器,将示波器地同总线地隔离,两种方法可任选其一,以断开示波器电源电缆的安全接地。
示波器波形
复位/在线应答脉冲检测时隙(如图2)
写0时隙(如图3)
写1/读1时隙(如图4)
读0时隙(如图5)
在300m电缆末端的下降沿信号
在300m电缆末端附近所看到的相同的下降沿信号
注: Southwind Enterprises生产类似此高级1-Wire总线驱动器产品。详细的技术资料和订购信息请点击:http://ibuttonlink.com/。
新设计中不推荐使用DS1994和DS2404。
相关型号 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|