我有一个与我的C ++应用程序接口的AHRS(态度标题参考系统)。我通过以太网从AHRS收到50Hz的消息流,作为此消息的一部分,我得到UTC时间。我的系统还将NTPD作为嵌入式网络的时间服务器运行。 AHRS还有1PPS输出,表示UTC的第二次翻转时间。我想将NTPD时间与UTC同步。经过一些研究,我发现有些技术利用串口作为1PPS的输入。根据我的发现,这些技术使用GPSD读取1PPS并与NTPD通信以同步系统时间。但是,GPSD期待来自GPS的NMEA格式的消息。我没有那个。
我现在看到的方式,我有几种可选的方法:
请勿使用GPSD。编写一个读取1PPS和以太网的程序 消息包含UTC,然后以某种方式传达此信息 到NTPD。
使用GPSD。编写一个将以太网消息重新打包成的程序 可以发送到GPSD的东西,并让它处理 与NTPD的互动。
还有别的吗?
非常感谢任何建议。
修改 我为这个构造不良的问题道歉。
我对此问题的解决方案如下: 1 - 接口1PPS到RS232端口,结果是由GPSD处理的标准方法。 2 - 编写自定义C ++应用程序以读取包含UTC的以太网消息,并从该构建中读取包含UTC的NMEA消息。 3 - 将NMEA消息提供给GPSD,GPSD又与NTPD接口,以使GPS / 1PPS信息与系统时间同步。
答案 0 :(得分:0)
我不知道为什么你会想要通过以太网帧传输信号来驱动PPS设备。此外,PPS不像您认为的那样工作。 PPS信号中没有时间码,因此您无法将时间与PPS信号同步。 PPS信号仅用于通知计算机一秒钟的时间。
答案 1 :(得分:0)
有一些例子说明如何使用串口读取PPS信号,例如:通过将其附加到具有可比较功能的引脚 - 可能是RingIndicator(RI)或具有类似功能的其他东西。我所看到的问题是,任何一种代码驱动的中断服务都有其延迟和抖动。这是由您的系统设计定义的(如果您这样做,通过您自己的系统定制的特殊中断处理程序例程 - 在PC上甚至很好的旧ISA总线引入NMI处理程序可能会看到这样的效果)。
我最了解的是,在“计算机”上进行时间同步的人正在使用真正的硬件定时器计数器(例如64位)和一个被触发的锁存器,以便在每次传入时采样并保持定时器的值1PPS脉冲。 - 人们已经通过以太网上的PTP进行了这一操作,其中一个小的变化是输入数据的特殊边缘被用作触发器,并且这个发送器和接收器可以使用进一步的程序逻辑来同步,该逻辑从内置的数据中获取结果值。 PTP-硬件锁。 见这里:https://en.wikipedia.org/wiki/Precision_Time_Protocol
与例如802.1AS:http://www.ieee802.org/1/pages/802.1as.html 在“相关举措”部分描述了维基百科: “IEEE 802.1AS-2011是IEEE音频视频桥接(AVB)标准组的一部分,由IEEE 802.1时间敏感网络(TSN)任务组进一步扩展。它规定了IEEE 1588-2008时间使用的配置文件虚拟桥接局域网上的同步(由IEEE 802.1Q定义)。特别是,802.1AS定义了IEEE 802.3(以太网),IEEE 802.11(Wi-Fi)和MoCA如何都是相同PTP时序域的一部分。“
一些文章(德文):https://www.elektronikpraxis.vogel.de/ethernet-fuer-multimediadienste-im-automobil-a-157124/index4.html 和一些演示文稿:http://www.ieee802.org/1/files/public/docs2008/as-kbstanton-8021AS-overview-for-dot11aa-1108.pdf
我对你的问题的理由是: 是的可能。但由于你不得不使用的中断处理程序的延迟和抖动等各种内部因素,它是一种精度有限的设计。每个脉冲和长期运行中可实现的总体精度很难说,但在启动时可能在大约10 ms的范围内,单个脉冲可能/猜测为0.1 ms。 - 这样做意味着证明它。长期观察应该可以帮助您通过非常具体的计算机和选定的软件环境揭示真正的实际上限。