玩转X-CTR100 l STM32F4 l U-Blox NEO-6M GPS卫星定位-nmealib解码库移植解码

我造轮子,你造车,创客一块儿造起来!塔克创新资讯【塔克社区 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/ 算法

    

本文介绍X-CTR100控制器 扩展GPS卫星定位模块,型号为GY-GPS6MV2,使用U-BLOX NEO-6M模块,一款应用普遍的模块,淘宝上能够方便买到。 数据结构

本文使用Tim开源解码库nmealib进行解码,串口输出解码结果。 函数

原理

GPS定位原理

性能

模块介绍

U-BLOX NEO-6M GPS 模块,具备高灵敏度、低功耗、小型化、其极高追踪灵敏度大大扩大了其定位的 覆盖面, 在普通GPS 接收模块不能定位的地方, 如狭窄都市天 空下 、 密集的丛林环境, NEO-6M 都能高精度定位。模块的高灵敏度、小静态 漂移、 低 功耗及轻巧的体积,适用于车 载 、手 持设备如 PDA,车辆监控、手 机、摄像 机 及其余移动定位系统的应用,是 GPS 产品应用的最佳选 择。该模块特色包括: 测试

1, 模块采用U-BLOX NEO-6M模组,体积小巧,性能优异。 ui

2, 模块自带陶瓷天线及MAXIM公司20.5dB高增益LNA芯片,搜星能力强。 spa

3, 模块可经过串口进行各类参数设置,并可保存在EEPROM,使用方便。 3d

4, 模块自带IPX接口,能够链接各类有源天线,适应能力强。 blog

5, 模块兼容3.3V/5V电平,方便链接各类单片机系统。 接口

6, 模块自带可充电后备电池,能够掉电保持星历数据1。

默认波特率9600。

NMEA-0183协议

NEO-6M模块经过串口输出GPS定位数据信息,这些信息默认采用NMEA-0183协议,几乎全部GPS模块都采用该协议,因此该软件也适应其它GPS模块。

NMEA是美国国家海洋电子协会(National Marine Electronics Association )为海用电子设备制定的标准格式,目前已经成为了GPS导航设备统一的RTCM标准协议,NMEA3.0协议还扩展了北斗导航系统的版本。

NMEA-0183是一套定义接收机输出的标准信息,有几种不一样的格式,每种都是独立相关的ASCII格式,使用逗号隔开数据,数据流长度从30-100字符不等,一般以每秒间隔选择输出,最经常使用的格式为"GGA",它包含了定位时间,纬度,经度,高度,定位所用的卫星数,DOP值,差分状态和校订时段等,其余的有速度,跟踪,日期等。NMEA实际上已成为全部的GPS接收机和最通用的数据输出格式。

NMEA-0183协议定义的语句很是多,可是经常使用的或者说兼容性最广的语句只有$GPGGA、$GPGSA、$GPGSV、$GPRMC、$GPVTG、$GPGLL、$GPZDA等。下面给出这些经常使用NMEA-0183语句的字段定义解释。

示例:

  1. $GPGGA,235949.042,0000.0000,N,00000.0000,E,0,00,,0.0,M,0.0,M,,0000*45
  2. $GPGLL,0000.0000,N,00000.0000,E,235949.042,V,N*47
  3. $GPGSA,A,1,,,,,,,,,,,,,,,*1E
  4. $GPGSV,1,1,00*79
  5. $GPRMC,235949.042,V,0000.0000,N,00000.0000,E,,,140209,,,N*7E
  6. $GPVTG,,T,,M,,N,,K,N*2C

nmealib-0.5.3解码库

nmealib是一个基于C语言的用于nmea协议的开源库。虽然nmea体积小巧,可是却具有了很多功能。

分析NMEA语句并把结果保存在合适的C语言结构体中。

除了解析NMEA语句以外,还能够产生NMEA语句。

支持多种NMEA语句,包括GPGGA, GPGSA, GPGSV, GPRMC, GPVTG。

解析算法层次严谨。

附加地理学相关功能,可支持导航等数据工做。

nmealib的目录仍是很是清晰的,下面简单介绍一下。

