Ethercat解析(十一)之分布时钟

这里写图片描述

驱动代码中,同步时钟涉及到如下几个概念:
⑴ 本地时钟:每一个支持DC的从站都有一个纳秒级分辨率的本地时钟寄存器。

每次从机上电,则寄存器从0开始计时,这就意味着不同的从机因为上电开机的时间不同而本地时钟也会有差异,所以需要对从机的本地时钟对比参考时钟进行偏移补偿。再者,从机的时钟一般由时钟单元为参考,所以每个从机的时钟频率也会有极小的误差,但是由于这种极小的误差在长时间的工作中会累积,所以想要完全的时钟同步,也要对这种时钟漂移进行补偿。

⑵ 应用时间:应用层为总线提供的基础时间。
用途:
① 配置从站的时钟偏移;
② 为从站的同步脉冲发生器设定开始时间;
③ 为主站时钟同步参考时钟;
偏移补偿:对于偏移补偿,每个从站都有偏移补偿寄存器,偏移补偿值加上从站本地时钟的初始值就是参考时钟的值,数学表达式为:
这里写图片描述
漂移补偿:所谓的漂移误差就是由于DC从站使用各自本地时钟源,它们的计时周期存在一定的漂移,这将导致时钟运行不同步。因为支持DC从站的一个特殊机制使得漂移补偿成为可能,这个机制就是当有一个写系统时间寄存器操作的时候,内部时间控制环路(internal time control loop)去比较写入时间(减去传输延迟)和当前的系统时间,比较的误差将作为时间控制寄存器的输入,依次来增加或减缓本地时钟,从而消除漂移误差。

传输延迟:以太网帧在由从站到从站的传输过程中需要一些时间,假如不作处理,传输的这个时间将会不断的积累,最终可能达到毫秒级误差,因此我们必须在漂移补偿的时候将传输延迟考虑在内。支持DC的EtherCAT从站提供了一个测量传输延迟的方案:对于从站的四个端口都配有一个接收时间寄存器,大部分当数据帧到达每个从站后,从站都会分别保存每个端口接收到的以太网帧的时刻。主站通过读取记录的这个时间值来计算EtherCAT帧在从站之间和从站到参考时钟的传输延迟并把从站到参考时钟的传输延迟写入传输延迟寄存器中,通过这种方法,漂移补偿可以达到纳秒级同步。

检测同步:支持DC的从站提供了32位系统时间寄存器(地址为0x092c),该寄存器以符号幅度码(sign-and-magnitude coding)的形式存放着本地时间与参考时钟之间的差值(纳秒级分辨率)。在linux中,可以使用命令行工具查看该寄存器的值,具体操作为:

$watch -n0 "ethercat reg_read -p4 -tsm32 0x92c"

同步信号:同步时钟仅仅是总线上同步事件的一个必要条件,每个支持DC从站有两个可编程同步事件,事件触发的同步信号以备供应用层调用。每个同步事件可根据应用要求既可以只触发一次也可以循环触发。编程同步信号是一种所谓的设置”AssignActivate“字和设置同步信号的周期和转变时间的问题。”AssignActivate“字的设置方式跟具体的从站有关,而且必须从XML文件中对描述从站对”AssignActivate“字的设置,在典型的同步信号的配置可以找到”OpModes“。