如何将两个微控制器同步至微秒精度?


37

我需要同步两个微控制器,以便它们可以测量传播波的速度。延时测量需要具有微秒的精度(误差小于1/2微秒)。

我有两个使用12MHz晶体的微控制器(ATmega328)。

它们都配备了蓝牙收发器。蓝牙收发器以约15毫秒的抖动发送和接收数据包。

我希望使用蓝牙收发器或其他一些创新方法来使微控制器同步。

我尝试通过触摸它们来同步它们,但是我需要它们保持同步约10分钟,并且它们的时钟漂移得太快。也许如果可以准确地预测时钟漂移,则此方法将起作用。

我应该如何实现这种同步?


2
您能否告诉我们您要做什么以及为什么必须同步单元?可能是,您的应用程序的细节可以指出解决方案。作为一个普遍的问题,这并不是一件容易的事,尤其是对于小型无线设备而言。
尼克Alexeev

2
依靠蓝牙无法实现同步。15 ms的抖动太多,无法获得0.5 us的同步。您需要一些抖动非常低且延迟固定的可以纠正的东西。如果您可以同时为两个时钟提供一个时钟,并缓冲时钟以平衡延迟,则会更容易。
travisbartley

不好意思推迟了。该项目的目标是从现有的手持式数字测量工具设计中去除电线。用户需要无线设计,因为它们会损坏当前的电线。这些单元正在测量站立的树木中的波传播,其速度足够快,需要两个传感器之间的0.5us同步。
凯文

廉价无线:红外。当时钟稍微偏离一点时,一个IR脉冲可能足以重新同步时钟。
JimmyB '16

1
提出了一个蓝牙4.0系统〜在10uS同步,与实验测试。
user2943160 2013年

Answers:


23

我的意思不是说要参加无线游行。您遇到了一个艰巨但出乎意料的要求。像这样的事情需要重新评估整个系统的设计。

第一个想到的就是到时钟两个单元关闭一个振荡器。您已经建立了蓝牙通信,这表明范围约为10m。您可以使用带有时钟的RG174同轴电缆或光纤连接设备。

第二,有精密振荡器。为了提高精度和成本。

  • TCXO(温度补偿晶体振荡器)。通常会有1至3 ppm的漂移。
  • OCXO(恒温晶体振荡器)。漂移量约为0.02ppm。某些OCXO的漂移降至0.0001 ppm。
  • 原子钟(例如Rub标准)。我提到原子钟主要是为了提供参考框架。在这里更多。

3,用GPS训练的精密振荡器。每个GPS卫星上都有几个原子钟。通常,可以看到许多GPS卫星。GPS经常用于精确计时(与卫星导航相比,鲜为人知)。大多数GPS接收器具有1PPS输出(每秒一个脉冲),可提供精确至50ns的定时。
要在600s(10min)内有0.5μs的漂移,您的时钟(当前设计中的12MHz时钟)的漂移应小于0.0008ppm。但是,如果您可以经常从低漂移的外部源中校正定时误差,则对时钟漂移的要求会更加宽松。如果您可以每秒校正一次,那么您的时钟可能会有0.5ppm的漂移。


我曾经从事过一个项目,我们必须在全球数据中心中运行的服务器上获得这种准确性。那里最简单的方法是使用GPS。事实证明,并非所有机器/数据中心都可以使用GPS,因此最终我们的解决方案是一个很大的挑战。用微控制器做到这一点将更加困难。
NomadAlien

4
+1表示“对整个系统设计的权证进行重新评估”。

1
根据您的预算,您可以购买GPS设备,该设备输出可编程频率(0-10 Mhz),该频率与GPS信号相位对齐,每个价格约为$ 150。看一下uBlox LEA-6T。他们声称30 nS RMS误差时间脉冲输出,99%<60 nS。
康纳·沃尔夫

9

具有1pps输出的GPS模块现成且价格便宜。

确实没有必要将CPU的振荡器调整为GPS(例如,使用PLL)。只要您可以相对于CPU时钟“标记”外部事件,在任何两个PPS事件之间内插波发送和接收事件的时间都是相对简单的。

通常,您可以结合使用微控制器上的硬件计时器和用于其溢出事件的软件计数器来创建任意宽度的CPU周期计数器。正确处理硬件计数器和软件计数器的翻转事件可能很棘手,但是最后,可以说有一个32位计数器,以CPU时钟的速率计数(提供高分辨率) )并以比您要测量的间隔更长的时间滚动(例如429秒@ 10 MHz)。

您可以使用此计数器为不同的外部事件添加时间戳。如果这些事件之一是来自GPS接收器的1-pps脉冲,则CPU时钟的基本长期精度将变得无关紧要。唯一重要的是它的短期稳定性。您可以将GPS时​​间戳保存在FIFO缓冲区中,然后将其他事件的时间戳与该缓冲区中的值进行比较。由于您知道GPS脉冲恰好相隔一秒,因此可以通过插值找到任何其他事件的确切时间。

GPSnGPSn+1TimenTimen+1ExtGPSnGPSn+1

Timen+ExtGPSnGPSn+1GPSn

最后,如果您将此设置运行在两个单独的系统上,每个系统都具有自己的GPS接收器,则即使在测量系统中,也可以以较高的精度(通常为±100 ns左右)比较在两个系统上针对各种事件计算的时间。两个系统的CPU时钟不同步。


您能否更清楚地说明这将如何工作?我无法从当前说明中了解。
NickHalden 2013年

@NickHalden:好的,完成了。
戴夫·特威德

嗯,好吧,这不是依赖于CPU时钟的频率在两个1秒脉冲之间是恒定的吗?例如,使用一个特别糟糕的晶体振荡器电路,其中99%的脉冲发生在0.00到0.05秒之间,然后最后1%的脉冲发生在0.05到1.00s之间。那种病理构造的例子会不会搞砸这个,还是我仍然缺少一些东西?
NickHalden

是的,这就是“短期稳定性”的意思。
戴夫·特威德

哦,我评论时在那儿呢?哈哈,真尴尬。无论如何,感谢您对我的解释+1。
NickHalden 2013年

8

之前,我已经为微控制器实现了无线时钟同步,但是精度只有毫秒,这对于应用程序来说已经足够了。从我的阅读中,本文很好地解释了微秒同步:http : //www.math.u-szeged.hu/tagok/mmaroti/okt/2010t/ftsp.pdf

本质上,如果您了解无线电数据包分别在发送器和接收器上的传输事件和到达事件,则在两个系统之间会有一个共同的可观察事件(假设您忽略了无线电波的传播时间)。用作参考。本文提到的另一个简洁功能是使用线性回归的时钟偏斜估计。


通过提供实验结果,表明单跳场景中的精度为1.5µs,多跳情况下的平均精度为每跳0.5µs。真好
叶立昂


3

签出蓝牙时钟同步协议(CSP),它是健康设备配置文件(HDP)的可选部分。该文档中与CSP相关的部分为2.1和8。

我还没有机会亲自尝试一下,但据我所知,BlueZ(官方Linux蓝牙协议栈)只是增加了对HDP的支持,包括对CSP的支持。因此,即使听起来不像您将在支持BlueZ堆栈的平台上运行,但也许代码至少会提供良好的参考实现。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.