gps高度测量物联网综合课程设计大学论文Word文件下载.docx
《gps高度测量物联网综合课程设计大学论文Word文件下载.docx》由会员分享,可在线阅读,更多相关《gps高度测量物联网综合课程设计大学论文Word文件下载.docx(26页珍藏版)》请在冰豆网上搜索。
高度测量
起止日期
2016年12月19日起至2017年1月13日止
课设内容和要求:
一课程设计内容
1.采集GPS模块的信息;
2.将高度信息传送到计算机;
3.在计算机上显示高度信息。
二课程设计要求
1认真查阅相关资料;
2独立设计,调试并通过指导老师现场验收;
3撰写课程设计报告;
参考资料:
[1]青岛东合信息技术有限公司.无线传感器网络技术原理及应用[M].西安:
西安电子科技大学出版社,2013
[2]凌阳爱普科技有限公司.物联网多网技术综合教学开发平台实验指导书[M],2013
[3]王小强,欧阳俊,黄宁淋.ZigBee无线传感器网络设计与实现[M].北京:
化学工业出版社,2012
教研室审核意见:
【】同意立题,【】不同意教研室主任签字:
指导教师(签名)
2016年12月19日
学生签名
课程设计总结:
本次课设中主要用到了Linux操作系统的基本操作、嵌入式C语言的编程、数据通信等知识,虽然以前修过相关课程,但是没有应用到实际实践中,通过查阅相关资料和网络论坛的讲解,我对原来学的知识有了更深刻的理解。
最终在老师的指导和同学的帮助下,如期完成了课程设计内容。
本次课程设计是与GPS相关的物联网技术,本学期曾选修过一门GPS课程,因为是选修课所以学的并不好,现在通过课程设计使自己对GPS的相关知识更加了解,同时在查阅相关资料的同时,还翻看了一些关于中国北斗卫星系统的知识,心中有一种自豪感,为我伟大的祖国感到自豪。
本次课程设计使用的源代码是在课上实验代码的基础上进行编写的,通过查看CSDN上的相关博客,是自己慢慢理解代码并进行了修改。
开始的时候代码运行总是不能出现预期结果,相似课设题目的同学猜测是实验箱的问题,也有说是GPS模组的问题,后来我们一步一步的调试,跟换实验箱和GPS模组,最终实现了课设要求的功能,在整个过程中最大的收获就是遇到困难要不断的想解决方案,一步一簇进行调试排除问题,而不是放弃。
在整个课设中,不仅加深了对已修课程的理解,也增强了动手实践能力,同时体会到了编程调试过程中的快乐。
目录
学术诚信声明I
第1章总体设计方案1
1.1课程设计的内容和要求1
1.2课程设计原理1
1.2.1GPS原理叙述:
1
1.2.2NMEA格式解释3
1.2.3GPS模组电路4
1.3课程设计思路6
第2章详细设计方案7
2.1课程设计环境搭建7
2.1.1Ubuntu10.10的安装7
2.1.2通过网线和串口将PC和A8实验箱进行连接8
2.1.3GPS模块的连接10
2.1.4软件设计与实现10
2.2实施方案12
第3章调试及结果分析14
3.1调试14
3.1.1软件测试14
3.1.2硬件调试14
3.2结果14
附录(关键部分程序清单)16
第1章总体设计方案
1.1课程设计的内容和要求
1.1.1课程设计内容:
1.文献检索,查阅资料了解凌阳A8实验箱和GPS模块的相关知识;
2.通过GPS模块采集相关的信息;
3.将NMEA回传给凌阳实验箱;
4.通过超级终端将解析出来的高度信息显示在计算机上。
1.1.2课程设计要求:
1.认真查阅相关资料;
2.独立设计,调试并通过指导老师现场验收;
3.撰写课程设计报告。
1.2课程设计原理
1.2.1GPS原理叙述:
GPS(全球定位系统)是美国从本世纪70年代开始研制,历时20年,耗资200亿美元,具有在海、陆、空进行全方位实时三维导航与定位能力的新一代卫星导航与定位系统。
GPS在空间中有21颗工作卫星3颗备用卫星,在地面上有1个主控站,3个注入站,5个监测站组成,用户通过设备接收GPS卫星发射的卫星信号获得导航和定位信息,经过数据解析和处理获取高度,经纬度等信息。
GPS具有如下特性:
1)全球,全天候工作:
能为用户提供连续、实时的三维位置、三维速度和精密时间。
不受天气的影响。
2)定位精度高:
单机定位精度优于10米;
采用差分定位精度可达厘米或毫米级。
3)功能多,应用广:
目前已广泛应用于大地测量、工程测量、航空摄影测量、运载工具导航和管制、地壳运动监测、工程变形监测、资源勘察、地球动力学等学科领域。
GPS由三个独立的部分组成:
空间部分:
21颗工作卫星,3颗备用卫星。
地面支撑系统:
1个主控站,3个注入站,5个监测站。
用户设备部分:
接收GPS卫星发射信号,以获得必要的导航和定位信息,经数据处理,完成导航和定位工作。
GPS接收机硬件一般由主机、天线和电源组成。
图GPS全球定位示意图
GPS定位的基本原理:
根据高速运动的卫星瞬间位置作为已知的数据,采用空间距离后方交会的方法,确定待测点的位置。
假设t时刻在地面待测点上安置GPS接收机,可以测定GPS信号到达接收机的时间△t,再加上接收机所接收到的卫星星历等数据可以确定以下四个方程式:
上述四个方程式中待测点坐标x、y、z和Vt0为未知参数,其中di=cti(i=△1、2、3、4)。
di(i=1、2、3、4)分别为卫星1、卫星2、卫星3、卫星4到接收机之间的距离。
ti(i=△1、2、3、4)分别为卫星1、卫星2、卫星3、卫星4的信号到达接收机所经历的时间。
c为GPS信号的传播速度(即光速)。
四个方程式中各个参数意义如下:
x、y、z为待测点坐标的空间坐标。
xi、yi、zi(i=1、2、3、4)分别为卫星1、卫星2、卫星3、卫星4在t时刻的空间坐标,可由卫星导航电文获得。
Vti(i=1、2、3、4)分别为卫星1、卫星2、卫星3、卫星4的卫星钟的钟差,由卫星星历提供。
Vto为接收机的钟差。
由以上四个方程即可计算出待测点的坐标x、y、z和接收机的钟差Vto。
1.2.2NMEA格式解释
GPS模块返回的位置信息是按照NMEA协议格式,NMEA是一套定义接收机输出的标准信息,有几种不同的格式,每种都是独立相关的ASCII格式,逗点隔开数据流,数据流长度从30-100字符不等,通常以每秒间隔选择输出,通常的的格式为"
GP"
开头,它包含了定位时间,纬度,经度,高度,定位所用的卫星数,其他的有速度,跟踪,日期等。
NMEA-0183协议定义的语句非常多,但是常用的或者说兼容性最广的语句只有$GPGGA、$GPGSA、$GPGSV、$GPRMC、$GPVTG、$GPGLL等,说明如下:
$GPGGA(定位信息)eg:
$GPGGA,092204.999,4250.5589,S,14718.5084,E,1,04,24.4,19.7,M,,,,0000*1F
GPGSA(当前卫星信息)eg:
$GPGSA,A,3,01,20,19,13,,,,,,,,,40.4,24.4,32.2*0A
$GPGSV(可见卫星信息)
eg:
$GPGSV,3,1,10,20,78,331,45,01,59,235,47,22,41,069,,13,32,252,45*70
$GPVTG(地面速度信息)
$GPVTG,89.68,T,,M,0.00,N,0.0,K*5F
$GPGLL(地理定位信息)
$GPGLL,4250.5589,S,14718.5084,E,092204.999,A*2D
其中GPGGA的格式如下:
$GPGGA,<
1>
<
2>
3>
4>
5>
6>
7>
8>
9>
M,<
10>
11>
12>
*hh<
CR>
<
LF>
UTC时间,hhmmss(时分秒)格式
纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
纬度半球N(北半球)或S(南半球)
经度dddmm.mmmm(度分)格式(前面的0也将被传输)
经度半球E(东经)或W(西经)
GPS状态:
0=未定位,1=非差分定位,2=差分定位,6=正在估算
正在使用解算位置的卫星数量(00~12)(前面的0也将被传输)
HDOP水平精度因子(0.5~99.9)
海拔高度(-9999.9~99999.9)
地球椭球面相对大地水准面的高度
差分时间(从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空)
差分站ID号0000~1023(前面的0也将被传输,如果不是差分定位将为空)
1.2.3GPS模组电路
GPS模组的电路如下图所示,该模组采用APM7101主芯片,它集成了SiRFstarIIIGPS处理器,LNA电路,SAW滤波器,振荡和校准电路;
模组引出了UART通信接口和复位接口。
图GPS模组电路图
GPS模组具有以下特性:
1.20个通道接收
2.弱信号下快速TTFFs(TimetoFirstFix)
3.两个UART收发通道
4.接收灵敏度可达-159dBm
5.支持NMEA-0183和SiRF协议
6.支持SBAS(WAAS、EGONS)
GPS模块带有一个10针的接口,该接口可以直接和MCU相连接或者通过RS232转换模块和PC机相连接使用。
GPS模块需通过MCU向GPS模块的RST(Pin2)引脚输入如图所示的上电时序GPS才能被启动,启动后GPS的信号指示灯会周期闪烁。
图GPS模块启动时序图
GPS启动后会间隔一定时间返回一次接收信息,其返回信息包括:
GGA(1sec)/GSA(1sec)/MC(1sec)/GSV(5sec),通常我们仅关注其中RMC信息。
1.3课程设计思路
根据课程设计题目要求,首先要对实验箱和PC机以及GPS模块进行连接,并对通信传输速率以及IP进行设置,其次要在PC机上对实验程序进行编辑,并复制到Ubuntu系统中,最后将在Ubuntu系统下编译的文件下载到A8实验箱,使其运行显示结果。
第2章详细设计方案
2.1课程设计环境搭建
嵌入式开发环境一般为Linux环境,通常的嵌入式系统的软件开发采用一种交叉编译调试的方式。
交叉编译调试环境建立在宿主机(即一台PC机)上,对应的开发板叫做目标板。
宿主机和目标板的处理器一般不相同,宿主机为x86处理器,而目标板如凌阳的A8实验箱为三星S5PV210,其为ARMA8架构的处理器。
GNU编译器提供这样的功能,在编译器编译时可以选择开发所需的宿主机和目标机从而建立开发环境。
所以在进行嵌入式开发前第一步的工作就是要安装一台装有指定操作系统的PC机作宿主开发机,对于嵌入式Linux,宿主机上的操作系统一般要求为Linux的各种发行版,本次课程设计采用Ubuntu10.10,同时安装gcc交叉编译器。
环境搭建流程如图:
2.1.1Ubuntu10.10的安装
嵌入式Linux的PC开发环境有几个方案:
1.基于PC机Windows操作系统下Cygwin
2.在Windows下安装虚拟机后,再在虚拟机中安装Linux操作系统
3.直接安装Linux操作系统
以上三种方案各有千秋,方案一容易存在兼容性问题;
方案二在PC配置比较低的情况下会比较慢,但是既可以使用Windows上的一些软件又可以使用到比较好的Linux环境,熟悉Windows的用户用此方案比较顺手;
方案三无法使用Windows上的一些常用软件,并且不熟悉的人操作起来比较困难。
签于此笔者建议初学者选择方案二。
方案二首先要在Windows上安装一个虚拟机软件,常用的虚拟机软件为Vmware。
然后再在Vmware上安装Ubuntu10.10。
在安装完Ubuntu10.10后还要安装嵌入式Linux的交叉编译器和开发库以及ARM-Linux的所有源代码,这些包安装后的总共需要空间大约为800M。
2.1.2通过网线和串口将PC和A8实验箱进行连接
通过操作PC机的超级终端登陆实验箱的系统,通过网线连接是有两种方案:
1.实验箱的以太网接口与PC的网卡直接相连。
2.将实验箱与路由器相连。
当在实验室通过方案2连接PC机和A8实验箱时,容易出现ip冲突等问题,所以直接将用网线将实验箱的以太网接口和PC的网卡直接相连。
此时需要将A8实验箱和PC机设置在同一网段才能正常通信。
具体步骤如下:
1)通过超级终端建立连接并登陆到A8实验箱的系统中(账号:
root,密码:
111111)
登陆成功
2)对A8实验箱的IP进行配置,并重启网络服务器。
(主要用到的Linux语句:
ipconfigeth0-i192.168.1.100-m255.255.255.0-g192.168.1.1和servicenetworkrestart)
更改IP并重启网络服务器
3)更改主机电脑的IP(注意将宿主机和实验箱IP设置在同一网段)
更改宿主机IP
2.1.3GPS模块的连接
实验箱引出了GPS接口J33,直接把GPS模组插接到该接口上,即可实现对GPS模组的控制。
其中GPS模组的复位信号由实验箱GPJ4_0来控制,通信由实验箱的UART2来完成。
按照APM7101的通讯要求,UART通讯波特率为4800或者9600bps。
2.1.4软件设计与实现
软件实现是本设计的重点,使用的是嵌入式C语言编程,采用模块化的设计思想,根据系统要求和相关的硬件电路。
本设计中,程序首先通过GPJ4_0输出GPS模组开启所需时序,从而打开GPS模组,接下来即可通过UART2等待从GPS模组中读取GPS信息,并将这些这些信息进行解析,即可得到所需信息。
本设计的程序流程如下图所示:
图软件程序流程图
具体的软件程序流程为:
1.打开Linux下相应的设备挂载点,开启GPS模块并进行初始化。
本设计中,程序通过GPJ4_0输出GPS模组开启所需时序,从而打开GPS模组,接下来可通过UART2等待从GPS模组中读取GPS信息,并将这些信息进行解析,即可得到所需信息。
2.打开并设置UART2属性。
为了实验箱能够正确地与PC进行通信,必须按照制定要求格式对通信串口进行初始化操作。
本设计选择实验箱主电路板上的UART2串口进行与PC的通信,并设置通信波特率为115200、数据位为8位、无奇偶校验位、1位停止位和无数据流控制。
具体实现过程可以通过向设备中发送起始信号,设备地址和写信号,然后发送内部寄存器的地址和数据,发送结束后便发送停止信号。
3.读取GPS信息并解析。
GPS模组返回的信息遵循NMEA协议格式。
为了正确无误地读取GPS模组中返回的信息,我们必须按照NMEA消息格式对缓冲区中的消息进行读取并存储并通过函数GetComma(intnum,char*str)得到指定序号的逗号位置,以解析各个定义段。
基本NMEA指令是一个ASCII字符串,它以‘$‘字符开始、以<CR><LF>序列结束。
NMEA标准消息以“GP”开始,接着是三个字符的消息标识码。
消息头和后面的内容通过逗号进行分隔,消息以校检码结束(校检码由一个‘*’和两个16位的校验字组成。
校验码字段并不用逗号进行分隔。
目前,校验码得到的方式是从‘$’到‘*’之间的字符进行逐位计算。
)
2.2实施方案
1.按照设计原理及设计思路在PC机上编写程序,保存成.c源代码文件,并将文件拷贝到Ubuntu系统中。
2.在Ubuntu操作系统中打开一个终端,进入到源程序所在目录下,在Ubuntu中进行交叉编译,运行命令行(通过ls查看查看到GPS216文件):
arm-linux-gcc-oGPS216GPS.c
3.在PC机,通过ftp协议访问实验箱的IP地址,将编译好的GPS216文件传输到实验箱中。
4.在超级终端中,赋予文件可执行权限并运行。
(授权语句:
chmod+xGPS216)
第3章调试及结果分析
3.1调试
3.1.1软件测试
通过查找众多资料,终于确定了整个设计方案,即使用S5PV210CPU板模块和GPS模块作为本设计的核心芯片。
在参考了各种GPS解析函数和以上的电路原理后,开始进行软件测试。
3.1.2硬件调试
当按照以上原理和要求连接调试后,发现并没有出现预期现象,甚至出现超级终端黑屏现象,所以在课设源代码中设计了输出“此时的GPS信息为:
”以此判断GPS模组获取合法信息,同时在经过不断的查阅资料后,发现GPS模组收到环境影响比较大,首先就是需要将模组放在里窗比较近的位置才能获得相应的GPS信息。
根据GPS的运行原理,课设结果会受到天气环境的影响,比如空气的湿度,大气层的云层厚度等因素,所以课设结果会有些许偏差。
3.2结果
当根据实验原理设计并运行后,超级终端可以出现如下实验结果:
参考文献
[4]凌阳爱普科技有限公司.A8实验箱综合教学开发平台实验指导书[M],2013
[5]王毓银.数字电路逻辑设计.高等教育出版社,1999
[6]梁德厚.数字电路技术及应用.机械工业出版社,2004
[7]杨松华.数字电子技术基础.西安电子科技大学出版社,2000
附录(关键部分程序清单)
#include<
stdio.h>
stdlib.h>
string.h>
assert.h>
unistd.h>
termios.h>
fcntl.h>
sys/stat.h>
sys/time.h>
sys/types.h>
sys/ioctl.h>
typedefstruct{
intyear;
intmonth;
intday;
inthour;
intminute;
intsecond;
chartime_c[10];
//ACSII形式的时间
}date_time;
date_timeD;
//时间
charstatus;
//接收状态
doublelatitude;
//纬度
charlatitude_c[11];
//ASCII形式的纬度
doublelongitude;
//经度
charlongitude_c[11];
//ASCII形式的经度
charNS;
//南北极
charEW;
//东西
doublespeed;
//速度
charspeed_c[10];
//ASCII形式的速度
doublehigh;
//高度
}GPS_INFO;
intGPS_Read(intfd,char*Data_Buff,intlen);
intGetComma(intnum,char*str);
voidUTC2BTC(date_time*GPS);
doubleGet_Double_Number(char*s);
voidGet_Char(char*s);
charbuf_t[128];
intmain()
{
structtermiosoptions,oldoptions;
//定义串口属性结构体变量,其中options用于重新设置串口属性,oldoptions用于原设置,用于恢复到原来的属性
GPS_INFOGPS;
unsignedintDegree=0;
floatCent;
charbuf[1024];
intlen=1024;
intnByte;
intrdadByte;
inti=0;
intfd;
fd=open("
/dev/gpJ4"
O_RDWR);
//openGPJ4
ioctl(fd,0x01,0);
//setGPJ4_0output
ioctl(fd,0x10,0);
//GPJ4_0outputlowlevel
usleep(30000);
ioctl(fd,0x11,0);
//GPJ4_0outputhighlevel
/dev/s3c2410_serial2"
//openserial2
tcgetattr(fd,&
oldoptions);
//获得当前的串口设置信息
options);
cfsetispeed(&
options,B9600);
//设置输入波特率为115200
cfsetospeed(&
//设置输出波特率为115200
options.c_cflag&
=~PARENB;
//设置串口属性为:
数据位为8位,停止位为1位,无奇偶校验
=~CSTOPB;
options.c_cfla