我需要同步两个微控制器,以便它们可以测量传播波的速度。延时测量需要具有微秒的精度(误差小于1/2微秒)。
我有两个使用12MHz晶体的微控制器(ATmega328)。
它们都配备了蓝牙收发器。蓝牙收发器以约15毫秒的抖动发送和接收数据包。
我希望使用蓝牙收发器或其他一些创新方法来使微控制器同步。
我尝试通过触摸它们来同步它们,但是我需要它们保持同步约10分钟,并且它们的时钟漂移得太快。也许如果可以准确地预测时钟漂移,则此方法将起作用。
我应该如何实现这种同步?
我需要同步两个微控制器,以便它们可以测量传播波的速度。延时测量需要具有微秒的精度(误差小于1/2微秒)。
我有两个使用12MHz晶体的微控制器(ATmega328)。
它们都配备了蓝牙收发器。蓝牙收发器以约15毫秒的抖动发送和接收数据包。
我希望使用蓝牙收发器或其他一些创新方法来使微控制器同步。
我尝试通过触摸它们来同步它们,但是我需要它们保持同步约10分钟,并且它们的时钟漂移得太快。也许如果可以准确地预测时钟漂移,则此方法将起作用。
我应该如何实现这种同步?
Answers:
我的意思不是说要参加无线游行。您遇到了一个艰巨但出乎意料的要求。像这样的事情需要重新评估整个系统的设计。
第一个想到的就是到时钟两个单元关闭一个振荡器。您已经建立了蓝牙通信,这表明范围约为10m。您可以使用带有时钟的RG174同轴电缆或光纤连接设备。
第二,有精密振荡器。为了提高精度和成本。
3,用GPS训练的精密振荡器。每个GPS卫星上都有几个原子钟。通常,可以看到许多GPS卫星。GPS经常用于精确计时(与卫星导航相比,鲜为人知)。大多数GPS接收器具有1PPS输出(每秒一个脉冲),可提供精确至50ns的定时。
要在600s(10min)内有0.5μs的漂移,您的时钟(当前设计中的12MHz时钟)的漂移应小于0.0008ppm。但是,如果您可以经常从低漂移的外部源中校正定时误差,则对时钟漂移的要求会更加宽松。如果您可以每秒校正一次,那么您的时钟可能会有0.5ppm的漂移。
具有1pps输出的GPS模块现成且价格便宜。
确实没有必要将CPU的振荡器调整为GPS(例如,使用PLL)。只要您可以相对于CPU时钟“标记”外部事件,在任何两个PPS事件之间内插波发送和接收事件的时间都是相对简单的。
通常,您可以结合使用微控制器上的硬件计时器和用于其溢出事件的软件计数器来创建任意宽度的CPU周期计数器。正确处理硬件计数器和软件计数器的翻转事件可能很棘手,但是最后,可以说有一个32位计数器,以CPU时钟的速率计数(提供高分辨率) )并以比您要测量的间隔更长的时间滚动(例如429秒@ 10 MHz)。
您可以使用此计数器为不同的外部事件添加时间戳。如果这些事件之一是来自GPS接收器的1-pps脉冲,则CPU时钟的基本长期精度将变得无关紧要。唯一重要的是它的短期稳定性。您可以将GPS时间戳保存在FIFO缓冲区中,然后将其他事件的时间戳与该缓冲区中的值进行比较。由于您知道GPS脉冲恰好相隔一秒,因此可以通过插值找到任何其他事件的确切时间。
最后,如果您将此设置运行在两个单独的系统上,每个系统都具有自己的GPS接收器,则即使在测量系统中,也可以以较高的精度(通常为±100 ns左右)比较在两个系统上针对各种事件计算的时间。两个系统的CPU时钟不同步。
之前,我已经为微控制器实现了无线时钟同步,但是精度只有毫秒,这对于应用程序来说已经足够了。从我的阅读中,本文很好地解释了微秒同步:http : //www.math.u-szeged.hu/tagok/mmaroti/okt/2010t/ftsp.pdf
本质上,如果您了解无线电数据包分别在发送器和接收器上的传输事件和到达事件,则在两个系统之间会有一个共同的可观察事件(假设您忽略了无线电波的传播时间)。用作参考。本文提到的另一个简洁功能是使用线性回归的时钟偏斜估计。