如何在MCU上通过ToD+PPS 获取同步时间(一)

2024-01-22 01:48
文章标签 时间 获取 同步 mcu pps tod

本文主要是介绍如何在MCU上通过ToD+PPS 获取同步时间(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

欢迎淘宝搜索飞灵科技,我司相关新产品陆续上线

在很多工业使用场景中,网络内一些设备终端与设备终端,或设备终端与主控之间需要进行时间同步。 比如给传感器数据打时间戳,比如总线的时分复用等场景,相关的设备都需要一个统一的时间。

在同步精度不是很高的场景中,我们可以使用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 获取同步时间(二)”

这篇关于如何在MCU上通过ToD+PPS 获取同步时间(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/631494

相关文章

详谈redis跟数据库的数据同步问题

《详谈redis跟数据库的数据同步问题》文章讨论了在Redis和数据库数据一致性问题上的解决方案,主要比较了先更新Redis缓存再更新数据库和先更新数据库再更新Redis缓存两种方案,文章指出,删除R... 目录一、Redis 数据库数据一致性的解决方案1.1、更新Redis缓存、删除Redis缓存的区别二

如何用Java结合经纬度位置计算目标点的日出日落时间详解

《如何用Java结合经纬度位置计算目标点的日出日落时间详解》这篇文章主详细讲解了如何基于目标点的经纬度计算日出日落时间,提供了在线API和Java库两种计算方法,并通过实际案例展示了其应用,需要的朋友... 目录前言一、应用示例1、天安门升旗时间2、湖南省日出日落信息二、Java日出日落计算1、在线API2

python获取当前文件和目录路径的方法详解

《python获取当前文件和目录路径的方法详解》:本文主要介绍Python中获取当前文件路径和目录的方法,包括使用__file__关键字、os.path.abspath、os.path.realp... 目录1、获取当前文件路径2、获取当前文件所在目录3、os.path.abspath和os.path.re

Java子线程无法获取Attributes的解决方法(最新推荐)

《Java子线程无法获取Attributes的解决方法(最新推荐)》在Java多线程编程中,子线程无法直接获取主线程设置的Attributes是一个常见问题,本文探讨了这一问题的原因,并提供了两种解决... 目录一、问题原因二、解决方案1. 直接传递数据2. 使用ThreadLocal(适用于线程独立数据)

如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)

《如何使用Bash脚本中的time命令来统计命令执行时间(中英双语)》本文介绍了如何在Bash脚本中使用`time`命令来测量命令执行时间,包括`real`、`user`和`sys`三个时间指标,... 使用 Bash 脚本中的 time 命令来统计命令执行时间在日常的开发和运维过程中,性能监控和优化是不

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

Java将时间戳转换为Date对象的方法小结

《Java将时间戳转换为Date对象的方法小结》在Java编程中,处理日期和时间是一个常见需求,特别是在处理网络通信或者数据库操作时,本文主要为大家整理了Java中将时间戳转换为Date对象的方法... 目录1. 理解时间戳2. Date 类的构造函数3. 转换示例4. 处理可能的异常5. 考虑时区问题6.

Nacos集群数据同步方式

《Nacos集群数据同步方式》文章主要介绍了Nacos集群中服务注册信息的同步机制,涉及到负责节点和非负责节点之间的数据同步过程,以及DistroProtocol协议在同步中的应用... 目录引言负责节点(发起同步)DistroProtocolDistroSyncChangeTask获取同步数据getDis

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r