3. 分布式时钟DC同步机制深入解析

EtherCAT 的分布式时钟(Distributed Clock,DC)机制,是它能够支撑多轴同步运动控制的关键。没有 DC 时,各从站只能依据自己本地晶振计时,即使初始时刻对齐,晶振频率的微小差异也会随时间累积成明显的相位误差。DC 的目标,就是让网络中所有需要同步的从站,都使用同一个时间基准——通常以主站选定的某个从站时钟作为参考时钟(Reference Clock),其余从站时钟(Slave Clock)不断向它对齐。

理解 DC 要抓住三个层次:参考时钟是谁、从站时钟如何测出与参考时钟的偏差、偏差如何被补偿并持续跟踪。这三层分别对应参考时钟选择、偏移补偿(Offset Compensation)和漂移补偿(Drift Compensation)。

参考时钟与从站时钟的角色

在 EtherCAT 网络中,第一个支持 DC 的从站通常被配置为参考时钟,它的本地时钟就是全网的时间基准。参考时钟本身不接收别人的同步,它只负责“发时间”。其余从站作为从站时钟,需要把自己的本地时间调整到与参考时钟一致。这里有一个重要约定:参考时钟的时间是基准,从站时钟的时间是待校正量。所有偏移、漂移的符号,都以“从站时钟相对参考时钟”来定义。若从站时钟读数比参考时钟大,则偏移为正;反之为负。全文和图示都遵循这一约定。

参考时钟的选择不是随意的。一般选择网络中位置居中、抖动小、且支持 DC 的从站,避免选在链路末端或经过大量分支的节点。参考时钟一旦确定,主站在配置阶段通过寄存器写入,之后所有从站都围绕它同步。

偏移补偿:把初始相位差一次拉平

偏移补偿解决的是“初始时刻不一致”的问题。上电后,各从站本地时钟从各自的值开始计数,彼此之间可能相差几十微秒甚至更多。主站通过广播读命令,让数据帧依次经过每个从站,每个从站把本地时间锁存到帧中。当帧回到主站时,主站就能算出每个从站时钟与参考时钟的差值。

更精确的做法是利用 EtherCAT 帧在环网中传播的延时。设参考时钟在帧经过它时锁存时间为 t_ref,某从站在帧经过它时锁存时间为 t_slave,帧从参考时钟到该从站的传播延时为 t_prop,则该从站相对参考时钟的偏移为:

offset = t_slave - (t_ref + t_prop)

主站把这个 offset 写入从站的 DC 偏移寄存器,从站据此调整自己的系统时间。偏移补偿通常是一次性的大幅修正,把初始相位差压到很小。但修正之后,晶振频率差异仍然存在,时间又会慢慢跑偏,这就需要漂移补偿。

漂移补偿:持续跟踪频率差

漂移补偿解决的是“频率不一致”的问题。两个标称 25 MHz 的晶振,实际频率可能相差几十 ppm。假设参考时钟与从站时钟频率差为 50 ppm,运行 1 秒就会产生 50 微秒的偏差,这对多轴同步来说是不可接受的。

DC 的做法是周期性地测量偏移变化率,并调整从站时钟的计数速率。从站内部通常有一个漂移补偿系数,形式为:

t_slave_corrected = t_slave_local × (1 + drift)

其中 drift 是一个很小的有符号数,由主站根据多次测量结果计算并下发。若从站时钟走得比参考时钟快,drift 取负值,让它“走慢一点”;反之取正值。这样从站时钟不仅初始对齐,还能持续跟踪参考时钟,把长期误差控制在纳秒到亚微秒级。

偏移补偿和漂移补偿的分工可以这样理解:偏移补偿管“起点”,漂移补偿管“斜率”。两者配合,才能让从站时钟在长时间运行中始终贴近参考时钟。

EtherCAT DC 同步机制:参考时钟、偏移补偿与漂移补偿 参考时钟 Reference Clock 全网时间基准 t_ref 从站时钟 Slave Clock 本地时间 t_slave 帧传播延时 t_prop 偏移计算 offset = t_slave − (t_ref + t_prop) 偏移补偿 Offset Compensation 一次性修正初始相位差,写入 DC 偏移寄存器 漂移补偿 Drift Compensation 周期性调整计数速率,跟踪频率差 补偿分工 • 偏移补偿:管“起点” • 漂移补偿:管“斜率” • 两者配合,长期误差 控制在纳秒~亚微秒级 drift 有符号,可正可负 符号约定 • 以参考时钟为基准 • 从站时钟 − 参考时钟 • 结果为正:从站偏快 • 结果为负:从站偏慢 全文与图示保持一致

用示波器验证同步误差

理论讲完,必须落到“怎么看出同步好不好”。最直接的工具是示波器。典型做法是让两个从站各自在收到同步信号(SYNC0)时翻转一个 GPIO,把这两个 GPIO 接到示波器两个通道上。如果 DC 工作正常,两个通道的边沿应该几乎重合;如果存在固定偏差,说明偏移补偿没到位;如果偏差随时间缓慢增大,说明漂移补偿没生效或 drift 系数不对。

假设我们设置同步周期为 1 ms,用示波器观察两个从站的 SYNC0 输出。理想情况下,两路边沿的时间差应在几十纳秒以内。若观察到约 2 微秒的固定偏差,可以检查偏移寄存器是否写入正确;若观察到偏差以每秒约 1 微秒的速度增大,按 1 ms 周期换算,相当于每个周期漂移约 1 纳秒,对应频率差约 1 ppm,此时应重新计算并下发 drift 系数。

用 Wireshark 抓包验证

Wireshark 配合 EtherCAT 解析插件,可以抓取主站与从站之间的过程数据帧,观察 DC 相关寄存器的读写。重点看两类报文:一类是主站读取各从站时间戳的广播读,另一类是主站写入偏移和漂移系数的配置写。在抓包结果中,可以核对时间戳字段是否随周期稳定变化,以及配置写是否在预期时刻发生。

需要说明的是,Wireshark 抓包看到的是主站侧的时间信息,它反映的是主站视角下的同步配置过程,不能直接替代示波器对物理同步信号的测量。两者结合,才能既确认“配置下发了”,又确认“从站真的对齐了”。

示波器看的是物理同步结果,Wireshark 看的是配置与通信过程。排障时先用示波器判断“有没有同步问题”,再用 Wireshark 定位“问题出在配置还是补偿”。

一个可参考的验证记录表

下面给出一份用于 DC 同步验证的记录表,字段围绕本节真正需要观察的量设计,可直接用于实验记录。

检查项 观察工具 正常表现 异常指向
两从站 SYNC0 边沿差 示波器 稳定在几十纳秒内 固定偏差大 → 偏移补偿
边沿差随时间变化 示波器(长时观察) 基本不增大 缓慢增大 → 漂移补偿
偏移寄存器写入 Wireshark 配置阶段出现写操作 缺失 → 主站配置问题
漂移系数下发 Wireshark 周期性或按需更新 长期不变 → 跟踪未启用
同步周期稳定性 示波器 周期抖动小 抖动大 → 主站调度或网络负载

把这张表用起来,DC 调试就不再是“凭感觉调参数”,而是有明确的观察对象、判断依据和排查方向。参考时钟定基准,偏移补偿拉起点,漂移补偿跟斜率,示波器与 Wireshark 分别从物理层和通信层给出验证——这条链路走通,多轴同步的底层时间基础才算真正立住。