STM32模拟GPS输出PPS、GPRMC与VLP16时钟同步

article/2025/10/16 8:12:12

这里写目录标题

  • 1.VLP16与GPS相关的管脚:
  • 2.利用GPS信息完成时间同步 TimeSynchronization
  • 3.查找同步关系
  • 4.修改ROS代码
  • 结论

1.VLP16与GPS相关的管脚:

  1. GPS-RECEIVE
    接收GPS的GPRMC语句,注意是RS232电平(high 3-15V,low 1.2V以下),如TTL电平输出需要进行信号反转,没有RS232芯片的可以使用反相电路。NPN电平反向
  2. GPS PULSE
    接收GPS的PPS信号,上升沿触发持续10us-200ms,与下一个PPS要大于300ms以上
    在这里插入图片描述
  3. GROUND
    信号地

2.利用GPS信息完成时间同步 TimeSynchronization

  1. VLP16的TOH时间戳
    VLP16有一个用于记录着TOH(top of hour)的定时器,默认根据VLP16的内部时钟自加累积,当收到一个有效的PPS信号时,会把每一个PPS的上升沿与TOH对齐,在data/position数据包里都会存在4个Byte的TOH时间戳。TOH的结构分为’TOH number of minutes and seconds‘和 ’sub-second‘,时间戳分为秒和微秒。这个4Byte能记录的最大时间是3,599,999,999μs,也就是最多能记录一小时的时间戳。在这里插入图片描述
  2. TOH时间戳结构
    sub-second:无PPS时定时器使用内部时钟给sub-second赋值,当检测到有效的PPS信号时,sub-second会在每一秒的PPS上升沿到来时进行调整。
    minutes and seconds:当接受到有效GPRMS数据时,由GPRMS里的时间戳进行调整,如果没有收到GPRMS时也会每秒自加。
    注意:当GPS突然显示无效定位时,此时由VLP16内部时钟接管驱动sub-second,就会出现一些偏移量。
  3. GPS GPRMC含义
    实例:GPRMC,161050.00,A,3042.94310,N,10358.95564,E,0.057,020513,A*7A
    $GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh
    <1> UTC时间,hhmmss.sss(时分秒.毫秒)格式
    <2> 定位状态,A=有效定位,V=无效定位
    <3> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
    <4> 纬度半球N(北半球)或S(南半球)
    <5> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
    <6> 经度半球E(东经)或W(西经)
    <7> 地面速率(000.0~999.9节,前面的0也将被传输)
    <8> 地面航向(000.0~359.9度,以正北为参考基准,前面的0也将被传输)
    <9> UTC日期,ddmmyy(日月年)格式
    <10> 磁偏角(000.0~180.0度,前面的0也将被传输)
    <11> 磁偏角方向,E(东)或W(西)
    <12> 模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)
  4. web配置参数含义
    – PPS:Lock
    当VLP16检测到一个稳定持续的PPS信号,会在web页面显示“PPS: Locked”以及在 position packet at offset 0xF4的位置写入0x02。
    – PPS Qualifier:Require GPS Receiver Valid
    On:VLP16在使用PPS上升沿给sub-second调整时,首先验证GPS是否提供了有效的位置信息,检测定位状态(A=有效定位,V=无效定位)是否为A
    – PPS Qualifier:Require PPS Lock
    On:VLP16将会使用Delay值的周期去鉴定PPS信号是否有效
    OFF:VLP16会有两个周期去鉴定PPS信号是否有效
    – Delay值
    单位秒,值0-65535,默认5秒,它的作用是有一个{Delay}秒的滚动窗口不断地去检测PPS的有效性,在开始检测时PPS被认定为不稳定模式(free-running),由内部时钟驱动sub-second,当检测PPS稳定后由PPS的上升沿驱动sub-second
    – GPS Qualifier
    On:当GPS有效时,将会由接收的GPRMC来调整TOH的minutes and seconds值
    OFF:将会由接收的GPRMC来调整TOH的minutes and seconds值,不会去检测GPS定位状态(A=有效定位,V=无效定位)
    在这里插入图片描述
    在这里插入图片描述

