杜 俊,董 松
(陇东学院,甘肃 庆阳 745000)
基于单片机的GPS定位系统的设计与实现*
杜俊,董松
(陇东学院,甘肃庆阳745000)
GPS(Global Positioning System)在船舶、车辆、飞机等运动物体进行定位导航、车辆监控管理系统、物联网系统等都有重要的应用,但其高昂的成本让普通客户无法接受。本文设计了基于单片机的GPS定位系统,该系统以51单片机为主控制器,通过uart接口与GPS信息采集模块进行通信,GPS信息格式采用NMEA-0183协议格式,单片机对GPS信息格式进行解码,获得时间、经度、纬度、海拔高度、速度等信息,并根据需求将所需信息通过显示器显示。
NMEA-0183协议;UART;数据解码
GPS(NavigationSatelliteTimingandRanging/Global Positioning System),中文名为“卫星授时测距导航/全球定位系统”。该系统由覆盖全球的24颗卫星组成。它可以保证在任意时刻、任意地方都可以同时观测到4颗卫星,以保证卫星可以采集到该观测点的经纬度和高度,以便实现导航、定位、授时等功能。
本系统主要以u-blox公司的NEO-6M GPS定位芯片和GPS有源天线组成GPS信息接收模块,利用UART接口将GPS模块的采集的NMEA-0183格式的信息传输给单片机,单片机对接收到的NMEA-0183格式的信息进行解码和处理,通过液晶屏显示出来,从而实现定位、授时、测速的功能,如图1所示。
图1 基于单片机的GPS定位系统结构
2.1GPS接收模块
本系统中GPS信息接收模块采用u-blox公司的NEO-6M芯片,该芯片具有高灵敏度、低功耗、小型化、其极高追踪灵敏度大大扩大了其定位的覆盖面,在普通GPS接收模块不能定位的地方,如狭窄都市天空下、密集的丛林环境,NEO-6M都能高精度定位。模块的高灵敏度、小静态漂移、低功耗及轻巧的体积,非常适用于车载、手持设备如PDA,车辆监控、手机、摄像机及其他移动定位系统的应用,是GPS产品应用的最佳选择。
在开发GPS定位系统的过程中,并不需要去关心如何计算坐标数据,这些工作GPS芯片都会自动完成。但是在设计过程中,应重点注意GPS模块的工作条件、通信接口、数据格式、波特率等问题。
NEO-6M GPS信息接收模块采用USB接口供电,支持3.3V-5V电源,支持UART接口,使用前可使用模块配置软件配置UART接口的波特率,使其与单片机串口的波特率一致。
2.2NMEA-0183协议
NMEA 0183是美国国家海洋电子协会(National Marine Electronics Association)为海用电子设备制定的标准格式。目前业已成了GPS导航设备统一的RTCM(Radio Technical Commission for Maritime services)标准协议。该协议采用ASCII码,UART默认波特率4800bps,采用10位异步传输方式,无奇偶校验。NMEA-0183协议常用的数据格式有6种,见表1。
其中NMEA-0183的GPGGA命令的信息格式及含义如下,其他命令格式可查询相关文献。
$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,<13>,<14>*<15><CR><LF>
表1 NMEA-0813常用的数据格式
该信息格式中的“$”表示命令起始位,GPGGA表示命令类型,其他字段含义如下:
<1>UTC时间,格式为hhmmss.sss。
<2>纬度,格式为ddmm.mmmm(前导位数不足则补0)。
<3>纬度半球,N或S(北纬或南纬)。
<4>经度,格式为dddmm.mmmm(前导位数不足则补0)。
<5>经度半球,E或W(东经或西经)。
<6>定位质量指示,0=定位无效,1=定位有效。
<7>使用卫星数量,从00到12(前导位数不足则补0)。
<8>水平精确度,0.5到99.9。
<9>天线离海平面的高度,-9999.9到9999.9米。
<10>高度单位,M表示单位米。
<11>大地椭球面相对海平面的高度(-999.9到9999.9)。
<12>高度单位,M表示单位米。
<13>差分GPS数据期限(RTCM SC-104),最后设立RTCM传送的秒数量。
<14>差分参考基站标号,从0000到1023(前导位数不足则补0)。
<15>“*”表示校验和前缀。
<16>校验和。
<17>CR和LR表示信息结束符合。
NEO-6M GPS接收模块可以接收以上6种常用的命令信息,可使用该模块的配置程序设置该模块的接收信息类型,设置好后,该模块只接收允许接收的信息类型。本设计方案中,对允许接收的命令信息类型没有筛选。
GPS定位系统程序主要完成单片机串口初始化、LCD液晶屏的初始化,GPS命令信息的接收、解码、处理任务,最后将处理后的信息显示在LCD液晶屏上。GPS定位系统程序总体流程如图2所示。
图2 系统程序流程图
在整个系统程序设计中,解码是关键。单片机通过串口接收到来自GPS接收模块的NMEA-0183格式的命令信息后,将该信息解码,提取出用户需要的信息。NMEA-0183解码算法如下:
s1:初始化:定义逗号字符计数变量comma_cnt=0,数据字符计数变量char_cnt=0,命令类型数组cmd[5],模式变量mode(mode=0,结束,mode=1,接收命令类型,mode=2,接收数据),命令类型编号cmd_num,启动串口接收,进入s2。
s2:判断串口的sbuf接收到的字符:
如果是“$”,设置mode=1,准备接收命令类型信息;
若是字符“,”,逗号字符计数comma_cnt自增1、数据字符计数char_cnt清零;
若是字符“*”,mode=0,进入结束模式;
若是其他,执行s3;
s3:若mode=1,则接收命令类型,依次将串口接收到的5个字符数据存储到cmd[5]数组中。
若 cmd[5]存储的是 “GPGGA”命令类型,则cmd_num=1,执行s4;
若是“GPGSV”命令类型,则cmd_num=2,执行s4;
若是“GPRMC”命令类型,则cmd_num=3,设置mode=2,进入接收数据模式,执行s4。
s4:若 mode=2,进入数据接收模式。判断cmd_num的值:
若cmd_num等于1,开始解码GPGGA命令类型的数据,判断逗号计数comma_cnt的值。根据2.2节中的NMEA-0183的GPGGA命令信息格式,数据字段之间用逗号分隔,因此根据逗号计数可以获取所需信息。
若comma_cnt的值等于1,表示后面接收的10个字符是UTC时间,然后存储在时间变量里。
若comma_cnt的值等于2,表示接下来接收的10个字符是纬度信息并存储,char_cnt清零。
若comma_cnt的值等于3,表示接下来接收的1个字符是纬度方向信息并存储,char_cnt清零。
若comma_cnt的值等于4,表示接下来接收的11个字符是经度信息并存储,char_cnt清零。
若comma_cnt的值等于5,表示接下来接收的1个字符是经度方向信息并存储,char_cnt清零。
用类似的方法将GPGGA中的所需的其他信息解码。
若cmd_num等于2,开始解码GPGSV命令类型数据,用上述办法解码获得所需信息并存储。
若cmd_num等于3,开始解码GPRMC类型数据,用上述方法解码获取所需的其他信息并存储。
s5:退出。
数据解码完成后,使用LCD屏实时显示解码后需要显示的数据。另外,系统接收到的时间信息是UTC时间,如要输出北京时间,还需对UTC时间进行处理转换成北京时间,在进行输出显示。
本文提出了对GPS全球定位系统的各命令类型数据的解码方法,设计并实现了基于51单片机的GPS定位系统,由单片机控制GPS接收模块较为精确地计算和显示日期、时间、经度、纬度等卫星信息。
[1] 吴东东.基于单片机的GPS定位显示设计[J].上海师范大学学报(自然科学版),2016,45(1).
[2] 于铁军.基于ARM的GPS定位系统设计与实现[D].中北大学,2014.
[3]杜天杰.基于GPS的定位系统设计与实现[D].西安电子科技大学,2014.
[4]张烁.基于移动GIS定位导航系统的设计与实现[J].计算机系统应用,2010,19(7).
[5]赵志礼.基于单片机的GPS定位信息处理[J].电子测试,2009.
[6]刘俊成.GPS软件接收机关键技术研究[D].国防科技大学,2006.11.
[7]张鹏超.智能车载信息系统研究[D].西安工业大学,2004.
[8]袁安存.全球定位系统原理及应用[M].大连海事大学出版社,1999.
TP313
陇东学院紧缺人才科研启动资金资助项目(XYBY140207)。