关于STM32的RTC校准问题,网上讨论很多。个人认为可以分为外部校准和内部校准,外部校准一般采用的是GPS的PPS信号(主要是PPS信号基于原子钟,太准了),但是PPS信号如何对RTC进行校准,网上并没有相关的一些校准流程。结合查阅的一些论文,我设计了两套PPS校准流程以及源码,都是基于STM32的,源代码较为简单,希望各位大佬不要嘲笑。这些将会在下一章进行介绍。在进行校准之前,我们首先需要知道GPS的PPS信号和GPRMC信号之间的关系,PPS是脉冲信号,GPRMC是世界时间,两个信号会相继传给STM32。那么这两个信号差多久呢?这里需要我们拿示波器测一下。一般应该是PPS早于GPRMC信号几十毫秒。下图是示波器波形

GPS传感器最出色的功能除了有基于原子钟的精准时钟源PPS信号外,还拥有包含了网络时间的GPRMC信号,在校准RTC之前,对GPRMC时间信号的解析也变得尤为重要,对于GPRMC的解析网上有很多参考例程。GPRMC信号通过232芯片转换成TTL信号之后在电脑上的显示就是一行字符串,因为只需要提取年月日时分秒即可,所以我在最开始的时候打算偷个懒,直接从字符串数组中按索引依次提取时分秒,年月日的值,再通过计算转换成北京时间。然后就操蛋了,时分秒一直没有问题,到了年月日,一会儿是25年,一会儿是21年,一会儿是12月一会儿是24月。这个小bug我排查了三天,先是怀疑GPS发出的GPRMC有问题(可能是没有看到向往的蓝天,他理解错了时间),排查!没问题,再怀疑232芯片转换有问题,排查,没问题!再开始怀疑测试环境的风水……哎~~~

最后发现问题所在,就是————不能按照数组下标提取时间!!!!因为GPRMC的长度不是固定的,它的方位角等参数是一直变的,一会儿是三位,一会儿是四位,操蛋了啊!!!

所以可采用的方法就是,找GPRMC的字段标识符,也就是“,”,利用锁定字符串中指定字符位置的小算法得到标识符的位置,然后根据这个来锁定年月日时分秒的位置。

HAL库环境下可参考我的部分代码如下,pch为自定义指针,USART_RX_BUF为单片机接收的GPRMC信号。

pch = strchr(USART_RX_BUF, ',');while (pch != NULL) {for(i=0;i<12;i++){comma[i]=pch-USART_RX_BUF;pch = strchr(pch + 1, ',');}}

PPS由于它独有的准确性能,可以作为时间同步的辅助时间参考,那么,如果要利用PPS来校准32内部时钟,该怎么做呢?首先我们要清楚PPS和GPRMC的时间关系。PPS和GPRMC的波形图大概如下所示:

这个波形图蓝色应该就是PPS,黄色就是GPRMC信号,由于年代比较久远,我记得二者相差大概几十ms。

既然有了时间差,那我们就设定这个时间差为time。PPS是每秒一次,每秒来一发,那么我们就要好好利用这个特性,校准流程图如下所示:

流程解释:首先检测每次过来的PPS信号,在检测到PPS信号之后的time毫秒内,GPRMC时间信号会被接收到,解析这个GPRMC时间信号,并赋值给A。再次检测PPS信号,并接收下一时刻的GPRMC信号,解析并赋值给B。对于PPS信号的检测,为了减少程序对时间的损耗,建议采取硬件中断的方式来读取PPS信号。将A-time和B-time的值进行求差,看绝对值是否为1(A-time即为PPS的时间,pps每秒一次),如果是1,将B的值赋值给单片机内部RTC,如果不是,重复进行检测。因为RTC时间很容易跑一段时间就出现时间差,所以需要经常性的进行校准。这套流程可以用STM32系列复现出来,建议用F7+HAL库。

这套校准方法是我去年在解决一个时间同步问题时设计的,肯定会存在很多问题,欢迎讨论。由于工作原因,相关源码不能公布出来,有问题可以私信。