3.查找同步关系

  1. STM32模拟GPS发送消息
    通过STM32定时器从GPIO输出1HZ的PPS脉冲,示波器检测GPIO的上升沿jitter抖动在5us左右。从PPS上升沿开始,200ms之后发送GPRMC数据,在264ms之后数据传速完毕。
    在这里插入图片描述
  2. 抓取数据计算时间同步关系
    在这里插入图片描述
    – 上图wireshark抓取几秒的位置包,每秒内的位置包大概100多包,左侧红线中4Byte为TOH时间戳(0x96 84 77 27->2525.263655s)
    – 右侧红线是stm32模拟发送的GPRMC时间004205(00时42分05秒->2525s),与TOH的秒级时间对应
    – 下表是通过记录每次GPRMC改变时的集合:
      1.秒级:TOH的秒级部分是与GPRMC的秒级时间相同
      2.sub秒级:TOH的sub秒级部分大概都在264ms左右,对比示波器从PPS上升沿到GPRMC数据发完的时间264ms左右。VLP16所发送的UDP位置包中,每当GPRMC更新时,根据TOH时间戳往前(sub-second)的时间就是上一次PPS所到达的时间,从而使VLP16的时间与Stm32的时间建立时间同步关系。
    在这里插入图片描述

4.修改ROS代码

  1. velodyne_driver下的gps_time_为是否用GPS信息,同时需要修改velodyne_pointcloud的GPS_TIME为true,然后catkin_make运行
    在这里插入图片描述
    在这里插入图片描述

结论

  1. 关系:根据header的时间戳
    在这里插入图片描述

http://chatgpt.dhexx.cn/article/ZyyJJvrx.shtml

相关文章

c++处理GPRMC

#include <iostream> #include<string> #include<vector>// A::member 表示A成员中的member // namespace my_vary202234610229 namespace是c的关键字&#xff0c;将变量定义在自己创建的my_vary命名空间 // 访问命名空间中的变量需要作用域分解符 // 命名空…

gPRC基本介绍

1.说明 gRPC英文全名为Google Remote Procedure Call&#xff0c; 即Google远程过程调用&#xff0c; 是Google发布的一个高性能、通用的开源RPC框架&#xff0c; 2.gRPC定义 gRPC是一个现代的开源高性能RPC框架&#xff0c; 可以在任何环境中运行。 它可以高效地连接数据中心内…

自动驾驶时间同步分析概述--PPS/GPRMC/PTP/全域架构时间同步方案

时间同步的重要性在生活中已经充分体现。试想你因一个姑娘在酒吧和别人大打出手&#xff0c;并约定下周六早上九点在后海小树林里进行群体活动。为此你微信召集了在南非、印度、泰国干建筑的好兄弟。可在你如期赴约的时候&#xff0c;发现队友只有河畔的孤影。当你在病床上睁开…

U-BLOX GPS 模块及GPRMC指令解析

受朋友所托&#xff0c;调试一款GPS模块&#xff0c;该模块是UBLOX的NEO-6M GPS模组。想到用这款GPS的人较多&#xff0c;自己日后也有可能在用到这个模块&#xff0c;就写下这份笔记。 一、介绍 基本信息如下&#xff1a; 1、 模块采用U-BLOX NEO-6M模组&#xff0c;体积小巧&…

ROS节点解析GPS数据:GPRMC/GPFDP/HEADINGA

数据解析&#xff0c;肯定是要知道数据格式的&#xff1a; 数据格式参考&#xff1a;&#xff08;前人已经总结的比较齐全了&#xff09; https://blog.csdn.net/u010384390/article/details/78432016?ops_request_misc%257B%2522request%255Fid%2522%253A%2522163031225416…

python各种模块,迭代器,生成器

从逻辑上组织python代码&#xff08;变量&#xff0c;函数&#xff0c;类&#xff0c;逻辑&#xff1a;实现一个功能&#xff09; 本质就是.py结尾的python文件(文件名&#xff1a;test.py,对应的模块名就是test) 包&#xff1a;用来从逻辑上组织模块的,本质就是一个目录&#…

VFS - 虚拟文件系统的加载和导出

VFS - 代码生成器预览功能实现VFS - 虚拟文件系统基本操作方法的封装VFS - 虚拟文件系统的加载和导出 这是 VFS 的最后一篇&#xff0c;前面两篇中的基本方法已经实现了一个简单的虚拟文件系统&#xff0c;可以创建目录和文件&#xff0c;可以读写文件的内容。在这最后一篇中&a…

如何优雅的使用javascript递归画一棵结构树

递归和尾递归 简单的说&#xff0c;递归就是函数自己调用自己&#xff0c;它作为一种算法在程序设计语言中广泛应用。其核心思想是把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。一般来说&#xff0c;递归需要有边界条件、递归前进阶段和递归返回阶段…

python数据结构和算法 时间复杂度分析 乱序单词检测 线性数据结构 栈stack 字符匹配 表达式求值 queue队列 链表 递归 动态规划 排序和搜索 树 图

python数据结构和算法 参考 本文github 计算机科学是解决问题的研究。计算机科学使用抽象作为表示过程和数据的工具。抽象的数据类型允许程序员通过隐藏数据的细节来管理问题领域的复杂性。Python是一种强大但易于使用的面向对象语言。列表、元组和字符串都是用Python有序集合…

