首页 > 编程知识 正文

USB转串口 模拟 PPS GPRMC 进行授时

时间:2023-05-05 02:43:11 阅读:187257 作者:1424

将PC的系统时间通过USB传输到串口模拟PPS GPRMC的授受。 寒冷的天气适合在室内测试MCU和SOC的授受功能、传感器的授受和线束的检测、测试干扰等。

如图所示,左为USB旋转9针RS232串行端口,右为USB旋转TTL串行端口

原理:

PPS有3V3/5V/12V等标准。 这里使用串行芯片的RTS引脚模拟PPS (也可以是DTR引脚)。 左RS232的DB9端口也有RTS引脚,但实测为9V。 所以,代替GPRMC为RS232电平,用右边的USB转动TTL芯片的3.3V的RTS,直接从左边的DB9的pin 3txd引脚输出就可以了。 因为图的左边是RS232等级,图的右边是TTL等级,所以使用了2个混搭。 只要自己做板用USB转动串行芯片RS232芯片,Python3的脚本1.py就如下所示。 (在Win中为com ),在Ubuntu中为/dev/ttyUSB* ),必须首先安装pyserial和nmeasim。 ) ) ) )。

#!/usr/MRD kfd/python3# python3- mpipinstallpyserial # python3- mpipinstallnmeasimfromnmeasim.modelsimportgpsreceiverfromthreadingimporttimerfromdatetimeimportdatetimemportimportttimporttttserimporiatttimporimatimette 的序列号是基于RTS或DTR终端的伪PPS RS232 _ ser=serial.serial (port=' com 14 )、baudrate=9600的左侧板模拟gprmc GPS=GPS ) )单GPRMC输出# https://git lab.com/nmea sim/nmea sim/-/blob/master/nmea sim ' gsv '、' RMC '、' VTG、' ZDA ' PPS输出高,使用DTR引脚时为ST 0V,PS输出低defPPS_init(:#print ) PPS_init ) ) pps_low ) # 初始低等级def gprmc_out ) :GPS.date_time=data GPRMC的一些信息只要有时间,以下参数为GPS.lat=39.1234 GPS._ lon _ sign=' n 发出可以不设置g_的232 _ ser.write (GPS.get _ output ([0].encode (utf-8 ) ) b'rn ' ) GPRMC消息,最后 添加的n # print (GPS.get _ output ([0].encode (' utf-8 ' ) ) # ts=datetime.utcnow ).strftime ) ' %y-m-% print(defPPS_out ) : pps_high ) ) ts=datetime.utcnow ).strftime (% y-% m-% d timer (1- int (ts [-33333333330 ] ) pps_init ).start ) #从补偿PPS的高电平持续时间的grmc_out(.start ) # PPS的上升起100ms之后,GPRMCpps_init ) ) pps_out )

换算成十六进制,最后一定需要0x0D,0x0A。 如果没有,以Velodyne的激光雷达VLP-16为例,网页上可能有以前的GPS位置信息,但Wireshark捕获的512字节数据包只显示PPS Locked,GPRMC信息

左边是来自PPS的时间戳,加上8小时正好是北京时间,精度在4ms以内,可以共通考试

PS波形(CP2104芯片、PPS高电平持续时间、示波器实测脉冲宽度比设置的20ms多12ms,但PPS上升沿应该影响不大) )

2个脉冲上升沿的间隔1s

上升沿有点惨快1ms了。 由此导致的PPS误差又增加了1ms。 将9600bps更改为115200bps不会改善。 即使改成CH340,空载的差别也不大。 用MCU模拟的话可能会好一点。 或者可能会追加74芯片

如果是单纯的授受,也可以不通过脚本来确定信息。 如下所示

dfgprmc _ out (3360 GPS.date _ time=datetime.now ) (RS232_ser.write ) GPS.get_output ) )0).encode 0000 0000.000,n,0000.000,e,0.0,0.01221 0.0,301221,A*61# $GPRMC,024944.113,a,0000.000,n,00000.000,e

PS是固定的每秒一次NMEA V2.3 GPRMC或GPGGAPPS,后面的NMEA可以通过串行端口或以太网端口发送。 以太网端口需要通过TCP/UDP/广播将NMEA消息发送到端口10110,此处不考虑。 如果希望在以下GPRMC仅指向在串行端口RS232电平上发送的信息PPS和GPRMC的一条线上施加大量激光雷达,则PPS可能不是TTL电平、3.3V/5V或10us-200ms脉冲宽度。 在以下程序中将20msGPRMC设置为RS232电平,9600bps,格式为可以是HHMMSS、HHMMSS.s、HHMMSS.ss或HHMMSS.ss的末尾为0x0D、0x0A,即 时间要求请参照下图。 以下程序将PPS的上升沿设置为100ms,然后发布

一开始我还以为是web界面重叠,雷达坏了

实际上,浏览器的字体被设定为特大,更改为推荐内容就很普通了。 (我相信有人遇到了同样的情况。

没有PPS GPRMC课时显示

发布PPS GPRMC将锁定网页的显示

Wireshark也能抓住GPRMC的包

00f4位置的02表示PPS Locked,测试完成。

欢迎扫描二维码关注本人微信公众号,及时获取最新文章:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。