文章目录[隐藏]
欢迎淘宝搜索飞灵科技,我司相关新产品陆续上线
在很多工业使用场景中,网络内一些设备终端与设备终端,或设备终端与主控之间需要进行时间同步。 比如给传感器数据打时间戳,比如总线的时分复用等场景,相关的设备都需要一个统一的时间。
在同步精度不是很高的场景中,我们可以使用ntp等服务进行同步,精度在ms级别。 但如果想达到同步精度在us,甚至ns 级别, IEEE-1588 , PPS+ToD和 GPS 是常用的标准协议。在很多设备终端采用的是MCU作为主控的,大多数的中低端MCU并没有硬件1588的能力,所以 PPS+ToD 是成为首要选择。
下图列举了一个 实用场景,场景中使用分别为飞灵科技的FlySync系列的主时钟和从时钟。
在上图中:
- 主时钟与GPS进行同步,并作为IEEE 1588的主时钟。
- 从时钟与主时钟进行同步,同步后输出四路ToD + PPS信号。
- 四个传感器终端分别与四路ToD + PPS 相连接,用来获取时间。
- 四个传感器采集数据后,打上时间戳后通过总线发送给PLC。
飞灵科技提供了一个方案,用来解决如何在MCU上通过ToD+PPS 获取同步时间。
基本原理
- ToD + PPS 的时序:
ToD 信号在PPS上升沿1ms后发出,并且在500ms 之内发送完成。
- 获取秒时间。
由上面PPS 和 ToD的介绍可知,我们可以从ToD中直接取到秒时间, 然后在每个PPS的上升沿时进行累加即可。
- 获取纳秒时间。
从PPS 和 ToD中只能获取到整秒时间,为了得到纳秒时间,需要借助一个硬件Timer。使用这个硬件Timer 来获取至上个PPS上升沿以来,已经过去的计数值。
- 时间校准
以上获取的纳秒时间的精度依赖于给Timer提供时钟的晶振的精度。晶振精度越高,我们获取的时间精度越高。但是不幸的是,一般MCU所使用的晶振精度都很低,并且晶振还有温漂,老化等现象。我们MCU使用的晶振一般偏差在20PPM左右。也就是说,Timer每个1秒的计数周期会有达到20us的偏差。但晶振具有短期稳定性的特点,也就是说,晶振在短期内偏差不会变化很大。所以我们只要计算出这个偏差,就可以使用调整Timer的频率来校准纳秒时间。而这个偏差可以通过测量两个PPS之间的计数值来计算出来。
以上是基本原理,实现过程详见“如何在MCU上通过ToD+PPS 获取同步时间(二)”
版权声明:本文为CSDN博主「飞行的精灵」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/songwenbin247/article/details/122137239
暂无评论