本项目主要是在信迈科技TI OMAPL138 C6748 DSP上移植SOEM。主要工作有操作系统和硬件层的适配。
下面先简要介绍下概念。
EtherCAT
是一个以以太网为基础的开放架构的现场总线系统,
EtherCAT
数据部分封装在以太网帧中,主站发送以太网帧在以太网上传输。 EtherCAT 只需要物理层,数据链路层和应用层,
OSI
七层协议体系结构中 的另外四层都不是必需的。EtherCAT
帧结构也可以封装在
IP/UDP
数据报中,进而上传到从站的应用层由从站控制器的硬件进行处理[16]
。如图
2.1
所示。
传输延迟测量算法的基本步骤如下:
a .主站广播一个测量帧,所谓测量帧,就是写端口
时间寄存器任意值即
可。向每一个从站写 0
到寄存器
DCTIME0
中。
b .当这个测量帧达到每一个从站的端口
n(n=0,1,2,3
)以及
ESC
处理器的时
候,就会在相应的时间戳寄存器中记下到达时的本地时钟数值。
c .主站读取各从站端口本地时间,并依据网络拓扑分析,计算出每一个从
站的传输延迟时间。
d .主站最后将计算出来的结果写入到相应从站的系统时间延迟寄存器中
ECT_REG_DCSYSDELAY 。
如前面论述,如果所有从站使用相同的时钟源,或者各个从站的时钟源频
率严格一致,则就不存在漂移补偿了。为了尽力消除漂移对同步的影响,则必
须进行漂移补偿。而时间控制环就是用来进行漂移补偿的。时间控制环模型如
图 2.14
所示:
时间控制环是一个负反馈回路。每一个从站都有一个这样的时间控制环。
图中的 i 表示从站
i
,即给出的是从站
i
的时间控制环。其基本原理是将本地系
统时间与参考时钟的系统时间进行比较。根据比较结果,补偿单元或者加快本
地时钟,或者减慢本地时钟。
为了保证时间控制环的的运行, EtherCAT 引入了如下几个机制:
a .从站提供一个系统时间寄存器 ECT_REG_DCSYSTIME
。该寄存器的写
访问有特殊的含义:将参考时钟的时间数值写入到这个寄存器,则该从站 ESC
会将写入的数值与该从站自己的系统时间副本进行比较,将比较结果送入补偿
单元,从而调整该 ESC 从站的本地时钟快慢,使得本地系统时间与参考系统时
间最终趋于一致。
b .一读多写指令: FRMW
或
ARMW
指令,用于时间控制环的漂移校正。
指定参考时钟从站的配置地址或者物理序号,对 ECT_REG_DCSYSTIME 寄存
器执行一读多写操作。
该指令帧经过参考时钟从站 时,地址命中,则执行读
ECT_REG_DCSYSTIME 寄存器。读的结果,即是该指令帧达到该参考时钟从站
处理器时的系统时间,即 T systime(1)
= T
ref
,假设参考时钟从站是
1
。此后,每当经
过一个从站,使用读取到的 T ref
数值,写入到该从站的 ECT_REG_DCSYSTEM
寄存器。具体就是将此刻本地系统时间与参考时钟进行比较: T systime(i)
- T
ref
,由
于当该指令帧达到从站 i ,需要耗时
T
delay(i)
,所以,与参考时间
T
ref
对等的该从
站的系统时间应该为: T systime(i)
- T
delay(i)
。因此,准确的比较公式为:
Δ t = [T systime(i)
- T
delay(i)
] - T
ref
(
2.6
)
T delay(i) :第
i
个从站的传输延迟,
T
ref
:参考时钟系统时间
参考图 2.14 ,这个正是时间控制环的前端输入。计算结果送给补偿单元。
补偿单元根据Δ t 的数值来调整本地时钟的快慢:
Δ t=0 ,则说明从站
i
与参考时钟完全一致,就不用调节了。
Δ t>0 ,说明从站
i
本地时钟走的太快,则将其调慢一点。
Δ t<0 ,说明从站
i
本地时钟走的太慢,则将其调快一点。
时钟调快或者调慢,无法通过硬件来实现,因为硬件时钟源已经固定,所
以,须通过软件逻辑来完成。比如,假设每 10ns 中断一次,则每中断一次,本
地时间加 10 。那么现在根据Δ
t
,如果Δ
t>0
,则本地时间
+9
;如果Δ
t<0
,则本
地时间 +11 ,这样就相当于调整了本地时间的快慢。经过补偿单元调节后,其输
出是调整后的 T local(i)
,该值与
T
offset(i)
之和,就是本地系统时间副本
T
systime(i)
。
经过一次补偿后,从站 i 的系统时间副本更加接近于参考时钟。因为一个
MW 指令帧,所有从站都经过一次补偿。所以,相当于全网段的时间同步往前
精确一步。显然,补偿不能够一次完成,应该隔一段时间就需要全网段补偿一
次。 EtherCAT 建议两种漂移补偿方式:静态补偿和动态补偿。
静态补偿在系统初始化的时候进行。当测量并配置完毕各个从站的系统时
间偏差,以及传输延迟后,则可以启动静态补偿。一次执行 N 次的一读多写指
令。读取参考时钟从站的系统时间,将参考时钟写入后续从站中,如 Sanyo
MOTIONR 就希望执行 15000
的漂移补偿
[41]
。
动态漂移补偿在系统正常运行的时候,由于漂移因素的存在,必须定期执
行漂移补偿,否则,随着时间的推移,各个从站的系统时钟必定向不同步的方
向迈进。但是在系统正常运行时,就不能如在初始化阶段那样任性了,尤其是
像多轴机器人复合运动的时候,随时都在执行过程数据的更新。在这样的情况
下,漂移补偿必须周期性进行。
一个简单的方式就是将漂移补偿命令子报文嵌入到过程数据的发送帧中。
因为过程数据是周期执行的,因此两者有很高的契合度。本文实验正是使用这
样的方式:每当发送一个过程数据帧,则附加一个漂移补偿子报文。在执行周
期性过程数据的同时做漂移补偿操作。
过程数据的发送周期非常短,如 1ms 甚至更低,因此相当于每
1ms
执行一