使用STM32 MCU模拟实现PPS+TOD授时信号

简介

PPS+TOD是授时信号的一种,用来传递准确的时间信息。

  • PPS,Pulse Per Second,是每秒一次的脉冲信号,其上升沿表示整秒的时刻。
  • TOD,Time of Day,是时间信息。是跟随在每个PPS信号后的由串口发出的一句报文,报文内容包含UTC时间。通常在PPS信号后的几百个毫秒内发送完成。

GNSS授时的PPS+TOD

GNSS,Global Navigation Satellite System,是全球导航卫星系统。目前最准确的授时来自卫星授时,也就是通过GPS,北斗等GNSS接收机输出的PPS+TOD进行授时。我们知道GNSS接收机经常用于定位导航,但其实它输出PPS+TOD时间信息也是很重要的一种授时方式。

GNSS的数据信息通常采用NMEA-0183协议,该协议的官方网址在
https://www.archives.nmea.org/content/STANDARDS/NMEA_0183_Standard。我们具体在使用的时候直接参考接收机厂商的协议手册就可以了。

TOD的报文格式常见的有RMC语句,和ZDA语句。以RMC语句为例,它的报文格式是这样的。
在这里插入图片描述

STM32模拟实现PPS+TOD

在很多应用系统中,各个子系统往往需要时间同步。通过PPS+TOD传递时间信息,就是一种可以支持高精度时间同步的方式。本示例只简单演示如何通过一个STM32的MCU输出PPS+TOD的时间信息。

MCU因为运行频率较低,而且通常也没有专用高精度的时间模块,所以其传递和同步高精度的时间信息还是比较受限制的。本示例使用的STM32F103C8T6最高工作主频72MHz,代码里我们配置成65MHz,示例的设计思路是

  • 基于65MHz的系统时钟,软件模拟一个时钟,可以提供TOD信息。对其进行gettime,settime操作。
  • 基于系统时钟的tick(1ms)中断,当模拟时钟达到整秒时,在中断处理函数里set GPIO。当模拟时钟达到设置的脉冲宽度时,在中断处理函数里clean GPIO。以此作为PPS的输出。
  • 主线程就在PPS输出后的几百毫秒里,把TOD时间组包成RMC语句报文,通过串口发送。

示例运行

核心板出一个调试串口,和一个TOD串口接到PC上查看。也接一个ST-LINK到PC,进行程序烧写。

  • 调试串口:TX(A9管脚),RX(A10管脚)
  • TOD串口:TX(A2管脚)
  • PPS:C13管脚

在这里插入图片描述
两个串口波特率默认都是9600,左边是调试串口输出信息,右边是TOD信息。核心板LED灯随PPS信号每秒闪烁一次,TOD串口接收LED灯每秒接收TOD信息也闪烁一次。
在这里插入图片描述
我们从示波器查看PPS和TOD的波形,PPS脉宽100ms,TOD从第10ms时开始发出。每秒发出一对。
在这里插入图片描述
在这里插入图片描述

代码结构

代码开发基于ST官方的STM32CubeF1 v1.8.4,使用Keil IDE。增加了虚拟timer和tod的相关功能。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
PPS+TOD的配置可以通过定义修改。如果有时间能改成通过调试端口,动态配置就更好了。
在这里插入图片描述
如果对源码感兴趣,可以通过https://flyelf.taobao.com/获取。适当少量收费有利于慎重选择和学习。

相关推荐

最近更新

  1. MySQL--数据的增删改

    2024-04-01 15:02:03       0 阅读
  2. Qt的坐标转换

    2024-04-01 15:02:03       0 阅读
  3. 【Flutter】序列化方案之命令行生成model

    2024-04-01 15:02:03       0 阅读
  4. 【shell】变量和引号!

    2024-04-01 15:02:03       0 阅读
  5. MATLAB中Simulink.defaultModelTemplate用法

    2024-04-01 15:02:03       0 阅读
  6. 如何实现YOLOv8保存目标检测后的视频文件

    2024-04-01 15:02:03       0 阅读
  7. 常见的SQL优化策略

    2024-04-01 15:02:03       0 阅读

热门阅读

  1. VLAN配置及原理

    2024-04-01 15:02:03       7 阅读
  2. 网络常见的端口号

    2024-04-01 15:02:03       8 阅读
  3. 计算机填空知识点(3)完

    2024-04-01 15:02:03       6 阅读
  4. gitee创建仓库后的基本指令

    2024-04-01 15:02:03       5 阅读
  5. python面试题(51~60)

    2024-04-01 15:02:03       5 阅读
  6. 学习总结!

    2024-04-01 15:02:03       5 阅读
  7. fpga_awb

    fpga_awb

    2024-04-01 15:02:03      6 阅读
  8. Day1 - Hive基础知识

    2024-04-01 15:02:03       5 阅读