include\nmealib文件夹中存在nmealib相关的头文件

src文件夹存放nmealib相关源文件,该文件夹中的内容和include\nmealib文件夹相对应

samples文件夹存放若干例子,一些简单易懂的例子。

利用nmealib解析GPS模块的输出结果大体能够分为三步,第一步定义和初始化GPS信息结构体和解析载体结构体,第二步调用nmea_parse函数完成解析工做,第三步释放解析载体所占用的内存空间。若是仔细查看nmea_parser_init部分的代码,便会发现函数中使用了C标准库的malloc函数,该函数会在RAM中的heap空间开辟一个空间,这就须要使用完该载体以后马上释放,因此nmea_parser_init和nmea_parser_destroy须要成对出现。

nmeaINFO是一个很关键的结构体,该结构体中保存了nmea语句解析的结果。在调用了nmea_parse函数以后,直接查询nmeaINFO结构的数据便可获得解码的结果。

例如lat表明纬度,lon表明精度,speed表明速度。须要注意的是lat和lon的数值格式和百度地图的格式是有区别的,而速度的单位为KM/H,相对于"节"这个单位,千米每小时要好理解的多。

特别说明,NMEA解码库在进行解码时须要动态分配较大的堆空间。

例程

经过开源nmealib库解码GPS NMEA-0813协议,并经过USB串口输出解码结果。

硬件说明

硬件资源:

  • 串口UART1
  • LB接口(UART3接口)
  • U-BLOX NEO-6M GPS模块(需自备)

硬件链接:

链接GPS模块到 LB接口(UART3接口),使用5V供电。GPS模块TX链接RX接口,GPS模块RX链接TX接口,以下图。

软件生态

X-SOFT软件生态,X-API文件以下。

ax_gps.c——X-CTR100 扩展GPS模块源文件

ax_gps.h——X-CTR100 扩展GPS模块头文件

操做函数以下:

void AX_GPS_Init(void); //GPS初始化

uint8_t AX_GPS_GetInfo(nmeaINFO *info); //GPS获取GPS信息

本软件参考秉火 GPS例程,采用DMA串口缓冲区方案,设置两个缓冲器,哪一个缓冲器满后,解析数据,另外一个缓冲器接收数据。防止数据丢失。

软件说明

主程序代码以下。

int main(void)

{

    /* X-CTR100初始化 */

    AX_Init(115200);

    printf("***X-CTR100 GPS例程***\r\n\r\n");

 

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

 

    //模块初始化及配置

    AX_GPS_Init();

 

    //初始化GPS数据结构

    nmea_zero_INFO(&info);

 

    while (1)

    {

        //接GPS信号更新

        if (AX_GPS_GetInfo(&info))

        {

            printf("**********X-CTR100 GPS解码信息**********************\r\n");

            printf("*UTC时间:%d年%d月%d日 %d时%d分%d秒 \r\n", info.utc.year, info.utc.mon, info.utc.day,

                info.utc.hour, info.utc.min, info.utc.sec);

            printf("*纬度:%f 经度%f \r\n", info.lat, info.lon);

            printf("*正在使用的卫星:%d 可见卫星:%d \r\n", info.satinfo.inuse, info.satinfo.inview);

            printf("*海拔高度:%f 米 \r\n", info.elv);

            printf("*速度:%f km/h \r\n", info.speed);

            printf("*航向:%f 度 \r\n", info.direction);

            printf("****************************************************\r\n\r\n");

        }

    }

}

特别说明,工程模板默认的堆栈分配不能知足解码库需求,NMEA解码库在进行解码时须要动态分配较大的堆空间,会出现解码错误。

须要在STM32的启动文件startup_stm32f10x_hd.s文件中对堆空间进行修改。

实现效果

测试时,须要将GPS天线放置到无遮挡空旷位置或窗户位置,以便接收GPS信号。首次启动时间较长,根据信号状况等待30~60S,若是长时间不能输出位置信息,请尝试更换位置。

输出结果以下所示。

    

参考

秉火《WF-NEO-6M用户手册——秉火GPS定位模块》

相关文章
相关标签/搜索