基于ARM和Linux的GPS信息采集与处理系统设计
- 来源:中文信息 smarty:if $article.tag?>
- 关键字:ARM处理器,Linux GS87模块,GPS信息 smarty:/if?>
- 发布时间:2014-11-17 12:55
摘 要:GPS信息的采集和处理是电子导航装置的重要组成部分,通过建立交叉编译环境,以ARM处理器S3C2440A和Linux操作系统作为软硬件平台并采用GS87模块,分析NMEA-0183通信协议,研究GS87模块同ARM平台进行串行通信和串口编程问题,设计了GPS信息采集与处理系统,通过查询是否是GPRMC语句来提取和分离有用信息并进行相应转化。最后的实验证明,该系统得到的数据能够满足定位需求,具有较好的实用价值。
关键词:ARM处理器 Linux GS87模块 GPS信息
中图分类号:TP273.5 文献标识码:A 文章编号:1003-9082(2014)09-0010-02
一、引言
早在80年代,美日欧等国家就开始研制以导航、查询为主要功能应用的数字化电子地图。电子导航装置于90年代开始用到汽车上,用户利用GPS等装置,可以在一定精度下实现车辆定位。Linux操作系统具有开源免费、稳定、移植性好等优点,而ARM嵌入式处理器作为一种性能高、功耗低的精简指令集芯片,已广泛应用于车载导航、GPS定位、掌上PC等消费电子产品领域[1]。
本文通过分析NMEA-0183通信协议,他是GPS导航设备的RTCM(Radio Technical Commission for Maritime services)标准协议,分析它的内容和格式,研究GPS模块GS87同ARM平台之间串行通信问题,设计GPS信息采集与处理系统,通过建立交叉编译环境串口编程,实现在ARM和Linux环境下GPS信息采集与处理。
二、 NMEA 0183通信协议
NMEA 0183通信协议是美国国家海洋电子协会为海用电子设备制定的一种标准格式,目前业已成了GPS导航设备统一的RTCM标准协议。该协议采用ASCII码,其串行通信默认参数为:波特率=4800bps,数据位=8bit,开始位=1bit,停止位=1bit,无奇偶校验[2]。
报文格式如下图1所示:
图1 NMEA报文格式
$—帧命令起始位;
GPccc—地址域,前两位为识别符,后三位为语句名;
ddd…ddd—数据;
*—表示串尾,校验和前缀;
hh—校验和(check sum),即$与*之间所有ASCII码类型字符的校验和;
—CR(Carriage Return)+LF(Line Feed),表示帧结束,回车和换行。
由于以“$GPRMC”为开头的报文语句中已经包含了本系统所需要的所有信息,所以在采集过程中只需提取该语句中的信息,而且在实际的GPS应用中,也并不会用到NMEA的全部信息,而是根据具体的需要,从中选取有用的信息,忽略其余的信息内容[3]。
三、系统硬件结构整体设计
本文中使用的是以SAMSUNG公司的处理器S3C2440A芯片为核心的目标平台。目标平台资源包括S3C2440A微处理器,主频400 MHz;512 MB的Flash;64 MB的SDRAM;串口等。GPS信息接收模块采用GS87,它可以并行20通道接收,可输出TTL电平,目标板引出的有TTL电平串口,因此不需要在连接时进行电平转化,整体硬件设计框图如图2所示:
图2整体硬件设计框图
在该设计中,ARM处理器用是运行操作系统和数据处理的核心;LCD显示器用来显示数据处理后的结果;SDRAM用来加载Linux内核和运行应用程序;FLASH存储器用来存储数据和应用程序等。
四、GPS信息采集与处理的软件设计
1.建立交叉编译环境
建立交叉编译环境的原因主要有两点,一是由于板载资源有限,需要利用PC平台的资源来编写和调试程序。二是由于体系结构和指令集不同,只有通过交叉编译平台,才能使源代码在目标机器上使用(本设计PC上原操作系统为Windows Xp sp3)。
在PC上基于嵌入式Linux操作系统的应用开发模式通常都是宿主机+目标机,宿主机就是开发程序平台,而目标机用于运行操作系统和应用程序。它们之间通过串口、并口或者网路进行连接,交叉编译环境最主要的是用arm-linux-gcc来编译程序,此外还要设置好串口终端和NFS等服务器用来调试程序[4]。在本设计中,首先需要在宿主机上创建Linux开发环境,主要是安装好虚拟机并安装Fedora,Fedora是基于 Linux 的集最新自由开源软件于一体的操作系统(本文采用的Fedora 9),最后就是安装好交叉编译器arm-linux-gcc。
2.Linux串口编程
GPS信息进行采集使用到了Linux串口编程技术,在Linux操作系统中,所有的设备都是被当作文件来进行操作的,所有的设备以设备文件的形式存储在目录/dev/下,串口的设备文件为/dev/ttyS*,其中,ttyS0为串口一,ttyS1为串口二。
在Linux操作系统中有一个termios标准接口,它可以查询和操作终端,其在系统头文件termios.h中已经定义。包括一个数据结构和一系列操纵这些数据结构的函数组成,其对串口的打开、关闭、读取功能与其它的文件操作一致,使用open()、close()、read()函数完成。由于接收到的数据是ASCII码,所以需要使用atoi和atof函数转换成数值量[5]。GPS信息采集与处理程序流程如图3所示:
图3 GPS信息采集与处理程序流程
3.信息处理结果
GPS信息采集与处理结果如图4所示
图4 GPS信息采集与处理结果
表示的意义如下:
UTC时间:10时2分25秒;北京时间:18时2分25秒(UTC加8小时);日期: 3月28日;北纬:35度11.1164分;东经113°15.3744分;速度:0节;
将图4的经/纬度转换成单位为度的形式为:
北纬35度11.1164分转化为单位为度表示为:35.185273度;
东经113度15.3744分转化为单位为度表示为:113.25624度;
经谷歌查询,如下图所示,准确定位到了测试地点,所以可以满足定位的要求。
图5 谷歌地球经/纬度查询结果
五、结束语
本文给出了基于ARM和Linux的GPS信息采集与处理整体解决方案。包括分析NMEA—0183协议、系统的整体设计,交叉编译的平台搭建和相关程序设计,最后实际得到的数据表明,该系统可以作为导航定位系统的数据基础。
参考文献
[1]田冲.论ARM嵌入式系统的应用特点与发展[J].科技创新导报,2011(17):30.
[2]王威,董绪蓉,柳丽.基于VC++实现GPS数据的采集与处理[J].科技创新导报,2009 (11):20.
[3]朱玉玺,袁文翠.GPS服务平台的定位数据采集[J].计算机应用与软件,2007,24 (1):189-191.
[4]院马晓,涛李波.Linux系统下嵌入式系统交叉编译链搭建[J].前沿学术论坛,2010 (7):290.
[5]沈振汉,黄华灿.PC机与GPS接收机的通讯程序设计与实现[J].华侨大学学报(自然科学版),2011,32(1):118-121.
卫黄河 曾志伟 王立威
