GNSS 定位模组产品总览
GNSS 基础知识
GNSS(Global Navigation Satellite System,全球导航卫星系统)是利用卫星信号进行定位的技术总称。
全球四大卫星系统
| 系统 | 国家 | 卫星数量 | 频段 | 精度 |
|---|---|---|---|---|
| GPS | 美国 | 31颗 | L1/L2/L5 | 3-5m |
| GLONASS | 俄罗斯 | 24颗 | L1/L2 | 5-10m |
| Galileo | 欧盟 | 30颗 | E1/E5/E6 | 1-3m |
| BeiDou(北斗) | 中国 | 35颗 | B1/B2/B3 | 2-5m |
多星座定位优势:
- 可见卫星数量更多(城市峡谷、室内边缘场景)
- 定位精度更高(更多测量值)
- 可靠性更强(单系统故障时仍可定位)
定位原理
基本原理:三角测量(伪距定位)
1. 卫星发送信号(包含时间戳和轨道参数)
2. 接收机接收信号,计算传播时间
3. 传播时间 × 光速 = 伪距(含时钟误差)
4. 至少需要 4 颗卫星(3个位置坐标 + 1个时钟误差)
5. 解方程组,得到接收机位置
误差来源:
- 电离层延迟:约 5-15m
- 对流层延迟:约 2-5m
- 多路径效应:约 1-5m(信号反射)
- 卫星星历误差:约 1-2m
- 接收机噪声:约 0.5-1m
标准 GPS 精度:3-5m(95% 置信度)移远 GNSS 产品线
产品分类
标准 GNSS 模组(消费/工业级)
├── L26(超小尺寸,消费级)
├── L76K(多星座,工业级)
├── LC29H(高性能,车规级)
└── L89(多频,高精度入门)
高精度 GNSS 模组(RTK/PPP)
├── LC29H DA(双天线,航向角)
├── LG69T(车规级高精度)
└── LC79D(双频RTK)
DR 航位推算模组(车规级)
├── LG69T(GNSS + IMU 融合)
└── LC29H DA(双天线 + DR)
蜂窝 + GNSS 组合模组
├── BC20(NB-IoT + GNSS)
├── BG95-M2(Cat.M/NB-IoT + GNSS)
└── EC200A-CN(Cat.1 + GNSS,可选)标准 GNSS 模组对比
| 型号 | 星座 | 频段 | 精度 | 封装 | 特点 |
|---|---|---|---|---|---|
| L26 | GPS+GLONASS | L1 | 2.5m CEP | 16×12.2mm | 超小,消费级 |
| L76K | GPS+GLONASS+BeiDou+Galileo | L1 | 1.8m CEP | 10.1×9.7mm | 超小多星座 |
| LC29H | GPS+GLONASS+BeiDou+Galileo | L1 | 1.5m CEP | 17×12.2mm | 高性能,车规 |
| L89 | GPS+GLONASS+BeiDou+Galileo | L1+L5 | 1.0m CEP | 17×12.2mm | 双频,高精度 |
高精度 GNSS 模组对比
| 型号 | 精度 | RTK | 频段 | 特点 |
|---|---|---|---|---|
| LC79D | 1cm(RTK) | 支持 | L1+L2 | 双频RTK |
| LG69T | 1cm(RTK) | 支持 | L1+L5 | 车规级,DR融合 |
| LC29H DA | 1cm(RTK) | 支持 | L1 | 双天线,航向角 |
GNSS 模组关键参数
灵敏度
| 参数 | 说明 | 典型值 |
|---|---|---|
| 捕获灵敏度 | 冷启动时能捕获的最弱信号 | -148 dBm |
| 跟踪灵敏度 | 持续跟踪的最弱信号 | -167 dBm |
| 重捕获灵敏度 | 信号中断后重新捕获 | -160 dBm |
首次定位时间(TTFF)
| 启动类型 | 说明 | 典型时间 |
|---|---|---|
| 冷启动 | 无任何辅助信息 | 30-60s |
| 温启动 | 有星历数据,无位置 | 15-30s |
| 热启动 | 有星历和位置数据 | 1-5s |
| AGPS 辅助 | 网络下载星历 | 1-3s |
精度指标
CEP(Circular Error Probable,圆概率误差):
50% 的定位结果在此圆内
1.8m CEP ≈ 3.0m RMS ≈ 5.8m 2DRMS(95%)
常用精度表示:
CEP:50% 置信度
RMS:68% 置信度(1σ)
2DRMS:95% 置信度(2σ)GNSS 数据格式(NMEA)
GNSS 模组输出标准 NMEA 0183 格式数据:
$GNGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47
字段解析:
$GNGGA:语句标识(GN=多星座,GGA=定位信息)
123519:UTC 时间(12:35:19)
4807.038,N:纬度(48°07.038'N)
01131.000,E:经度(11°31.000'E)
1:定位质量(1=GPS定位,2=差分定位,4=RTK固定解)
08:使用卫星数
0.9:HDOP(水平精度因子)
545.4,M:海拔高度(米)
46.9,M:大地水准面高度
*47:校验和$GNRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A
字段解析:
$GNRMC:推荐最小定位信息
123519:UTC 时间
A:状态(A=有效,V=无效)
4807.038,N:纬度
01131.000,E:经度
022.4:速度(节,1节=1.852km/h)
084.4:航向角(度,真北为0)
230394:日期(23日03月94年)GNSS 开发快速入门
硬件连接
GNSS 模组接口:
UART_TX → MCU UART_RX(NMEA 数据输出)
UART_RX → MCU UART_TX(命令输入,可选)
VCC → 3.3V 或 1.8V(查看 Datasheet)
GND → 地
ANT → 有源天线(3.3V 供电)
TIMEPULSE → MCU GPIO(1PPS 时间脉冲,可选)解析 NMEA 数据(C 语言)
c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
double latitude;
double longitude;
float altitude;
float speed;
int satellites;
int fix_quality;
} GNSSData;
// 解析 GGA 语句
int parse_gga(const char *nmea, GNSSData *data) {
char buf[128];
strncpy(buf, nmea, sizeof(buf));
char *token = strtok(buf, ",");
int field = 0;
while (token != NULL) {
switch (field) {
case 2: // 纬度
data->latitude = atof(token) / 100.0;
break;
case 4: // 经度
data->longitude = atof(token) / 100.0;
break;
case 6: // 定位质量
data->fix_quality = atoi(token);
break;
case 7: // 卫星数
data->satellites = atoi(token);
break;
case 9: // 海拔
data->altitude = atof(token);
break;
}
token = strtok(NULL, ",");
field++;
}
return data->fix_quality > 0 ? 0 : -1;
}