2. 时间同步基础:时钟源、时钟精度、同步误差、漂移与抖动

做TSN时间同步之前,咱们得先把时钟这件事儿掰扯清楚。说实话,时钟这玩意看似简单——不就是记时间嘛?但等你真在项目中调时,就会发现一堆坑。

2.1 时钟源:你的时间从哪来?

时钟源,说白了就是产生周期性信号的硬件。我们常接触的有三类:

时钟源类型 典型精度 典型应用场景
石英晶体振荡器 ±50 ~ ±100 ppm 普通交换机、工控机、消费电子
温补晶振 (TCXO) ±1 ~ ±5 ppm 需要一定稳定性的网络设备
恒温晶振 (OCXO) ±0.1 ~ ±1 ppb 骨干交换机、主时钟、基站
原子钟 (如铷钟) ±0.01 ppb 级别 GPS/北斗、电信核心网

别小看这个ppm(百万分之一)。一个±100 ppm的晶振,100秒能差出10毫秒。嗯,在TSN里这误差就大到没法用了。我在不少项目里见过,大家一上来就把普通晶振当主时钟用,结果同步精度连1毫秒都做不到。

我个人习惯:设计初期先问清楚目标同步精度(比如<1μs还是<1ms),再反过来选时钟源。精度需求定了,晶振成本就定了。

2.2 时钟精度:谁说晶振都一样?

时钟精度主要看三个指标:频率准确度、频率稳定度、老化率。

  • 频率准确度:实际频率偏离标称值的多少。100 MHz标称,实际测出来99.9998 MHz,差值就是准确度。
  • 频率稳定度:短时间内(比如1秒、10秒)频率的随机波动。这决定了同步误差的随机成分。
  • 老化率:随着时间推移,晶振频率会慢慢漂移。一般用ppb/天或ppm/年表示。

举个例子:你拿一个OCXO,老化率是0.5 ppb/天。第一年跑下来,频率可能漂了182.5 ppb(按365天算)。这在千兆时间同步里可能就是你那0.5微秒的误差来源。

为什么讲这些?因为的链路延迟测量和时钟同步算法,默认假设时钟频率在测量周期内基本稳定。但如果你用的晶振漂太快,算法根本来不及修正。

我曾经遇到过一个案例:客户选的是低成本XO,老化率没标。结果系统运行一个月后同步误差从±200 ns涨到±5 μs。排查一周,最后发现是晶振老化导致的。所以——别在时钟源上抠成本,除非你不在乎精度。

2.3 同步误差:误差从哪来?

时间同步的终极目标是让两个时钟之间的差值足够小。但误差是逃不掉的。我们通常把误差分为几类:

  1. 固定偏移:比如硬件延迟、线缆不对称。这些可以通过测量补偿掉。
  2. 随机噪声:由热噪声、量化误差、抖动引入。这玩意没法完全消除,只能通过滤波降低。
  3. 频率误差:从属时钟跟主时钟频率不一样,造成累计偏移。这是里伺服环路主要处理的对象。

你想想看:假设主时钟和从时钟的频率差是0.1 ppm,那么1秒后累积误差就是100 ns。这还没算别的误差源。所以TSN里的一步 / 两步时钟机制、Follow_Up报文,都是为了尽量把这些误差暴露出来、再修正掉。

2.4 漂移与抖动:时间同步的孪生兄弟

这两个词经常被混用,其实区别挺大。

概念 时间尺度 来源 处理方式
漂移 (Drift) 长期(秒级以上) 温度变化、晶振老化、电压变化 伺服环路跟踪,通过PI控制器调整时钟速率
抖动 (Jitter) 短期(毫秒/微秒级) PHY延迟不确定、网络噪声、量化误差 硬件设计降低抖动,软件做滤波(如中值滤波)

说个我自己的想法:调试最难的不是同步算法本身,而是把抖动从测量结果中剥离出来。我记得有一次在做100BASE-T1的车载以太网同步,因为PHY层引入的抖动高达300 ns,导致链路延迟测量值来回跳。最后花了三天才定位到PHY芯片的一个配置寄存器默认打开了扰码器随机延迟……那东西关掉就好了。

核心:漂移可以追踪和补偿,抖动只能抑制和平均。

如果你看到一个同步系统的时间差值周期性变化(比如随温度变化),八成是漂移问题。如果差值在测量间隔内随机跳变,那基本是抖动。

2.5 本章知识体系

下面这张图把时钟源、精度、误差、漂移和抖动的关系画了出来。我习惯把它叫“时间同步金字塔”:底层是物理时钟源,中间层是误差表现,顶层是要解决的问题。

时间同步基础概念关系图 时间同步基础概念关系图 同步目标 消除漂移 · 抑制抖动 同步误差 固定偏移+随机噪声+频率差 漂移 (Drift) 长期 · 温度/老化/电压 抖动 (Jitter) 短期 · PHY/量化/噪声 石英 / TCXO ±50~±5 ppm OCXO ±0.1~1 ppb 原子钟 ±0.01 ppb 说明: 时钟源精度越高 → 漂移越小;硬件设计越好 → 抖动越低。 通过测量与补偿,将底层不可消除的误差降到应用可接受的水平。

2.6 一点实用建议

在实际做系统之前,我建议你先做一件事:测量你当前平台上的本地时钟特性。怎么做?用你手头最稳定的信号源(比如GPS秒脉冲)做参考,连续记录本地时钟和参考之间的差值,记录时间至少1小时。

从这组数据里你能看出三样东西:

  • 趋势线斜率 → 频率准确度和漂移率
  • 残差标准差 → 抖动大小
  • 是否有异常跳动 → 硬件或驱动问题

我当年在做一个TSN交换机原型时,就是这样定位到以太网PHY的一个时钟恢复回路振荡器设计有缺陷,导致每30秒出现一次近百纳秒的频率跳变。你说靠上层协议补?补不回来的——那根本是硬件抖动太大。

做时钟同步,永远先摸清物理层的底。别急着调软件参数。