时钟同步

问题描述 投票:0回答:1

我有一个设置,它有两个组件:master 和 slave。 他们通过uart通信。 他们每个人都有 RTC(实时时钟)模块,我想同步奴隶的 RTC 与主人的。

关于我的目标,我几乎没有问题。首先我想介绍一下我的实现

A. 我打算这样做:

SLAVE SENT TIMESTAMP X to MASTER
MASTER RECEIVES X, and MEASURES TIME Y
MASTER SENDS (X,Y) to SLAVE
CLIENT MEASURE TIME Z and SET RTC TO Z + (Y-X)

对此的解释是

Z=X+T
其中
T
是经过的时间间隔,因此,我们得到从 RTC 将变为
X+T+Y-X
Y+T
这也是主机上的时间

B. 我计算中的内置误差是半往返时间——即从站测量到达主站所需的时间

C. 在 ntp rfc 中,我可以看到他们将偏移量计算为

  theta = T(B) - T(A) = 1/2 * [(T2-T1) + (T3-T4)]
(他们测量了 4 次,请参考 wiki/rfc),所以我知道他们在前半段行程时间和后半段行程时间之间取了某种平均值

D. 我的第一个问题:我的实施计划是否/如何缺乏关于 ntp 所做的工作。据我所知

C
如果我假设我的系统发送和接收之间的时间间隔是稳定的(即
T2-T1 = T3-T4

,我不会错过任何东西

E. 第二个问题,你知道设置 RTC 是否也会重置它的内部计数器吗? (即,如果您将 rtc 设置为某个时间,当它处于递增的一半时,计数器是否在设置后重置)。我找不到这个问题的答案。

F. 最后,我想以几毫秒的精度同步 RTC,比如说 10 毫秒。我想知道怎么做-

在主机中,我可以测量包含纳秒的时间戳,在从机中,我可以使用滴答法(滴答每固定时间量发生一次,比方说每 1 毫秒一次)。

所以我想到也许做以下改变:

在从属侧进行测量“接近”一整秒(即当

TOTAL_TICKS*TICKS_INTERVAL / 1000 < 2
时):X

在主机上,我将以毫秒为单位测量时间:Y,并将 X、Y 发送给从机

在奴隶上,我将暂停截断 Y 的毫秒部分所需的滴答数,然后像以前一样将秒差 (Y.seconds - X) 添加到我的 RTC。

这听起来怎么样?

提前致谢。

c linux time embedded clock
1个回答
0
投票

D.我的第一个问题:我的实施计划是否/如何缺乏关于 ntp 所做的事情。

简短的回答是:您不补偿系统 #1 读取其时钟 (

X
) 和系统 #2 读取其时钟 (
Y
) 之间的延迟。

考虑这个时间线:

  X is sampled                  Y is sampled             
     |                             |
  ----------------------------------------> timeline
      \---------- delay ----------/
        time it takes to transfer
          X to the other system
               and read Y

让我们称

theta
的系统时钟与
D
的延迟之间的差异,那么您有:

X = T1
Y = T2 = T1 + theta + D
Y - X = T2 - T1 =  T1 + theta + D -T1 = theta + D

然后您通过添加像

Z + (Y - X)
这样的结果来设置/调整时钟,即
Z + theta + D
,即您的调整包括延迟
D
。如果
D
与所需精度相比很高,那么您的方法就有问题。

ntp 公式试图通过假设从系统 #1 到系统 #2 和从系统 #2 到系统 #1 时的延迟相同来补偿该延迟。

它是这样工作的:

如果我们假设从T1测量到T2所花费的时间是测量的,从T3测量到T4所花费的时间是测量的,那么公式

theta = T(B) - T(A) = 1/2 * [(T2-T1) + (T3-T4)]

将补偿所有“测量延迟”。

假设两个系统完全同步的情况。那么

T2-T1
将等于“测量延迟”。就叫它
Tmd
吧。然后
T3-T4
将等于
-Tmd
你得到

theta = 1/2 * [(Tmd) + (-Tmd)] = 0

告诉你系统是同步的。

如果我们假设第一个系统比第二个系统(具有正确的时间)晚 100 个刻度,您会得到:

T1-T2 = (CorrectTime - 100) + Tmd - CorrectTime = -100 + Tmd
T3-T4 = CorrectTime - (Tmd + CorrectTime - 100) = -Tmd - 100
theta = 1/2 * [-100 + Tmd + -Tmd - 100] = 1/2 * [-200] = -100

因此,“测量延迟”再次得到补偿,您将获得系统之间差异的精确值。

另行通知:

D. ......如果我假设我的系统发送和接收之间的时间间隔是稳定的(即

T2-T1 = T3-T4

公式错了。很容易看出您是否考虑了两个系统完全同步的状态。在这样的系统中,您将拥有:

T2 = T1 + delay
T4 = T3 + delay

代入公式得到:

        T2 - T1 = T3 - T4
T1 + delay - T1 = T3 - (T3 + delay)
          delay = -delay

这显然是错误的。

顺便说一句:

进行调整时,您不会使用单个测量值进行调整。您通过低通滤波器进行测量并使用滤波器的输出进行调整。

© www.soinside.com 2019 - 2024. All rights reserved.