多传感器融合时的时间同步问题解决方案——PPS校准STM32内部RTC相关推荐

  1. 多源传感器融合时的时间对齐或者时间同步问题

    本文章配套源代码地址:https://github.com/Little-Potato-1990/localization_in_auto_driving 测试数据:https://pan.baidu ...

  2. 多传感器融合中的时间同步2-论文阅读

    文章目录 前言 主要内容 pps对于INS时间戳校准作用原理 测试结果 参考文献 前言 阅读硕士论文<GPS/INS组合导航系统研究及实现>,该论文第5章为时间同步系统设计,为GPS/IN ...

  3. ffmpegframegrabber 时间戳不同步_多传感器融合中的时间硬同步1-论文阅读

    前言 阅读硕士论文<自动驾驶中多传感器集成同步控制器设计与实现>,该论文为自动驾驶设计了一套时间同步控制器,涉及到的细节非常丰富,可以为多传感器融合中的时间同步提供设计思路. 主要内容 为 ...

  4. 自动驾驶汽车中的激光雷达和摄像头传感器融合

    传感器融合是自动驾驶汽车的关键技术之一.这是自动驾驶汽车工程师都必须具备的技能.原因很简单:视觉传感器无处不在,无时无刻不在使用. 自动驾驶汽车通过4个关键技术工作:感知.定位.规划和控制. 传感器融 ...

  5. 多传感器融合中的时间硬同步1-论文阅读

    前言 阅读硕士论文<自动驾驶中多传感器集成同步控制器设计与实现>,该论文为自动驾驶设计了一套时间同步控制器,涉及到的细节非常丰富,可以为多传感器融合中的时间同步提供设计思路. 主要内容 为 ...

  6. 传感器融合:自动驾驶领域的另一个突围方向

    来源:AI芯天下 目前,自动驾驶的安全事故原因绝大多数出现在传感器这个重要环节,将各类传感器融合在一起,能否就能起到1+1>2的效果呢? 传感器是汽车感知周围的环境的硬件基础,在实现自动驾驶的各 ...

  7. 基于matlab介绍传感器融合和跟踪工具箱中用于评估跟踪器性能的不同定量分析工具(附源码)

    目录 一.分配和错误指标 1.1 轨道和真相定义 1.2 计算和分析指标 1.3 分析分配指标 ​编辑 1.4 分析错误指标 ​编辑二.将指标汇总为分数 2.1 欧斯帕公制 2.2 分析 OSPA 指 ...

  8. 【多传感器融合定位】【从零开始做自动驾驶定位_任佬】【所学到的东西汇总】

    [多传感器融合定位][从零开始做自动驾驶定位_任佬][所学到的东西汇总] 0 前言 1 开篇 1.1 代码工程的运行 2 数据集 3 软件框架 3.1 运行 3.2 学到的 3.2.1 对消息的订阅和 ...

  9. SLAM 03.多传感器融合算法

    传感器标定是自动驾驶的基本需求,一个车上装了多个/多种传感器,而它们之间的时间和空间关系需要统一,传感器数据的标定主要为了定位的准确性. 1.传感器分类 机器人有多种传感器,每种数据类型不一样,数据精 ...

最新文章

  1. 轻量级卷积神经网络的设计技巧
  2. 获得H.264视频分辨率的方法
  3. 面试 6:调整数组顺序使奇数位于偶数前面
  4. Python:目录和文件的操作模块os.path和OS常用方法
  5. 六种常用的物联网通信协议
  6. python sort()、sorted()
  7. Linux多线程——使用信号量同步线程
  8. 程序员编程经验_在没有实际编程的情况下成为更好的程序员
  9. 部署Vista需要了解的十大事项
  10. 我的朋友圈又被刷屏了。
  11. 数据库-如何快速创建连接字符串
  12. 《JAVA程序设计教程 第7版》pdf 附下载链接
  13. HTML学生个人网站作业设计:宠物网站设计——萌宠有家(5页) HTML+CSS 简单DIV布局宠物介绍网页模板代码 DW学生个人网站制作成品下载
  14. java工厂模式应用场景_详解Java设计模式之《简单工厂模式》
  15. 如何解决WIN10提示0x8007007b错误问题
  16. 解决File “D:\ProgramData\Anaconda3\lib\site-packages\keras\engine\saving.py“,相关问题
  17. 多御浏览器安卓版有哪些地方值得下载使用?
  18. 商业智能bi是什么意思?
  19. R星安装不完全无法载入social club(错误码:1)解决办法
  20. MacOS-Homebrew

热门文章

  1. 51单片机学习笔记-9蜂鸣器
  2. python爬虫实战之模拟正方教务系统登录查询成绩
  3. 深度学习入门-基于Python的理论入门与实现源代码加mnist数据集下载推荐
  4. c语言编写拆字程序,倒计时器 单机课程设计.doc
  5. Python随笔:用Python进行切换Windows10桌面壁纸及其取消问题
  6. safi 中placeholder不垂直居中
  7. 【译】送给你的代码审查问题手册
  8. 静态网页通过Nginx部署到阿里云服务器
  9. 消除 a标签 点击后边框
  10. 7-2 求幂级数展开的部分和 (20分)