简 介: 初步测试了一款国内GNSS导航模块的性能。通过指令配置使得GPS可以输出10Hz的数据。并对接收到的数据进行了初步的统计分析。
关键词
: GNSS,GPS,精度
§01 GNSS定位GPS
手边有来自于 TB LQ的双频GNSS定位GPS 模块。现在(2022-02-09)准备对其进行测试。
1.1 基本特性
1.1.1 工作电压和外部结构
- 供电电压:+5V
- 波特率:115200, 相关的波特率和PPS参数可以通过Satrack上位机设置和保存。
▲ 图1.1.1 GPS连接关系
1.1.2 模块组成
- 模块一套(模块+排针+天线+连接线),物流发送;
- 使用手册一份(pdf版);
- 配套测试程序一份(3277版);
- 视频教程一份(龙邱B站 https://www.bilibili.com/video/BV1pF411p7kC/ )。
▲ 图1.1.2 GPS的组成
1.1.3 模块特性
▲ 图1.1.3 模块特性
1.2 输出数据格式
▲ 图1.2.1 数据组成
▲ 图1.2.2 数据的开始
§02 测试GNSS
2.1 测试方法
利用ESP32-S模块转接板设计与实现测量GPS的输出数据。
▲ 图2.1.1 利用ESP32测试GPS
2.1.1 测试电路板
▲ 图2.1.2 ESP32-S转接板的定义接口
2.1.2 使用示波器观察GPS的TX
▲ 图2.1.3 观察GPS的TX波形
2.1.3 问题
将GPSDETX连接到ESP32的RX端口,ESP32退出了运行过程。
2.1.4 更换接收模式
利用原来应用于开发MEGA单片机的下载接口模块,来接收GPS发送的字符。
▲ 图2.1.4 利用MEGA328下载模块
(1)管脚定义
下面是对应的MEGA32的接口定义,可以看到上面下载UART模块的功能定义:
-
UART下载管脚定义:
-
Pin1
:+5VPin2
:RXD,注:与单片机的TXD的交叉连接。Pin3
:TXDPin4
:DTSPIn5
:GND
▲ 图2.1.5 单片机接口定义
(2)接收结果
打开PC中的COM1,可以接收到从GPS的发送的信息。
▲ 图2.1.6 接收到的数据文本
2.2 配置GPS
由于需要发送十六进制的配置命令,通过MEGA8下载程序界面进行通信。
▲ 图2.2.1 MEGA328下载程序界面
2.2.1 配置命令
- 关闭GGA: F1 D9 06 01 03 00 F0 00 00 FA 0F
- 关闭GSA: F1 D9 06 01 03 00 F0 02 00 FC 13
- 关闭GSV: F1 D9 06 01 03 00 F0 04 00 FE 17
- 关闭TXT: F1 D9 06 01 03 00 F0 20 00 1A 4F
- 切换为10H组: F1 D9 06 42 14 00 00 0A 38 00 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 24
- 保存设置: F1 D9 06 09 08 00 00 00 00 00 2F 00 00 00 46 B7
(1)GPS常用命令
▲ 图2.2.2 GPS 常用命令
上面的关闭命令顺序可以交换顺序。后面的保存设置一定在断电重启之前执行完毕。
2.2.2 设置后的结果
执行完毕之后,模块断电重启之后便可以接收到来自于GPS模块的每秒10个数据。
▲ 图2.2.3 设置后可以获得10Hz的数据
2.3 测试结果
将GPS摆放在靠近办公室的窗口,此时GPS便可以接收到外部卫星信号,输出对应的接收数据。
2.3.1 秒脉冲信号
一旦GPS接收到信号之后,在模块的第五管脚便输出秒脉冲信号。
▲ 图2.3.1 GPS输出的秒信号
2.3.2 接收到的数据
▲ 图2.3.2 GPS 发送的文本数据
'$GNRMC,111333.700,A,4000.03218,N,11619.64045,E,0.000,26.91,090222,,,A*73', '$GNRMC,111333.800,A,4000.03218,N,11619.64044,E,0.000,26.91,090222,,,A*7D', '$GNRMC,111333.900,A,4000.03218,N,11619.64044,E,0.000,26.91,090222,,,A*7C', '$GNRMC,111334.000,A,4000.03219,N,11619.64044,E,0.207,89.88,090222,,,A*7B', '$GNRMC,111334.100,A,4000.03219,N,11619.64045,E,0.245,117.91,090222,,,A*43', '$GNRMC,111334.200,A,4000.03218,N,11619.64045,E,0.000,117.91,090222,,,A*42', '$GNRMC,111334.300,A,4000.03219,N,11619.64045,E,0.245,287.68,090222,,,A*4D', '$GNRMC,111334.400,A,4000.03219,N,11619.64044,E,0.263,267.46,090222,,,A*4D', '$GNRMC,111334.500,A,4000.03219,N,11619.64043,E,0.210,4.74,090222,,,A*49', '$GNRMC,111334.600,A,4000.03219,N,11619.64043,E,0.301,175.56,090222,,,A*4C', '$GNRMC,111334.700,A,4000.03219,N,11619.64043,E,0.000,175.56,090222,,,A*4F', '$GNRMC,111334.800,A,4000.03219,N,11619.64042,E,0.288,89.54,090222,,,A*73', '$GNRMC,111334.900,A,4000.03219,N,11619.64043,E,0.000,89.54,090222,,,A*71', '$GNRMC,111335.000,A,4000.03219,N,11619.64043,E,0.000,89.54,090222,,,A*79', '$GNRMC,111335.100,A,4000.03219,N,11619.64043,E,0.000,89.54,090222,,,A*78', '$GNRMC,111335.200,A,4000.03219,N,11619.64043,E,0.270,91.36,090222,,,A*73',
2.3.3 数值统计
统计接收到的坐标的平均值和标准方差。
from headm import *
from tsmodule.tsstm32 import *
stm32cmd('COPY')
allstr = clipboard.paste().split('\n')
longdim = []
latidim = []
for s in allstr:
if len(s) == 0: continue
if s.find('$') < 0: continue
ss = s.split(',')
longdim.append(float(ss[3]))
latidim.append(float(ss[5]))
printf(len(longdim))
printf(mean(longdim), std(longdim))
printf(mean(latidim), std(latidim))
752
4000.0308547074465
0.00011173876995471463
11619.632931156917
0.0008331489016910691
1695
4000.0332160707962
0.00029362351378679037
11619.635073044246
0.0006330272316004214
2100
4000.033260909523
0.00028110730268333305
11619.634760957144
0.0008624486668393132
3070
4000.0333911465805
0.00032372987293646023
11619.634157592835
0.001206152808081727
※ 测试总结 ※
初步测试了一款国内GNSS导航模块的性能。通过指令配置使得GPS可以输出10Hz的数据。并对接收到的数据进行了初步的统计分析。
■ 相关文献链接:
● 相关图表链接:
- 图1.1.1 GPS连接关系
- 图1.1.2 GPS的组成
- 图1.1.3 模块特性
- 图1.2.1 数据组成
- 图1.2.2 数据的开始
- 图2.1.1 利用ESP32测试GPS
- 图2.1.2 ESP32-S转接板的定义接口
- 图2.1.3 观察GPS的TX波形
- 图2.1.4 利用MEGA328下载模块
- 图2.1.5 单片机接口定义
- 图2.1.6 接收到的数据文本
- 图2.2.1 MEGA328下载程序界面
- 图2.2.2 GPS 常用命令
- 图2.2.3 设置后可以获得10Hz的数据
- 图2.3.1 GPS输出的秒信号
- 图2.3.2 GPS 发送的文本数据
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST2.PY -- by Dr. ZhuoQing 2022-02-09
#
# Note:
#============================================================
from headm import *
from tsmodule.tsstm32 import *
stm32cmd('COPY')
allstr = clipboard.paste().split('\n')
#printf(allstr)
longdim = []
latidim = []
for s in allstr:
if len(s) == 0: continue
if s.find('$') < 0: continue
ss = s.split(',')
# printf(ss)
longdim.append(float(ss[3]))
latidim.append(float(ss[5]))
# break
printf(len(longdim))
printf(mean(longdim), std(longdim))
printf(mean(latidim), std(latidim))
#------------------------------------------------------------
# END OF FILE : TEST2.PY
#============================================================