第二章:硬件选型指南——主流双模定位模块对比与天线选型

各位工程师朋友,大家好。我是老张,搞嵌入式定位系统有些年头了。今天咱们聊聊硬件选型这个事儿。说实话,选模块这事儿,看着简单,其实坑不少。我见过太多项目,方案选错了,后面调试到崩溃。

双模定位,说白了就是让GPS和北斗一起干活。为什么这么做?你想想看,单GPS在城市峡谷里经常掉链子,北斗在某些区域信号更好。两个一起上,互补嘛。我个人的习惯是,只要成本允许,优先上双模。

双模定位硬件选型 主流模块对比 ATGM336H vs NEO-8M vs NEO-6M 性能参数:灵敏度/功耗/精度 价格与供货稳定性 天线选型指南 有源天线 vs 无源天线 增益、驻波比、极化方式 安装位置与接地处理 接口与电气特性 UART/I2C/SPI 协议选择

2.1 主流双模定位模块横向对比

市面上常见的双模模块,我接触最多的就是ATGM336H、NEO-8M和NEO-6M。这三个家伙各有脾气。咱们直接上表格,看得清楚。

参数项 ATGM336H NEO-8M NEO-6M
支持星座 GPS + 北斗 + GLONASS GPS + 北斗 GPS 单模(可配北斗)
定位精度 2.5m CEP 2.5m CEP 2.5m CEP
冷启动时间 ≤32s ≤35s ≤38s
灵敏度 -167dBm -167dBm -162dBm
工作电压 2.7V ~ 3.6V 2.7V ~ 3.6V 2.7V ~ 3.6V
工作电流 25mA(跟踪) 28mA(跟踪) 45mA(跟踪)
接口协议 UART / I2C UART / SPI UART
参考价格 ¥35 ~ ¥55 ¥45 ~ ¥65 ¥25 ~ ¥35
我的建议: 如果项目对功耗敏感,ATGM336H是首选。它的跟踪电流只有25mA,比NEO-6M省了近一半。我在一个手持设备项目里用过,电池续航直接多了3小时。

ATGM336H还有一个隐藏优势——它支持GLONASS。虽然咱们主要用GPS+北斗,但GLONASS在某些高纬度地区表现更好。不过说实话,国内用北斗就够了,GLONASS算是个备胎。

NEO-8M呢?它的优势在于生态成熟。Ublox的文档写得特别详细,寄存器手册、应用笔记一应俱全。如果你团队里有新手,我建议先用NEO-8M上手,调试起来省心。

至于NEO-6M,嗯,它有点老了。虽然便宜,但功耗高、灵敏度低。我只有在成本压到极致的时候才会考虑它。比如做一次性定位标签,用完就扔的那种。

2.2 天线选型——别让天线毁了你的定位

天线这事儿,我吃过不少亏。有一次项目定位一直飘,折腾了两天,最后发现是天线接地没处理好。你想想看,模块再好,天线不行,一切都是白搭。

2.2.1 有源天线 vs 无源天线

先搞清楚一个概念:有源天线自带LNA(低噪声放大器),无源天线没有。怎么选?看你的应用场景。

  • 有源天线: 适合线缆长度超过1米、或者模块放在金属外壳里的情况。增益一般在25dB~35dB。我习惯用28dB的,够用又不贵。
  • 无源天线: 适合模块直接放在PCB上、天线距离近的场景。比如手持设备、无人机飞控。优点是便宜、体积小。
小技巧: 如果你用有源天线,记得检查模块是否支持天线供电。ATGM336H的V_ANT引脚就是干这个的。我曾经忘了接供电,结果天线没工作,定位信号弱得可怜。

2.2.2 关键参数怎么看

天线选型,我主要看三个参数:

  1. 增益(Gain): 不是越高越好。增益太高会引入噪声,反而降低信噪比。我个人推荐25~30dB。
  2. 驻波比(VSWR): 理想值是1.0,实际做到1.5以下就算不错了。超过2.0就别用了,反射损耗太大。
  3. 极化方式: GPS和北斗都用右旋圆极化(RHCP)。别买成线极化的,不然信号衰减严重。
避坑指南: 我曾经买过一批号称"北斗专用"的天线,结果发现是线极化的。装上后定位精度差了3倍。后来我学乖了,每次到货先用频谱仪扫一下极化特性。

2.3 接口说明——UART、I2C、SPI怎么选

模块和主控之间怎么通信?主流方案有三种:UART、I2C、SPI。我一个个说。

2.3.1 UART(串口)——最常用,也最简单

UART是绝大多数模块的标配。ATGM336H和NEO-8M都支持。波特率默认9600,我一般调到115200,速度快,数据更新及时。

接线就四根线:VCC、GND、TX、RX。注意交叉连接——模块的TX接主控的RX,模块的RX接主控的TX。这个我刚开始也搞反过,哈哈。

// 典型的UART初始化代码(STM32平台)
UART_HandleTypeDef huart2;
huart2.Instance = USART2;
huart2.Init.BaudRate = 115200;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE;
HAL_UART_Init(&huart2);

// 接收NMEA数据
uint8_t rx_buffer[256];
HAL_UART_Receive(&huart2, rx_buffer, 256, 1000);

2.3.2 I2C——省引脚,适合资源紧张的场景

ATGM336H支持I2C接口。如果你主控的UART口不够用,可以用I2C。地址一般是0x42(7位地址)。

不过说实话,I2C的速率不如UART快。标准模式100kHz,快速模式400kHz。如果你需要高频率的定位数据(比如10Hz以上),我建议还是用UART。

2.3.3 SPI——速度最快,但接线多

NEO-8M支持SPI接口。SPI的速率可以跑到几MHz,适合需要大量数据传输的场景。但代价是多占用几个IO口:CS、SCLK、MISO、MOSI。

我个人很少用SPI。为什么?因为定位模块的数据量不大,NMEA协议每秒也就几百字节,UART完全够用。除非你在做RTK或者原始观测量输出,否则没必要上SPI。

我的经验: 90%的项目用UART就够了。别为了省一个串口去折腾I2C或SPI,调试起来麻烦。我见过有人用I2C结果因为上拉电阻没配好,通信一直不稳定。

2.4 电源与PCB布局注意事项

最后聊几句电源和布局。定位模块对电源纹波比较敏感。我建议在模块的VCC引脚附近加一个10μF的钽电容和一个0.1μF的陶瓷电容。别省这两个电容,不然定位精度会受影响。

PCB布局上,天线要走微带线,阻抗控制在50Ω。天线下面不要铺铜,保持净空。我见过有人把天线放在金属外壳旁边,结果信号衰减了10dB以上。

嗯,硬件选型就聊到这儿。记住一句话:模块选对,天线选好,接口选简单。这三步走对了,后面调试就顺了。


专注资料整理