首页 / 驱动算法 / EtherCAT专题

EtherCAT 同步模式详解:Free-Run / SM / DC

数据到了从站,什么时候"用"——这就是同步模式。三种节拍:Free-Run(应用自己跑,数据到了就用)、SM 同步(以帧到达事件为节拍)、DC 同步(以全网对齐的 Sync0 中断为节拍)。本文讲清三者的原理、抖动来源与典型精度(μs 级 vs ns 级)、DC 的参考时钟与漂移补偿机制、Sync0 周期/相移配置、同步单元(Sync Unit)概念,以及"多轴为什么必须 DC"的物理原因,配 DC 时钟补偿收敛交互演示与工程避坑清单。

1. 同步模式是什么:数据"什么时候用"

上一篇文章解决了数据怎么从帧到内存(FMMU)、怎么交接给应用(SM)。但还有一个问题:MCU 什么时候取数据、取完什么时候发反馈?——这决定了一台伺服从站的"节拍"跟谁走。EtherCAT 从站有三种主流同步模式,本质是三种"时钟源":

模式节拍来自抖动典型场景
Free-RunMCU 自己的定时器(应用周期)与主站无关(几十 μs ~ ms 自定)IO 从站、测试、非联动
SM 同步SM2 新数据事件(帧到达)主站帧间隔抖动 + 链路(μs 级)中等精度、单从站控制
DC 同步Sync0 中断(全网统一绝对时间)ns~亚 μs 级多轴联动、伺服轨迹——必选

选错同步模式,轻则数据"晚一周期",重则多轴不同步、轨迹走形。精度差一个数量级,代价差一个数量级——这是本篇文章的核心结论。

2. Free-Run:应用自定周期

MCU 按自己的定时器周期(如 1ms)跑应用循环:到点就检查 SM 有没有新数据,有则取用,没有则用旧值。特点:

  • 实现最简单:不需要 DC 配置、不需要等帧;主站周期和应用周期可以不一样;
  • 缺点:应用节拍与主站不同步,数据可能"晚到一拍"或重复用旧值;多个从站之间完全没有对齐关系;
  • 适用:数字量 IO、传感器、诊断类从站——数据时效性要求不高。

Free-Run 本质上不是"同步",而是"各自跑、数据凑合"。任何需要轴与轴配合的场景都不该用它。

3. SM 同步:以帧到达为节拍

SM 同步让 MCU 的消费动作跟着 SM2 的新数据事件走:主站每周期发帧 → ESC 写 SM2 → SM 事件/中断 → MCU 立即取数据执行。节拍就是主站的通信周期(如 1ms / 250μs):

  • 优点:数据一定是最新一帧,无"晚一拍";不需要 DC 硬件能力;
  • 抖动来源:主站帧发送的 jitter(软件主站尤其明显)、网络转发延时变化、从站 PHY/ESC 处理时间差异——总抖动典型 μs 级;
  • 适用:单从站闭环、或对轴间同步要求不苛刻的场合。

注意 SM 同步的"同一时刻"是相对的:两个从站各自在自己收到帧时动作,收到的时刻差 = 帧在主站到各自从站的传播差——同一个"帧到"事件,不同从站感受的时间点天然不同,这就是它做不了精密多轴同步的原因。

4. DC 同步:全网统一时钟 + Sync0

DC(Distributed Clocks,分布式时钟)让全网从站共享一个统一的绝对时间,再按这个时间在指定时刻同时触发应用(Sync0 中断)。机制分三步:

步骤干什么谁做
1. 时钟基准选定一个从站(或主站)时钟为参考时钟,全网以它为准主站配置
2. 漂移补偿每个从站测量自己时钟与参考时钟的偏差(延时 + 漂移),周期校正本地时钟ESC DC 单元 + 主站同步报文
3. Sync0 触发本地时钟对齐后,各从站在同一个绝对时间点产生 Sync0 中断 → 应用同时取数执行ESC 硬件
DC 同步精度

同步误差 = 漂移补偿残差 + 传播延时误差 < 1 μs(典型数十 ns)

对比:SM 同步的帧到达差是 μs~几十 μs 量级——DC 直接把它压掉两个数量级

5. 三种模式横向对比

维度Free-RunSM 同步DC 同步
节拍来源MCU 定时器SM2 帧事件Sync0 中断
轴间同步无相对(帧传播差)绝对(统一时钟)
典型抖动—μs 级ns~亚 μs
需要 DC 能力否否是(EEPROM F8 声明)
配置复杂度最低中高(Sync0/相移/补偿)
典型场景IO / 测试单轴、简单闭环多轴联动、CNC、机器人

