自建极简Ethercat主站-第6章 DC同步设置

第6章 DC同步

源码地址

6.1 DC的概念

​ DC(Distributed clock),分布式时钟,之所以叫做分布式时钟,是因为其分布在各个从站中,由从站芯片提供。它可以用来同步各个从站的动作。同步的过程就是先校对好各个从站的时钟,然后再设置一个周期。每当周期到达后,从站会给MCU一个信号,在很完美的情况下,各个MCU是同时拿到信号的,这个时候MCU开始同时去处理某个数据,例如同时控制电机、开关,这就是同步。看了一下倍福的官方的资料,在上面的所有厂家的从站芯片都支持DC。

6.2 DC中的时钟

​ 通过一个例子简单说一下个人对这DC里几个时钟概念的理解,如下图所示:

在这里插入图片描述

​ 假设大家围在一起做游戏,每个人都看不到对方。每隔固定的时间指令发起者就会向下传递一张纸条,纸条上面写着执行者需要做的动作,纸条只能顺时针依次传递。执行者要在同一个时间做出动作才算成功。由于大家都看不到对方,那么就需要约定个时间,比如11:00,11:10…每个10分钟来做一次动作,这样就能同时做出动作。由于这个游戏对时间的准确度很依赖,所以大家需要先对一下时间。指令发起者来选择一个时间(可以是自己当前的时间,也可以是另外随便定义的一个时间),将写有这个时间的纸条传递下去。忽略传递过程中的时间误差,大家都把自己的时间与纸条上的时间的误差记录下来,这样就可以根据时间在同一时刻做出动作了。后来在做游戏的过程中,发现每隔一段时间,大家的表或多或少都会出现差别,所以就需要每隔一段时间对一下时间。这个对照的时间最好是选择发起者或者第一个执行者的时间。如果选择了第二个或者其他的执行者,那么纸条在第一圈传完之后,发起者还要将纸条再传一圈,这样才能保证大家的时间都同步到了。

  • System Time:系统时间,所有设备共同使用的时间。是一个64-bit的数,单位是ns,表示从2000-01-01零点开始的纳秒数。系统时间存在于每个设备中,在很完美的情况下,各个设备中的系统时间都是相等的。这里对应例子中发起者选择的那个时间,这个时间在同步完后,每一个人都有,并且一样,执行者可以通过自己的时间和记录的误差得到当前的系统时间。系统时间在初始化的时候一般以主站的时间为准(也可以是从站时间或其它自己定义的时间),后面对误差微调的时候以参考时钟为准。
  • Reference Clock:参考时钟,就是后面在游戏过程中选择用来同步的那个时钟,此时这个参考时钟其实就是当前的系统时钟。其他从站的系统时钟根据参考时钟来调整误差,一般选择Ethercat网内首个包含DC功能的从站作为参考时钟。之所以选择首个,是为了在一个通讯周期内向所有从站、包括主站发布系统时间。例如可以通过FRMW指令,读取第一个从站中的系统时间,然后将时间写入到后续的DC从站中,最后再将数据返回到主站。之所以选择从站,是因为大部分主站的是时钟精度都不好,而从站可以提供一个基于硬件的高精度参考时钟。如果主站包含了高精度的授时模块,那么主站其实也可以作为参考时钟的。
  • Local Clock:本地时钟,每个从站上电后都有一个时钟模块在独立运行,这就是从站的本地时钟。就像每个发起者都有一个自己的时间。
  • Master Clock:Ethercat主站的时钟,通常在初始化的时候将主站时钟根据系统时钟的定义转换成系统时钟,并将系统时钟初始化到各个从站中。不过后续各个从站中系统时钟的维护其实是根据参考时钟来的。

6.3 DC同步的过程

​ DC同步总共分为3步,初始同步,时间控制回路复位,漂移补偿。

6.3.1 初始同步

​ 初始同步需要计算每个从站与参考从站之间的传输延时(delay)、每个从站与系统时钟的偏移(offset)。这里系统时钟的选择我们可以选择主站的时钟。以下图为例来简单说一下如何计算传输延时。

在这里插入图片描述

计算传输延时

  1. 一般信号在电缆中的延时是4.3ns/m,所以主站与参考从站之间的传输延时忽略不计。

  2. 通过BWR或FPWR向0x900寄存器执行写操作,从站会锁存数据帧前导码到达各个端口的时间戳。

  3. 在图中,tA0、tA1、tB0、tB1、tB2…tF0就是各个端口锁存的时间戳。tWx表示两个从站之间的传输延时,tPA、tPB、tPC…tPF就是EPU处理转发的时间,假设他们是相同的为tP。tFB、tFC、tFE是不处理转发的时间,假设他们都相同为tF。tDiff = tP-tF;

从站A和B之间的传输延时计算:

tAB = tP+tWAB   tAB = tB0-tA0  
tBA = tF+tWBA   tBA = tA1-tB2
由A到B和由B到A走的是同一根网线,假设tWAB = tWBA
tAB = tBA+tDiff
2*tAB = tAB+tBA+tDiff
tAB = (tAB+tBA+tDiff)/2
tAB = ((tA1-tA0)-(tB2-tB0)+tDiff)/2
tBA = ((tA1
  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值