如何在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

相关文章

go中的时间处理过程

《go中的时间处理过程》:本文主要介绍go中的时间处理过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 获取当前时间2 获取当前时间戳3 获取当前时间的字符串格式4 相互转化4.1 时间戳转时间字符串 (int64 > string)4.2 时间字符串转时间

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

MySQL 获取字符串长度及注意事项

《MySQL获取字符串长度及注意事项》本文通过实例代码给大家介绍MySQL获取字符串长度及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 获取字符串长度详解 核心长度函数对比⚠️ 六大关键注意事项1. 字符编码决定字节长度2

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据