GPS即全球定位系统,是本世纪70年代由美国陆海空三军联.docVIP

  • 21
  • 0
  • 约2.24千字
  • 约 3页
  • 2019-01-14 发布于天津
  • 举报

GPS即全球定位系统,是本世纪70年代由美国陆海空三军联.doc

GPS即全球定位系统,是本世纪70年代由美国陆海空三军联

GPS即全球定位系统,是本世纪70年代由美国陆海空三军联合研制的新一代空间卫星导航定位系统 。其主要目的是为陆、海、空三大领域提供实时、 全天候和全球性的导航服务,并用于情报收集、核爆监测和应急通讯等一些军事目的,是美国独霸全球战略的重要组成。经过20余年的研究实验,耗资300亿美元,到1994年3月,全球覆盖率高达98%的24颗GPS卫星星座己布设完成。它主要有三大组成部分,即空间星座部分、地面监控部分和用户设备部分。其中GPS空间星座部分、地面监控部分均为美国所控制;GPS的用户设备主要由接收机硬件和处理软件组成。用户通过用户设备接收GPS卫星信号,经信号处理而获得用户位置、速度等信息,最终实现利用GPS进行导航和定位的目的。 随着经济的不断发展使移动目标的定位、监控、指挥和调度系统,成为公安、银行以及公交运输系统中一个越来越重要的问题,而GPS定位技术的出现给车辆、轮船等移动目标的导航定位提供了精确、实时的定位能力。现代人对于GPS已经不是很陌生了,虽然GPS系统一开始是为军事目的而建立的,但很快在民用方面得到了极大的发展。现在大多数的GPS都已经模块化并提供简洁的应用接口,本文就是以51单片机为例,介绍其与GPS的接口程序设计。 GPS 的输入输出格式采用美国海洋电子协会为海洋电子设备制定的NMEA - 0183 标准格式。该格式为A SC II 码字符串, 易于理解, 在多种高级语言中都可以直接进行判别和分离, 提取所需要的数据。在NMEA - 0183 协议中, 车载终端常用的命令主要有: GPGGA GPS 定位信息; GPGSA GPS 当前卫星信息; GPALM GPS 历书信息;GPU TG 地面速度信息。 以GPGGA 语句为例, 具体说明NM EA 20183 语句的应用。GPGGA 语句的格式为: $GPGGA , 定位时间(hhmm ss. ss) , 纬度、纬度方向、经度、经度方向、定位质量、卫星数目、精度因子、天线高度、米、水平偏移、米、差分数据龄期、差分参考站、校验和 CR L F 。 目前市场上的GPS模块大都提供串行通讯接口,其串行通讯参数为:波特率=4800 数据位=8位 停止位=1位无奇偶校验。由于其数据输出与TTL兼容,我们就可以通过单片机的串口通过设置相应的数据格式与GPS进行通信了。 NMEA - 0183 是以语句形式发送数据的,接收机可能发送很多类型的语句,而我们需要的可能只是某些语句中的几个字段。因此就需要对接收到的数据进行解析,取得所需的信息。另外,可能会由于小数点位数不同等原因,语句的长度是可变的,因而分离感兴趣的信息时,不能按照该信息在语句中所处的字符位置来查找,只能依据逗号分隔符,这些都是我们在程序中需要注意的问题。为解决信息的正确提取问题,并提高程序的复用性,可以编写适当的函数,如一个用来分离语句,返回GPS语句中用户所需要的信息。在应用程序中, 首先用软件通过判别消息的引导头是否为“$”来确认是否进行数据接收, 然后在对应消息中提取经纬度及时间等数据,最后通过消息尾(即回车符)来停止数据接收。GPS模块有多种格式的输出信息,这里我们采用$GPGGA 语句,它输出了基本的定位信息,可以满足一般用户的使用要求。该语句最多可以输出81 个字符,为了简化接收程序,定义一个字符串数组GpsBuf存放所接收到的ASC Ⅱ码,而对时间、位置等信息的提取和处理在其他程序段中完成。要正确读取GPS模块输出语句,首先是判断语句类型,其次是存放数据,然后要确定语句的结束标志。其软件流程图如下所示: ? 是 是 判断起始位 读取GPS信息 判断$GPGGA 返回位置信息 否 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 以查询方式为例,读取$GPGGA 语句的程序段如下: void Get_Gps_Info(void) { unsigned int rData,Ret,i; ??? char GPGGA[]=GPGGA; restart:??????????????????????????????????? //接收GPS信息 ??? do????????????????????????????????????? //判断起始位$ {rData=Uart_Read_Data();} while(rData!=0x24); ??? for(i=0;;i++)?????????????????????????? //接收数据 ??? { ??????? GpsBuf[i]=Uart_Read_Data(); ??????? if(GpsBuf[i]==10) break;??????????? //判断结束位 ??? } for(i=0;i5;i++)???????

文档评论(0)

1亿VIP精品文档

相关文档