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


1.VLP16与GPS相关的管脚:

  1. GPS-RECEIVE 接收GPS的GPRMC语句,注意是RS232电平(high 3-15V,low 1.2V以下),如TTL电平输出需要进行信号反转,没有RS232芯片的可以使用反相电路。
  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的时间戳

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/290653.html

(0)
上一篇 2022年10月5日
下一篇 2022年10月5日

相关推荐

发表回复

登录后才能评论