继上一期基于SEED-RT118X套件开发EtherCAT从站(一)初识EtherCAT,这期为您带来该系列的第二篇。
EtherCAT系统通过采用Distributed Clocks(DC)机制,实现了卓越的同步功能。其从站控制器内的分布式时钟(DC)单元支持以下关键功能:
这些功能共同构成了EtherCAT系统的同步基础,为工业自动化应用提供了强大而可靠的同步解决方案。
EtherCAT从站的同步策略
在探讨多个EtherCAT从站如何实现同步时,我们首先知道,每个从站系统上电启动后都会拥有其独立的本地时钟。然而,这些本地时钟并不会自动与全球统一的时间(如2024年6月3日14点40秒)保持同步。为了确保从站间的同步性,EtherCAT系统引入了一个特定的策略。
首先,系统会设定一个EtherCAT系统时间,作为所有从站同步的基准。接着,主站会通过EtherCAT数据包将这个系统时间发送至每一个从站。一旦接收到这个系统时间,从站会将其本地时钟调整至与这个系统时间一致。这个被用作基准的系统时间被称为参考时钟。值得注意的是,参考时钟通常会被设定为第一个具有分布式时钟(DC)功能的从站控制器的时间,因为并非所有从站都具备DC功能。
在设定EtherCAT系统的时间同步之后,一个显而易见的问题是如何处理网络数据的传输延迟。为了准确补偿这一延迟,EtherCAT系统在初始化阶段会进行一项关键步骤——测量每个设备之间的传输延迟。这一测量过程对于确保整个系统的时间同步至关重要。
那么,这个延迟是如何测量的呢?我们来看下图:
上图展示了一个典型的EtherCAT网络及其各从站之间的网络延迟。在EtherCAT系统中,有些延迟可以基于EtherCAT的标准而默认为相同,例如每个从站处理单元的延迟,我们标记为tPA = tPB = tPC = tPD = tPE = tPF。这一延迟是指从从站接收到数据包开始,到该从站处理完并发出数据包为止的时间。正如之前所提,EtherCAT的通信机制类似于一辆“通信列车”,它在每个从站中的停留时间都是固定的。
此外,还有一种延迟也被默认为相同,即两个相邻从站之间的网络延迟,如Slave C和Slave D之间的tWCD= tWDC。tWCD表示从Slave C的EtherCAT控制器发出数据包开始,经过Slave C的PHY芯片发送通道、Slave C和Slave D之间的网线,以及Slave D的PHY芯片接收通道,最终到达Slave D的EtherCAT控制器的时间。反过来,tWDC则代表了数据包从Slave D到Slave C的相同传输路径所需的时间。为了确保这两个方向的延迟相同,我们需要选择具有稳定延迟特性的PHY芯片,以确保数据包在EtherCAT网络中的传输一致性。
基于上述的前提条件,我们首先建立如下公式来描述从站之间的延迟:
tCD = tPC + tWCD
tDC = tPD + tWCD
其中tP = tPC= tPD,所以会有:
tCD = tDC = tP+ tWCD
对于Slave C,时间点tC1 和tC0都可以记录下来,并且有如下关系:
tC1 = tC0 + tCD+ tDC
由于tCD = tDC,我们可以变换上述关系为:
tCD = tDC = (tC1 – tC0) / 2
通过这种方法,我们可以计算出Slave C和Slave D之间的网络延迟。类似地,其他从站之间的延迟也可以通过这种方法计算得出。
一旦我们获得了这些延迟数据,EtherCAT系统在初始化时,主站就可以根据这些数据对每个从站进行精确的延迟补偿。这样,网络数据传输延迟的问题就得到了有效的解决。
尽管已经通过初始化阶段的延迟补偿确保了从站间的同步,但细心的开发者会注意到另一个关键问题:时钟漂移。由于每个从站的本地时钟通常基于其内部的晶振或晶体,即使是高精度的设备,也可能存在微小的误差,如1ppm(百万分之一秒)。这种误差会导致从站本地时钟随时间产生漂移,对于高精度控制系统来说,这种累积误差是不可接受的。
为了消除这一影响,EtherCAT的分布式时钟(DC)系统具备了漂移补偿的功能。具体来说,主站会定期(且间隔不能过长)发送系统时间至各个从站。从站在接收到系统时间后,会与自己当前的本地时间进行比较。如果发现本地时钟较快,从站会相应地增加其计数周期以减缓时钟速率;反之,如果本地时钟较慢,则会减少计数周期以加速时钟速率。这种动态调整机制确保了从站的本地时钟能够持续跟随并校准至系统时间,从而有效防止了时钟漂移的累积,保证了整个EtherCAT系统时间同步的准确性和稳定性。
我们通过抓包工具看一下TwinCAT主站在工作时的数据包,如下图所示:
我们可以发现每个数据包中均包含一个ARMW命令。这一命令的核心功能在于读取第一个具备分布式时钟(DC)功能的从站的DC SysTime(寄存器地址为0x910)值,并将这一时间值写入后续从站的DC SysTime寄存器中。
以上几种机制确保了EtherCAT系统中所有带有DC功能的从站都能运行在同一个系统时钟下。
EtherCat从站的同步工作
那么,在从站时钟同步后,我们又是如何保证这些从站能够同步工作呢?EtherCAT从站控制器(ESC)为此提供了SyncSignals功能,这些信号能够与EtherCAT系统时间保持同步。SyncSignals不仅可以直接被使用(如作为中断触发),还能用于数字输出的更新和数字输入的采样。
此外,EtherCAT还支持LatchSignals,这些信号可以基于EtherCAT系统时间进行精确的时间戳标记。在实际应用中,我们可以将每个从站的sync0信号设置为以固定频率产生,并通过sync0触发相应的中断。在这些中断服务程序中,从站会执行预定的动作。由于所有从站的sync0信号是同时产生的,因此我们可以确保这些从站能够几乎同时执行我们期望的动作。例如,在i.MX RT1180这样的平台上,两个从站之间的sync精度可以达到25ns,这极大地提升了整个系统的同步性和响应速度。
sync1功能与sync0相似,而且可以设置为不同的频率,下面是几种不同的工作模式:
EtherCAT的分布式时钟(DC)功能除了提供sync信号以确保从站的同步性外,还包含两个latch信号。这两个latch信号能够捕获输入信号的上升边沿和下降边沿,并记录相应的时间戳,从而精确记录从站中特定事件的发生时间。这一功能极大地增强了EtherCAT系统的实时性和事件追踪能力。
SEED-RT118X开发套件源码的处理逻辑
现在,我们来看一下SEED-RT118X开发套件源码中针对DC中断的处理逻辑。
可以看到,SyncOut0以及SyncOut1对应同一个中断执行函数,进入中断函数后,会通过中断标志位判断是哪一个中断,然后再执行相应的代码。
相关阅读
扫一扫订阅新闻邮件,及时获取最新技术资讯