一、DC同步原理
用EtherCAT的分布式时钟(DC)功能使从站设备同步指的是,总线中的第一个DC从站被定义为基准时钟,EtherCAT主站将基准时钟的时间分配至所有的从站。因此,EtherCAT主站周期性发送一个ARMW命令,以此读取存储在时钟主站的ESC(EtherCAT从站控制器)上适当的寄存器中的总线时间,并将这个值写入DC-从站相应的寄存器中。这些DC从站通过整合在ESC中的一个控制器来更新他们的本地时间。为保证请求的精度(可以接收低于1us的值),特殊从站之间的EtherCAT帧延迟必须得到额外的补偿。对于每个从站来说,一个帧从发送到接受的这段时间将被测量。然后,根据总线拓扑结构,主站计算从站之间的延迟,并将相应延迟补偿值写入到ESC中的寄存器0x928
ESC控制器的DC单元提供两个数字输出信号,SYNC0和SYNC1。频率一般对应于EtherCAT总线时钟的SYNC脉冲通常都是基于总线时间生成的。举个例子:如果EtherCAT主站用1ms发送周期性的I/O数据,SYNC脉冲频率通常也设置为1kHz。这些SYNC信号在从站一侧,一方面是可作为一个数字输出信号(例如要激活从站硬件组件),另一方面作为从站软件中断源。也就是说,很明显的要在SYNC脉冲被释放之前为所有从站提供新的信号。要实现这一目标,新的周期性I/O数据到达和SYNC脉冲之间的相隔时间的必须保证最小化。
通常情况下,EtherCAT主站协议栈通过在其控制硬件(例如嵌入式x86PC中的8254计时器)中的硬件计时器来发送循环输出数据。如果系统运行周期为1kHz,那么8254计时器以及负责生成同步脉冲的从站计时器都应设置为1kHz。但8254计时器和从站计时器都不能准确的运行1kHz的周期率。实际上,这两个计时器之间有些偏差,因此,在主站里发送周期性I/O数据和从站中的一系列SYNC脉冲之间可以实现非恒定间隔。为了控制一个定义好的常量值的间隔,EtherCAT主站必须要与DC时钟主站同步(就是主站上的第一个DC从站)。这一机制被称为分布式时钟主站同步(DCM)。
它可以以两种不同的方式实现:
- 重新调整用来执行EtherCAT主站的硬件中所使用的物理计时器(例如8254定时器)(主站转换);
- 重新调整DC时钟主站的总线时间时间(总线转换)。
DCM控制器周期性计算EtherCAT主站时间和DC时钟主站时间之间的差异。根据设定值(即SYNC脉冲到主站中计时器中断的距离),PI控制器算法计算重新调整的值。当使用"主站转换"时,重新调整值会影响EtherCAT主站的物理计时器(例如8254);而当使用的"总线转换"时,它则会影响DC时钟主站的寄存器0x920。
EtherCAT主站ClassA支持这两种方法(主站转换和总线转换)。
主站与从站的同步是EtherCAT最具挑战性的特点之一。
二 同步模式
A、Free Run (非同步): 从站的过程数据处理,由内部事件触发,与主站循环无关。
B、SM-Synchronous: 从站的过程数据处理,由接收到携带过程数据的周期性数据帧时所产生的硬件中断触发.
C、 DC-Synchronous: 从站的过程数据处理,由基于分布时钟和系统时间的硬件中断触发。
2.1 Free Run(非同步)
从站的过程数据处理,由内部事件触发,与主站循环无关
1、每个从站的定时周期都不一样
2、每个定时周期到的时候,每个从站去执行自己的程序,<比如检查通道上有没有合适的新的输入数据,有的话就令其输出有效(Output valid)或者检查有没有需要输入的数据,将其放到对应的同步管理器通道上(input prepare)让主站取走>
3、对于Free Run 模式而言,好比每个人都有自己的手表,但是如果没有一起对时的话。手表的本身的时间是不一样的(可能表和表之间存在时间差,一个8点一个10点),那么在这种情况下,公司如果要求9点上班,那么每个人到公司的时间都是自己手表上的9点,但是不是统一的9点,他们到达公司的时间是不一样,所以Free Run模式没有任何的同步性可言
2.2 SM-Synchronous(Sync Manager同步管理器)
从站的过程数据处理,由接收到携带过程数据的周期性数据帧时所产生的硬件中断
1、一般而言,如果EtherCAT总线通讯时的同步模式不是DC模式,那么就是SM同步模式了。
2、SM(Sync Manager同步管理器)指的是同步管理器的同步,它的触发方式是通过SM Event,也就是我们的数据帧在到达对应的从站的时候,会触发一个叫做同步管理器事件的信号(即SM Event),当从站接受到这个信号的时候,会进入到对应的中断服务例程(即中断保存当期任务,去执行插入的中断例程,这里指线程中断处理相关数据,这也是SM Event和 Free Run的不同之处),即SM是通过中断服务例程来处理对应的数据。
3、从站检测到SM Event事件信号的时候会进入到中断服务例程去处理相应的数据(比如把输出数据有效,然后把输入数据放到同步管理器的通道上让主站取走)
4、由于SM同步模式是根据数据帧到达特定从站的时候来触发SM Event事件信号来进行同步,那么对于一个特地给的帧来说,它到达每一个从站的时间必然是不同的,当系统很庞大的时候,每个从站接收到数据帧的时间就会相差很大,越在后边的从站接收到数据帧的时间就越晚,它的同步效果就越差。
5、手表举例:10个人10个表,10个人开始对表,从0开始计时,当上一个人完成了对表计时之后,才通知到下一个人进行对表计时,依次传递,那么到最后的第10个人它开始计时的时间是最晚的。完成对时之后,如果公司要求是10点上班,每个人按照自己手表上的10点到达,那么第10个人一定是最晚的。
2.3 DC-Synchronous (Sync0 Event)
从站的过程数据处理,由基于分布时钟和系统时间的硬件中断触发
受主站应用的影响,数据帧到达时间会有所波动(~us)
EtherCAT帧的波动:us级
DC同步事件的波动:ns级
1、Sync0 Event和SM Event事件信号是类似的,他们都是一个中断事件信号,对于一个从站而言,如果中断信号触发了而且中断屏蔽寄存器没有屏蔽掉该中断信号,那么从站就会进入到中断服务例程;
2、中断服务例程就是说从站从主循环中跳出,暂停并保留主程序状态,然后执行中断服务例程这一部分内容,比如说周期性数据的输出,周期性数据的实时性比较强,那么中断信号可以满足这种比较强的实时性需求,不会因为其他信号来耽误它的操作,其它的中断信号会进入等待状态直到前一个中断信号被恢复,即进入到恢复现场阶段;
3、不同于SM Event的地方是Sync0 Event是根据我们自己设定的延时时间触发而不是帧到达时候才触发;
4、注意,虽然简单DC同步机制中没有用到SM Event事件信号,但是它依旧是存在的,因为只要当Frame帧到达从站的时候就会触发SM Event事件信号,这里只是不用到该信号来进行触发而已,(需要明白不管是哪一种同步机制,SM Event都是存在的,当从站接受到数据帧的时候都会产生SM Event事件信号)。
2.4 DC-Synchronous 优化
1、优化的DC模式同时使用了SM Event事件信号和Sync0 Event事件信号,而简单DC同步机制只是使用Sync0 Event这一种事件信号进行同步,无论使用哪一种同步模式,只要当数据帧Frame到达从站的时候都会触发对应的SM Event事件信号。
2、在这种优化的DC模式中,当对应的SM Event事件信号触发后,从站会进入到中断服务例程进行数据的处理,把数据帧Frame中对应的所需数据进行计算,然后复制到管理器通道对应的用户区域,等待Sync0 Event同步信号触发之后让从站取走,然后SM Event中断完成,恢复现场,然后等待Sync0 Event信号的触发到来,也就是同步信号的触发,可以看到由于之前SM Event中断中已经完成了前期数据的处理,当Sync0 Event同步信号触发时,程序进入到中断服务例程,就只需要很短的一段Output Delay Time,马上就进入到Output Valid(输出有效)状态。
3、这种优化版的DC同步机制相对于之前的简单DC模式,优点就是Output Delay Time输出延时没有那么长了,主要是因为第二种优化的DC模式利用SM Event事件信号的触发完成了前期从数据帧中对应从站数据的计算和复制到管理器通道上,所以当Sync0 Event同步信号触发后,只需要从管理器通道取走已计算并复制好了的数据,进入到输出有效Output Valid的延时时间自然就比较短了,而第一种简单的DC模式只是使用到了Sync0 Event同步信号,所以当Sync0 Event触发后,需要在Output Delay Time时间内完成数据的复制和计算,所以简单DC模式下的Output Delay Time延时时间就会比较长。
2.5 DC同步丢帧
1、问题描述:在使用DC模式的时候会出现一种同步丢帧的情况,就是说数据帧在到达尾端从站之前,所有从站的Sync0 Event同步事件信号就已经触发了,也就是说数据帧传输的太慢,可能还来不及到达尾端从站,但是它的同步事件信号已经触发了,而此时从站却从管理器通道上获取不到数据帧中对应的数据,从站就会判断数据帧丢失了,这就是同步丢帧的问题。
当一个系统较大时,尾端的从站接收到数据帧的时间也比较晚,因为存在物理传输时间,所以越后面的从站接收到的数据帧时间就越晚,虽然Sync0 Event事件信号在完成DC对时之后是同步触发的,但是数据帧的传递时间是依次递增的,如果我们刚开始留出的偏移时间(shift time)不够大的话就有可能在尾端从站发生同步丢帧的情况
2、解决方案:把第一个从站和主站之间的偏移时间调大,可以在TwinCAT中对Shift Time进行调整。(由于Sync0 Event是同步触发的,只需要设置好第一个从站和主站之间的Shift time,后面的从站和主站的Shift Time也都是这个值)。
三、优化DC模式的时序分析
1、当数据帧Frame依次到达每一个从站的时候,EtherCAT的机制会触发SM Event事件信号,(数据帧依次发送到各个从站的时间是一个慢慢变长的延时时间,这是硬件上必然发生无法改善的事情)。
2、然后从站会把数据帧上从站需要的数据进行计算并复制到同步管理器通道上,然后会进行中断事件恢复,
3、主程序等待一个DC Sync Signal同步事件中断信号(也就是Sync0 Event),这个Sync0 Event同步事件信号是所以从站同时触发的,就像规定的9点上班一样<这里的前提是主站已经通过发送帧对各个从站完成了对表计时步骤,各个从站的时间是同步一致的>。
4、当Sync0 Event事件信号同步触发时候,由于之前已经完成了数据的计算和复制,那么此时的输出抖动会非常小,约为15ns,(输出抖动jitter和主站有关,在SM Event事件之前由主站触发),同时同步性能也会非常好(Output Delay time会很短,Output Valid输出有效很快触发)。
5、在Output Valid输出有效触发之后,从站会等待一个Input Latch信号,它可以是Sync1 Event事件信号,也可以是Sync0 Event事件信号触发后一段固定的延时时间,这取决于我们在TwinCAT上的设置情况。
四、 总结
总体的DC分布式时钟模式汇总如下流程所示:
注:本文转自:https://mp.weixin.qq.com/s/hd_10Nl0Q2WwfFW8if_4RA,若有侵权,请联系删除。
标签:触发,同步,主站,DC,SM,EtherCAT,Event,时钟 From: https://www.cnblogs.com/tdyizhen1314/p/18316344