6. DC 细节:参考时钟、漂移补偿与 Sync0 参数

  • 参考时钟:通常选链路第一从站(0 号从站)或主站。其余从站通过测量"系统时间传播延时"与"时钟偏差"两个量来对齐本地时钟,这个过程在 OP 前自动完成、运行中持续校正;
  • 漂移补偿:石英晶振各有 ±ppm 级频率误差(如 ±100ppm = 1s 差 100μs),不补偿 1 秒就漂出 μs 级——补偿环路持续测量并微调本地时钟分频,误差被压到 ns 级;
  • Sync0 周期:应用触发周期,一般 = 通信周期(1ms/500μs/250μs 等);
  • 相移(Shift Time):Sync0 在周期内的偏移,用来把触发时刻挪到"数据已就位"之后——比如帧在周期 t0 到达、应用在 t0+相移 触发,保证用的是最新一帧。
✅ 一个典型 DC 伺服配置

通信周期 500μs · Sync0 周期 500μs · 相移 20μs:帧在每周期开头到达(数据写入 SM2),20μs 后所有从站同时触发 FOC 电流环,读取的是刚到达的目标值——轴间启动误差 <1μs。

7. 同步单元(Sync Unit):多个 SM 共享一个节拍

一个从站可能有多个过程数据通道(如一个轴 + 一个 IO 扩展)。同步单元把一个或多个 SM 绑定到同一个 Sync0 触发上:

  • 同步单元 0:SM2(输出 PDO)→ Sync0 触发读入;
  • 同步单元 1:SM3(输入 PDO)→ Sync0 触发前写入(反馈数据在触发前准备好,下一帧取走)。

同步单元的意义:保证同一从站内所有通道在同一时刻消费/生产,避免"位置环用了新数据、速度环还在用旧数据"的混乱。

8. 多轴为什么必须 DC:轨迹同步的物理基础

两台伺服从站各跑各的 SM 同步,启动时刻差 = 帧传播差 + 各自处理抖动,典型 μs~几十 μs。对 CNC/机器人,插补周期 1ms 内位置指令是连续曲线,μs 级启动差会让两轴实际到达位置差出"每周期 0.1%~1% 的插补步长"——高速时就是轨迹误差,甚至轮廓畸变。DC 把启动差压到 <1μs,等效插补误差被压两个数量级,轮廓精度才谈得上。DC 不是"更高级的选项",而是多轴轨迹控制的硬前提——这也解释了为什么伺服/机器人从站的 ESI 里 DC 能力是标配。

9. 交互演示:DC 时钟漂移补偿收敛

三个从站的晶振漂移各不相同。关闭补偿,时钟误差随时间线性发散(μs → ms);打开补偿,误差被周期校正压回亚 μs 级:

DC 漂移补偿演示:从站时钟误差 vs 时间(10s)
补偿开启:从站2(+100ppm)误差被压到 <1μs 量级振荡

观察要点:

  • 补偿关:误差 = 漂移率 × 时间,线性发散——+100ppm 10s 后差 1ms,两轴早偏了;
  • 补偿开:误差被周期校正收敛,稳态只剩亚 μs 级残余振荡——这就是 DC"ns 级同步"的来源;
  • 拖动漂移率:漂移越大,补偿开时的残余振荡略升但仍在 μs 以下;补偿关的发散斜率线性变陡。

10. 工程避坑清单

坑现象对策
DC 从站配成 SM 同步多轴轻微不同步、高速轨迹走形多轴/伺服一律 DC;用 Sync0 周期 = 通信周期 + 相移留出数据就位时间
Sync0 周期 ≠ 通信周期数据"隔帧使用"、控制周期混乱保持一致;需要慢周期就整数倍(2×/4×)且保证数据最新
相移设太小触发时数据还没写进 SM2,用旧值相移 > 帧到达+ESC处理时间;实测后留 10~50% 裕量
Free-Run 跑伺服轴自转抖动、跟随误差大换 SM/DC;Free-Run 只留给 IO 类
EEPROM F8 没声明 DC主站不给 DC 配置、同步失败SII 里 DC 能力位必须如实声明(见 EEPROM 详解篇)
补偿未建立就进 OP前几周期同步误差大SafeOp 阶段留足时钟同步建立窗口,进 OP 前检查 DC 状态寄存器
抖动归因错位以为是网络抖动,实际是主站软件 jitter用示波器量 Sync0 引脚实测;软件主站优先配 DC

一句话收尾:Free-Run 是"各跑各的",SM 同步是"跟着帧走",DC 是"全网一个钟"——轴数越多、速度越快,越要往 DC 靠;同步模式选对了,EtherCAT 的实时性才真正兑现。