黑马毕向东Java课程笔记(day20-1——20-17)IO流:File类及相关方法、递归、递归的相关练习、Properties、PrintWriter类与PrintStream类、合并流与切割流

1、File类概述   File是文件和目录路径名的抽象表示形式。 用来将文件或者文件夹封装成对象&#xff0c;方便对文件与文件夹的属性信息进行操作。   前面说到的“流”&#xff0c;它只能操作数据&#xff0c;想要操作由数据封装成的文件的信息&#xff0c;必须使用File对象…

算法: 如何优雅的使用javascript递归画一棵结构树

递归和尾递归 简单的说&#xff0c;递归就是函数自己调用自己&#xff0c;它做为一种算法在程序设计语言中广泛应用。其核心思想是把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。一般来说&#xff0c;递归需要有边界条件、递归前进阶段和递归返回阶段…

day04函数名 闭包 迭代器 生成器(各种推导式和生成器表达式) 内置函数 装饰器 递归...

一.今日内容概 1. 函数本质就是一个内存地址. 用起来和变量一模一样 2. 闭包 内层函数对外层变量的使用 1. 保护变量 2. 让一个变量常驻内存 3. 迭代器 可迭代对象: __iter__ 迭代器: __iter__ __next__ from collecti…

linux 迭代列出文件,讲解在Linux命令行下使用ls命令列出文件的技巧

Linux ls 命令可以说是在 Linux 中常见到的命令之一&#xff0c;因为使用它可以掌握系统中文件所在目录中的内容&#xff0c;从而能够查看与修改文件&#xff0c;如果你正在使用 Linux ls 命令&#xff0c;不妨看一下以下技巧&#xff0c;它能帮助你更快速的完成任务。 ls 命令…

学习递归的另一种方法

每个学期&#xff0c;我都会通过一项调查&#xff0c;以获取有关我的教学的一些反馈。 上学期终于有人给我写一篇新文章的想法。 特别是&#xff0c;他们想了解有关递归的更多信息&#xff0c;所以我认为我会综合一些技巧。 递归概述 对于那些可能是第一次学习递归的人&#x…

用非递归方法实现递归算法时_学习递归的另一种方法

用非递归方法实现递归算法时 每个学期&#xff0c;我都会通过一项调查&#xff0c;以获取有关我的教学的一些反馈。 上学期终于有人给我写一篇新文章的想法。 特别是&#xff0c;他们想了解有关递归的更多信息&#xff0c;所以我认为我会综合一些技巧。 递归概述 对于那些可能…

bat 文件夹移动

echo off echo hello world ::得到当天 set pathLog%date:~0,4%%date:~5,2%%date:~8,2% :: eg:能得到 秒:set pathLog%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2% :: set pathLog%pathLog: 0% ::创建文件夹 md "d:\log\log%pathLog% ec…

【Python零基础入门篇 · 19】:os模块、可迭代对象和迭代器对象

目录 一、os模块 1、os模块中的命令&#xff1a; 2、常用命令的代码演示 os.getcwd() os.chdir(path) os.listdir(path) os.mkdir(path) os.makedirs(path) os.rename(旧名,新名) 3、举例&#xff1a;查找文件夹下所有满足要求的文件 二、可迭代对象和迭代器对象 1、…

day18:File(构造方法、创建、删除文件或者文件夹、 判断性、重命名与剪切、得到性、过滤性)、递归(遍历文件夹文件)

一 回顾 1.HashMap集合 特点: A.数据结构也是Hash表结构 B.多线程中是不安全 C.默认的数组的初始化容量是16 2.HashMap与HashSet的比较 相同点:都是hash表结构来存储 不同点: A.HashSet的底层就是使用HashMap来实现 B.HashSet的数据结构针对与是元素 HashMap的…

Python 文件和文件夹 01

Python文件和文件夹 01 ① 修改当前目录&#xff0c;首次利用 pandas 读取 excel 表 os.chdir import os import pandas as pd os.chdir(C:/aa/bb/cc) os.chdir(rC:\aa\bb\cc)数据 pd.read_excel("temp.xlsx") 等同于当前路径下的 temp.xlsx 文件。print(数据)② 字…

删除win10无限嵌套文件夹

解决由于失误操作导致WIN10系统产生无限循环的文件夹问题 昨天本想自己写一个拷贝文件的小程序&#xff0c;结果出现了点小问题&#xff0c;整出了一个无限循环的文件夹&#xff0c;直接删除出出现错误代码提示&#xff0c;显示无法删除&#xff0c;然后我就去网上找解决方案&…