GPS数据采集分析要点.docx
- 文档编号:12278765
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:16
- 大小:95.47KB
GPS数据采集分析要点.docx
《GPS数据采集分析要点.docx》由会员分享,可在线阅读,更多相关《GPS数据采集分析要点.docx(16页珍藏版)》请在冰豆网上搜索。
GPS数据采集分析要点
基于GPS数据采集系统的设计
时间:
2012-08-0209:
58:
50 来源:
现代电子技术 作者:
史晓影
关键字:
GPS 数据采集系统
摘要:
为了设计高精度、全天候、全天时的数据采集系统,采用了GPS技术实现通信,信息采用NMEA-0183格式,单片机接收GPS输出的时间和定位信息后,将信息调整为我国的标准,并将调整后的经度、纬度、海拔高度和时间等信息通过液晶终端显示。
最终实现了GPS数据采集及转换等工作,为事故定位、搜查救援等工作提供了技术依据。
关键词:
GPS数据采集;定位;数据处理;单片机
随着科技的发展,移动技术的不断成熟,定位导航开辟了一个重要的新兴市场。
GPS(GlobalPositioningSystem)以其高精度、全天候、全天时的特点,在定位、导航、测距等领域被广泛应用,具有测量精度高、速度快、用户数量不限、抗干扰能力强等优点。
不仅用于军事领域,还广泛用于工农业生产、交通运输、野外探险等领域。
本系统实现的数据采集精确度较高;采集到的位置可以控制在2m范围之内,接收数据并处理的时间小于2s,存精确度和实时性上要优于其他数据采集系统。
1GPS数据采集系统的设计
硬件系统中主要由主控制器、液晶显示模块和CPS射频前端,数据传输单元组成,如图1所示。
GPS信号通过天线接收值射频前端模块,在射频芯片中实现A/D转换,将模拟中频信号转化为数字信号通过串口传入单片机,单片机接收的数据信息经过时差,坐标处理等操作,在通过LCD显示出来。
2GPS数据采集系统的设计及实现
2.1GPS语句的输出格式
GPS-OEM板采用NMEA-0183通信格式,可以输出多种句型,均以“$”开头。
其语句格式如表1所示。
输出的语句按串口通信协议:
1位开始位,8位数据位,1位停止位,无奇偶校验。
输出数据采用的是ASCⅡ码字符,内容包含了纬度、经度、速度、日期、航向及卫星状况等信息。
语句达十余种,其中定位语句$GPRMC其结构为:
$GPRMC,<1>.<2>,<3>.<4>,<5>.<6>,<7>,<8>,<9>,<10>,<11>*hh
其中:
“GP”-交谈识别符;
“RMC”-语句识别符;
“*”-校验和识别符;
“hh”-为校验和,其代表了“$”和“*”之间所有字符的按位异或值(不包括这两个字符)。
$GPRMC语句数据区的内容为:
1)定位点的协调世界时间(UTC),hhmmss(时分秒)格式;
2)定位状态,A=有效定位,V=无效定位;
3)定位点纬度,ddmm.mmmmm(度分)格式;
4)纬度半球,N(北半球)或S(南半球);
5)定位点经度,dddmm.mmmmm(度分)格式;
6)经度半球,E(东经)或W(西经);
7)地面速度,000.0节~999.9节;
8)地面航向,000.0度~359.9度;
9)UTC日期,ddmmyy(日月年)格式;
10)磁偏角,000.0度~180度;
11)磁偏角方向,E(东)或W(西)。
2.2GPS数据接收
利用单片机的串行接口接收GPS传送过来的数据,其硬件原理如图2所示,GPS的接口及单片机串口均采用TTL电平传输数据,所以GPS接口引脚4和3可直接与单片机的TXD和RXD引脚相连,无需电平转换,硬件电路图如图2所示。
GPS模块输出的是数据流,每秒钟更新一次数据。
必须要用单片机对其输出的数据流中的数据进行提取,以方便用户直接读取。
首先打开串口中断服务子程序,开始接收数据,判断其是否有“$”符号,然后根据逗号的个数进行判断数据的类型,然后分别存储时间、经度、纬度、日期等信号,若接收到“\n”则接收结束。
用C语言编程,其程序如下:
在PC机上接收的GPRMC语句信息如下:
$GPRMC,103320,A,4350.95221,N,12524.06042,E,000.0,000.0,130507,009.1,W*50
这是一条GPS定位数据信息语句,涵义是UTC时间为10时33分20秒,位置在北纬43度50.9522分,东经125度24.0604分,移动速度为0,移动范围为0,日期为2007年5月13日,地磁变化为9.10,地磁变化方向为西,校验和为50H。
根据接收的信息用单片机进行相应的处理,就可以得到所需的信息了,信息处理过程见3节。
3对接收信息的处理
数据的处理主要包括两个方面:
1)时间的处理
直接从卫星接收到的时间信息是UTC时间(格林尼治时间),需要处理成北京时间。
要变成北京时间需要加上8个小时,如果超过24小时,则减去24小时后,才是北京时间。
时间转换处理程序如下:
2)定位的处理
GPS接受的经度、纬度等信息采用的是美国的84坐标系统,需要转换成我国的54坐标系统。
为便于描述设如下几个参量:
大地坐标-(B,L,H)
平面坐标-(x,y,z)
椭球偏心率-C
椭球参数m,n-大地坐标转换到指教坐标需要使用的参数,则有:
4结束语
本系统讨论了用单片机对GPS数据的读取及处理的方法,分析了GPS模块的信息格式并编制了通信软件,不仅成功地实现了GPS定位信息的接收与提取,而且具有硬件电路简单、成本低廉、编程方便、性能稳定的特点,具有一定的使用价值。
GPS模块的数据格式
对GPS模块的数据处理本质上还是串口通信程序设计,只是GPS模块的输出遵循固定的格式,通过字符串检索查找即可从模块发送的数据中找出需要的数据,常用的GPS模块大多采用NMEA-0183协议。
NMEA-0183是美国国家海洋电子协会(NationalMarineElectronicsAssociation)所指定的标准规格,这一标准制订所有航海电子仪器间的通讯标准,其中包含传输资料的格式以及传输资料的通讯协议。
以下是一组正常的GPS数据
$GPGGA,082006.000,3852.9276,N,11527.4283,E,1,08,1.0,20.6,M,,,,0000*35
$GPRMC,082006.000,A,3852.9276,N,11527.4283,E,0.00,0.0,261009,,*38
$GPVTG,0.0,T,,M,0.00,N,0.0,K*50
下面分别对每组数据的含义进行分析。
GPS固定数据输出语句($GPGGA),这是一帧GPS定位的主要数据,也是使用最广的数据。
为了便于理解,下面举例说明$GPGGA语句各部分的含义。
例:
$GPGGA,082006.000,3852.9276,N,11527.4283,E,1,08,1.0,20.6,M,,,,0000*35
其标准格式为:
$GPGGA,
(1),
(2),(3),(4),(5),(6),(7),(8),(9),M,(10),M,(11),(12)*hh(CR)(LF)
各部分所对应的含义为:
(1)定位UTC时间:
08时20分06秒
(2)纬度(格式ddmm.mmmm:
即dd度,mm.mmmm分);
(3)N/S(北纬或南纬):
北纬38度52.9276分;
(4)经度(格式dddmm.mmmm:
即ddd度,mm.mmmm分);
(5)E/W(东经或西经):
东经115度27.4283分;
(6)质量因子(0=没有定位,1=实时GPS,2=差分GPS):
1=实时GPS;
(7)可使用的卫星数(0~8):
可使用的卫星数=08;
(8)水平精度因子(1.0~99.9);水平精度因子=1.0;
(9)天线高程(海平面,-9999.9~99999.9,单位:
m);天线高程=20.6m);
(10)大地椭球面相对海平面的高度(-999.9~9999.9,单位:
m):
无;
(11)差分GPS数据年龄,实时GPS时无:
无;
(12)差分基准站号(0000~1023),实时GPS时无:
无;
*总和校验域;hh总和校验数:
35(CR)(LF)回车,换行。
GPRMC(建议使用最小GPS数据格式)
$GPRMC,082006.000,A,3852.9276,N,11527.4283,E,0.00,0.0,261009,,*38
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>
(1)标准定位时间(UTCtime)格式:
时时分分秒秒.秒秒秒(hhmmss.sss)。
(2)定位状态,A=数据可用,V=数据不可用。
(3)纬度,格式:
度度分分.分分分分(ddmm.mmmm)。
(4)纬度区分,北半球(N)或南半球(S)。
(5)经度,格式:
度度分分.分分分分。
(6)经度区分,东(E)半球或西(W)半球。
(7)相对位移速度,0.0至1851.8knots
(8)相对位移方向,000.0至359.9度。
实际值。
(9)日期,格式:
日日月月年年(ddmmyy)。
(10)磁极变量,000.0至180.0。
(11)度数。
(12)Checksum.(检查位)
$GPVTG地面速度信息
例:
$GPVTG,0.0,T,,M,0.00,N,0.0,K*50
字段0:
$GPVTG,语句ID,表明该语句为TrackMadeGoodandGroundSpeed(VTG)地
面速度信息
字段1:
运动角度,000-359,(前导位数不足则补0)
字段2:
T=真北参照系
字段3:
运动角度,000-359,(前导位数不足则补0)
字段4:
M=磁北参照系
字段5:
水平运动速度(0.00)(前导位数不足则补0)
字段6:
N=节,Knots
字段7:
水平运动速度(0.00)(前导位数不足则补0)
字段8:
K=公里/时,km/h
字段9:
校验值
表1GPS模块主要参数
GPS模块主要参数
GPS
芯片组
SiRFStarIII
工作频率
L1,1575.42MHz
粗捕获码
(C/A)率
1.023MHzchiprate
同时跟踪通道数
20
灵敏度
-159dBm
定位精度
5m(2维均方根,允许广域差分系统)
最小速度
0.1m/s
时间精度
1μS(与GPS时间同步)
默认
坐标系
1984年世界大地坐标系(WGS-84)
重获时间
0.1S(平均值)
热启动
1S(平均值)
温启动
38S(平均值)
冷启动
42S(平均值)
最高工作海拔
18km(60000feet)
最大
移动速率
515m/S(1000knots)
最大加速度
4g
最大
急冲度
20m/S3
电源电压
5V±0.5V
整机电流
约60mA,不超过100mA
整板外形
61mm×49mm×17mm
GPS
芯片外形
27.9mm×20mm×2.9mm
波特率
9600bps
数据输出格式
SiRF二进制格式或NMEA0183GGA,GSA,GSV,RMC,VTG,GLL
数据输出电平
同时具备TTL电平和RS232电平
数据
输出接口
20pin插针(TTL电平)和DB9母座
(RS232电平)
天线类型
外置有源GPS天线(3.3V/5V电压可选,
默认为3.3V)
后备电池
CR1220锂电池,3V,不可充电
工作温度
-40ºC至+85ºC
GPS模块的应用程序设计
GPS模块的应用程序设计主要分为两部分,第一部分为串口的设置于数据读取,第二部分为数据的分析和需要数据的提取。
与其他的关于设备编程的方法一样,在Linux下,操作、控制串口也是通过操作起设备文件进行的。
在Linux下,串口的设备文件是/dev/ttyS0或/dev/ttyS1等。
因此要读写串口,我们首先要打开串口,然后根据GPS模块的配置参数对串口的波特率、校验、流控制等进行设置,这些参数设置均通过对termios结构中c_cflag的配置实现,串口配置部分函数如下:
intgps:
:
set_opt(intfd,intnSpeed,intnBits,charnEvent,intnStop)
{
structtermiosnewtio,oldtio;
if(tcgetattr(fd,&oldtio)!
=0)
{
perror("SetupSerial1");
return-1;
}
bzero(&newtio,sizeof(newtio));
newtio.c_cflag|=CLOCAL|CREAD;
newtio.c_cflag&=~CSIZE;
switch(nBits)
{
case7:
newtio.c_cflag|=CS7;
break;
case8:
newtio.c_cflag|=CS8;
break;
}
switch(nEvent)
{
case'O':
//奇校验
newtio.c_cflag|=PARENB;
newtio.c_cflag|=PARODD;
newtio.c_iflag|=(INPCK|ISTRIP);
break;
case'E':
//偶校验
newtio.c_iflag|=(INPCK|ISTRIP);
newtio.c_cflag|=PARENB;
newtio.c_cflag&=~PARODD;
break;
case'N':
//无校验
newtio.c_cflag&=~PARENB;
break;
}
switch(nSpeed)
{
case2400:
cfsetispeed(&newtio,B2400);
cfsetospeed(&newtio,B2400);
break;
case4800:
cfsetispeed(&newtio,B4800);
cfsetospeed(&newtio,B4800);
break;
case9600:
cfsetispeed(&newtio,B9600);
cfsetospeed(&newtio,B9600);
break;
case115200:
cfsetispeed(&newtio,B115200);
cfsetospeed(&newtio,B115200);
break;
default:
cfsetispeed(&newtio,B9600);
cfsetospeed(&newtio,B9600);
break;
}
if(nStop==1)
{
newtio.c_cflag&=~CSTOPB;
}
elseif(nStop==2)
{
newtio.c_cflag|=CSTOPB;
}
newtio.c_cc[VTIME]=0;
newtio.c_cc[VMIN]=0;
tcflush(fd,TCIFLUSH);
if((tcsetattr(fd,TCSANOW,&newtio))!
=0)
{
qDebug()<<"comseterror"< return-1; } qDebug()<<"setdone! "< return0; } 在GPS数据的处理上首先将窗口数据存入一个字符串,接着通过对字符串数据的判断来提取数据内容,判断分为两步,首先判断是什么类型的数据,在本程序的设计中需要读取$GPRMC和$GPGGA两组数据,因此首先判断字符串GPS_BUF[5]是C还是A,由于数据是通过符号“,”进行隔开,因此通过查找“,”来确定数据位置。 在实现上将得到逗号位置函数单独封装调用,程序如下: //得到指定序号的逗号位置 intgps: : GetComma(intnum,char*str) { inti,j=0; intlen=strlen(str); for(i=0;i { if(str[i]==',') { j++; } if(j==num) returni+1; } return0; } 接下来根据数据格式,通过逗号位置,提取数据信息,程序如下: voidgps: : gps_parse() { inttmp; charc; c=GPS_BUF[5]; if(c=='C') { //"GPRMC" GPS->D.hour=(GPS_BUF[7]-'0')*10+(GPS_BUF[8]-'0'); GPS->D.minute=(GPS_BUF[9]-'0')*10+(GPS_BUF[10]-'0'); GPS->D.second=(GPS_BUF[11]-'0')*10+(GPS_BUF[12]-'0'); tmp=GetComma(9,GPS_BUF); GPS->D.day=(GPS_BUF[tmp+0]-'0')*10+(GPS_BUF[tmp+1]-'0'); GPS->D.month=(GPS_BUF[tmp+2]-'0')*10+(GPS_BUF[tmp+3]-'0'); GPS->D.year=(GPS_BUF[tmp+4]-'0')*10+(GPS_BUF[tmp+5]-'0')+2000; GPS->status=GPS_BUF[GetComma(2,GPS_BUF)]; GPS->latitude=get_locate(get_double_number(&GPS_BUF[GetComma(3,GPS_BUF)])); GPS->NS=GPS_BUF[GetComma(4,GPS_BUF)]; GPS->longitude=get_locate(get_double_number(&GPS_BUF[GetComma(5,GPS_BUF)])); GPS->EW=GPS_BUF[GetComma(6,GPS_BUF)]; GPS->speed=get_double_number(&GPS_BUF[GetComma(7,GPS_BUF)]); UTC2BTC(&GPS->D); } if(c=='A') { //"$GPGGA" GPS->high=get_double_number(&GPS_BUF[GetComma(9,GPS_BUF)]); } } //将获取文本信息转换为double型 doublegps: : get_double_number(char*s) { charbuf[128]; inti; doublerev; i=GetComma(1,s); strncpy(buf,s,i); buf[i]=0; rev=atof(buf); returnrev; } doublegps: : get_locate(doubletemp) { intm; doublen; m=(int)temp/100; n=(temp-m*100)/60; n=n+m; returnn; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- GPS 数据 采集 分析 要点