精品NMEA0183GPS定位信息显示系统方案设计.docx
- 文档编号:7892152
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:14
- 大小:26.80KB
精品NMEA0183GPS定位信息显示系统方案设计.docx
《精品NMEA0183GPS定位信息显示系统方案设计.docx》由会员分享,可在线阅读,更多相关《精品NMEA0183GPS定位信息显示系统方案设计.docx(14页珍藏版)》请在冰豆网上搜索。
精品NMEA0183GPS定位信息显示系统方案设计
NMEA-0183GPS定位信息显示系统方案设计
中文摘要
GPS定位系统在人们的日常生活中已被广泛使用,已然成为人们生活中的重要组成部分。
因其具有定位精度高、价格低廉、适用性强等特点,在许多领域都占有主导地位。
本次设计将介绍一种简易GPS卫星定位显示系统,GPS模块采用ublox公司旗下的NEO-6M模块,同时主控MCU采用51单片机STC89C52,显示屏幕采用常见的LCD-12864液晶屏,通过对单片机串口接收到的GPS数据包进行解析并显示在12864液晶上,实现实时地理位置信息的采集与显示。
同时采用电池供电以实现体积小巧、携带方便。
关键词:
GPS定位;STC89C52NEO-6M;LCD-12864;
第一章绪论
1.1课题背景及意义
GPS全球卫星导航系统在军事,商用,民用上都具有广阔的领域,现在应用GPS的产品已经随处可见,比如常见的汽车导航仪,GPS测距测亩仪,GPS定位追踪搜救系统等等,虽然这些功能都比较强大,但差不多都是应用在特定的领域,结合其他的功能模块一起设计使用的,而且仪器价格高,而且对于需要简单定位功能来说没有必要那么复杂。
所以在这种情况下,本次设计的定位显示系统满基本的GPS的定位系统的需求。
1.2课题研究的目标和任务
本次设计的主要任务是通过单片机与GPS模块进行通信,解析出NEMA-0183语句并提取需要的经纬度、时间日期在12864液晶上进行显示。
在此次设计过程中,主要熟悉所选用的GPS接收模块的性能指标,接收并解析它所输出的数据包,用C语言编写相关单片机控制和解析程序,并在液晶显示器成功的显示相关的信息。
第二章GPS定位信息显示系统方案设计
2.1全球GPS卫星导航系统系统简介
GPS卫星到现在为止已经设计了三代,第一代为实验卫星,一共发射了11颗卫星,设计的寿命是5年,现在已经停止工作了。
第二代称之为工作卫星,一共发射了28颗,寿命是7.5年,从1989年开始发射到1994年上半年发射完成。
第三代卫星尚在设计中计划20颗,用来取代第二代提高并改善卫星定位系统。
GPS卫星定位系统给民用开放的定位精度是10米,对外提供了地精度的卫星信号,如果发生战争将随时关闭对某个地区的服务。
欧盟Galile卫星导航计划,该系统由30颗高轨道卫星组成,卫星将给用户提供精准的定位时间和误差不超过1米的定位精度,面对的困难:
“Galile系统”的开发成本高达30亿欧元,还有美国政府的极力反对也推迟了“伽利略”计划的进行。
俄罗斯GLONASS:
与GPS导航系统类似是俄罗斯以空间为基础的无线电导航系统,于20世纪70年代开始启动GLONASS计划,1996年完成24颗卫星的布局,卫星具备完全工作能力,不过由于经济原因现在天空中的GLONASS卫星仅为8颗。
中国北斗系统:
我国的北斗是是自主研发独立运行的全球卫星导航系统,在2003年完成了区域导航的测试系统,然后开始构建全球范围的北斗卫星导航系统,在2012年开始为亚太大部分地区提供服务,并计划在2020年搭建完成全球卫星导航系统。
北斗卫星的特点为快速定位、简短通信、实时导航、等,目前主要的优势用于军事的通讯、集团用户的调度和派遣。
2.2GPS接收机的组成及其工作原理
GPS接收机的重要组成部分为:
天线(带前置放大器)、信号处理器(用于信号的识别和处理)、微处理器(用于接收机的控制,数据采集和导航的计算)、用户信息传输、精密振荡器(产生标准频率)、电源组成。
天线的基本作用就是采集信号,把采集到的信号的能量转化为电流值,但这个电流值是很小的需要进行放大,放大后在变成频率用来对卫星进行跟踪。
接收机的工作原理:
当GPS卫星在用户视界升起时,接收机能够捕获到按一定卫星高度截止角所选择的待测卫星,并能够跟踪这些卫星的运行;对所接收到的GPS信号,具有变换、放大和处理的功能,以便测量出GPS信号从卫星到接收天线的传播时间,解译出GPS卫星所发送的导航电文,实时地计算出测站的三维位置,甚至三维速度和时间。
GPS信号接收机不仅需要功能较强的机内软件,而且需要一个多功能的GPS数据测后处理软件包。
接收机加处理软件包,才是完整的GPS信号用户设备。
2.2GPS接收方案的选取
要想接收并显示GPS定位信息,首先要接收GPS发送的数据包。
在接收GPS数据上有两种选择方案:
第一:
自己购买GPS芯片,GPS芯片是模块的核心部分,可以根据GPS芯片技术手册设计外围电路,并制作PCB板,这种方案的优点是可以自己动手亲自实践,并可以学习到电路设计、天线接收等方面的知识,增强动手的能力,但这种方案的缺点也是很明显的,手工焊接不了,需要贴片机焊接,而且电路做的不好阻抗不匹配很容易影响GPS信号的接收质量,成功率低,费用比较高。
第二:
选择现成的GPS接收模块,现在GPS应用技术已经非常成熟,模块也是多种多样供我们选择,购买也十分方便,各种天线接口的都有,而且性能非常稳定,应用很方便,可以直接输出GPS数据包供我们解析,价格方面由于已经形成产业化所以我们能够接受。
结合以上两点为了很好的完成本次设计应用,我选择第二种。
2.3总体方案的设计
本设计的最终目标就是利用单片机的串行通信接收GPS模块的数据包并提取需要的信息进行解析,然后单片机驱动液晶进行数据的显示。
有如下几个组成部分:
(1):
处理单元采用51单片机STC89C52作为中央控制器。
(2):
GPS使用UBLOX公司NEO-6M模块。
(3):
显示屏选择12864图形液晶信息显示屏。
。
(4):
电源考虑到携带方便采用4节5号干电池进行供电。
第三章基于单片机的GPS硬件电路设计
3.1系统整体结构框图
根据总体设计方案,可以做出以下体结构框图,图中电源分别给隔各个模块供电,GPS天线用的是有源3米长的天线接到模块上,GPS模块输出数据包给单片机,单片机解析后显示在液晶上如图3.1所示。
图3.1系统结构框图
3.2系统各部分模块电路简介
3.2.1单片机STC89C52简介
STC89C52单片机是深圳宏晶STC出品公司具有低功耗,高性能的8位微控制处理器,具有8K擦除闪存。
它使用了经典的C51内核,在51内核基础上做了多次改进和升级,比传统的51单片机功能丰富多样,所以应用领域非常广阔,价格低廉从而大大降低了产品的开发成本,因此成功的应用到了众多个嵌入式领域。
STC89C52工作电压很宽在3.5~5.5V,拥有8K字节的闪存,SRAM512个字节,5K具有EEPROM功能可以保存数据不丢失,多个定时计数器,抗干扰能力强,速度快。
基本参数如下:
1.增强型C51内核,6T和12T时钟周期可以选择,完全兼容传统C51的指令并且拥有双数据指针。
2.工作电压3.5V~5V。
3.0~40MHz的工作频率,类似于传统C51单片机的0~80MHz的工作频率。
4.8K字节的闪存用于用户编译程序。
5.集成512个外部SRAM。
6.通用I/O口为32个,扩展外部总线时可以用P0和P2,P0是开漏极输出,使用时必须要接上拉电阻才能用,其他三个可以直接使用。
7.拥有ISP(在系统可编程)功能,不需要编程器和专用芯片下载程序,只需下载官方提供的ISP烧写工具即可,烧写十分方便快速。
8.拥有5K字节EEPROM存储区,可以存储用户的重要数据,掉电保存数据,不用再单独购买EEPROM芯片。
9.拥有看门狗功能,程序跑死时可以复位系统,保证系统的可靠性。
10.3个可编程16位的定时计数器,即T0、T1、T2。
11.外部中断功能,可设置为上升沿中断和下降沿中断。
12.拥有串行通信接口UART,还可以结合定时器模拟出其他串口,解决串口不足问题。
13.具有超低的功耗:
设置成睡眠模式后可以由外部中断唤醒,非常适用于选用电池供电的系统功。
14.工作的温度范围为-40~85度,
15.封装模式为PDIP、LQFP、PQFP等。
单片机电路图如图3.2所示:
由于通电后NEO-6M默认为9600bps的波特率,,所以单片机需也要产生9600bps的波特率,根据计算波特率的公式选择11.0592M的晶振产生波特率是没有误差的。
图32单片机电路
3.2.2NEO-6MGPS信号接收模块
本设计采用瑞士u-blox公司的第6代GPS芯片NEO-6M接收模块,配备了一个50通道u-blox的高性能6技术,100多万个多个有效的相关器32通道采集引擎的处理能力,使模块可用于大规模并行搜索。
具有SuperSense@kickstart启动技术,可以加快微弱信号的捕获能力。
采用先进的噪声抑制技术和创新的RF架构平台使得u-bloxGPS接收机具有更强的抗干扰能力。
同时,u-blox还具有惯性导航GPS接收机的能力,A-GPS技术和精确定时等。
同时该芯片还兼容其他卫星导航系统,具有-160dBm的弱信号捕获能力等特点,且在价位上合适,接口电路简单直接输出TTL电平,可直接与单片机相连不需要其他转化电路,结合以上的特点我选用GPS模块是NEO-6M。
技术指标:
接收机类型50通道。
最大更新速度:
5HZ
精度:
定位2.5mCEP
冷启动:
26S
辅助启动:
1S
热启动:
1S
运行限制:
速度500m/s
高度50,000m
电源:
2.7到3.6V
功耗;50mW3.0V(连续)
图3.3GPS模块电路图
3.2.312864液晶显示模块介绍
本设计采用显示部分采用LCD-12864,可显示图形和汉字,并且具有光标闪烁、画面位置移动等多种功能,12864液晶显示模块跟系统连接电路如图3.3所示。
主要技术参数和显示特性:
电源部分可以选3.3V的液晶和5V的液晶。
显示格式:
128列×64行
显示颜色:
黄绿
与单片机接的数据口可以设置成:
并行可以设置成8位的或者4位的,串行可以设置成3位的。
配置LED背光
多个显示的效果:
显示光标并闪烁、移动画面位置、用户可以自己定义字符等。
电源地(GND):
0V
它的工作温度是:
常温在0~60℃;宽温在-20~75℃。
引脚说明如下所示:
电路连接图如下如所示:
图3.412864液晶连接电路
由上图可知液晶的数据口跟单片机的P0口由于是开漏输出所有必须接10K的上拉电阻才行,而且P0口与液晶典型的的接法是DB0接到P00,DB1接到P01,依次类推,但这样接的话会导致焊接电路时十分不方便,所以用图上所示的接法焊接起来十分方便,避免了不必要的飞线,飞线太多容易碰断线容易短路,效果也不太美观,只需编写程序时只需要把数据反转就行了。
按照液晶的操作时序编写了液晶的主要驱动函数如下:
液晶写时序:
单片机模拟时序对液晶进行写指令的操作函数:
voidLcd_write_Cmd(ucharcmd)
{
chk_busy();//检测忙
LCD12864_RS=0;/RS拉低选择写命令操作
LCD12864_RW=0;//写模式
LCD_data=fan_zhuan_dat(cmd);//将数据进行反转后赋值给P0口(传送到12864)
LCD12864_EN=1;//拉高EN使能端
Nop();//延时
Nop();
Nop();
Nop();
Nop();
Nop();
Nop();
Nop();
LCD12864_EN=0;//拉底EN使能端
}
单片机模拟时序对液晶进行写数据的操作函数:
voidLcd_write_Dat(uchardat)
{
LCD12864_RS=1;;/RS拉高选择写数据操作
LCD12864_RW=0;//写模式
LCD_data=fan_zhuan_dat(dat);//将数据进行反转后赋值给P0口(传送到12864)
LCD12864_EN=1;//拉高EN使能端
Nop();//延时
Nop();
Nop();
Nop();
Nop();
Nop();
Nop();
Nop();
LCD12864_EN=0;//拉底EN使能端
}
3.2.4系统电源
给系统供电有多种供电方式可以选择,比如USB供电、直流电源供电、电池供电等等,但USB供电直流电源供电大部分都是在室内,这样出去的话不太方便,因此我考虑到系统携带方便、小巧美观,所以选择用四节五号电池供电,四节五号电池电压大概是6V,电压偏高,所以串联一个二极管降压,降压后电压为5.3V左右满足系统要求。
此处二极管还有一个很好的作用就是起到反接保护的作用,二极管正向导通反向截至,当电源端跟地端接反了会起到保护系统的作用。
图3.5电源电路
3.3系统硬件电路原理图
综上所述连接各个模块画出系统硬件电路图如图3.6所示:
图3.6硬件电路图
第四章系统软件设计
4.1NMEA-0183协议简介
NMEA-0183协议是美国国家海洋电子协会(NationalMarineElectronicsAssociation)为海用电子设备制定的标准格式。
它定义了一个协议的标准,GPS生产制造厂家要严格按照这个标准生成,现在几乎所有的GPS模块都是采用这个标准,增强了GPS模块的统一性。
这种协议输出的数据包是ASCII字符码,包括了经纬度、时间日期、速度航向、2D、定位3D定位以及卫星信息和信号接收的质量等信息。
协议的默认的通讯的参数是:
9600bps的波特率,8bit的数据位,1bit的开始未,1bit的结束位,没有奇偶校验位。
该NEO-6M模块上电后默认输出8中格式的数据,分别是$GPRMC…数据、$GPVTG…数据、$GPGGA…数据、$GPGSA…数据、$GPGSV…数据、$GPGSV…数据、$GPGSV…数据、$GPGLL…数据,通过查看手册发现GGA的数据和RMC的数据都包含了我需要的信息,所以我解析哪个数据都可以,这里我解析的是GGA数据,它里面包括了经度、纬度、时间日期、定位状态等满足我所需要的数据所以下面重点介绍下$GPGGA语句,其他语句与此类似。
以下是数据格式:
$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,<13>,<14>*<15>
这个位置<1>是格林威治的时间,度分秒的格式为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期限;详见技术手册。
这个位置<14>接收到的是差分的参考基站的标号,0000~1023(在缺乏数据前将使用0完成);
这个位置<15>最后是数据校验的和。
解析内容:
1.数据包中的时间,这个时间格林威治时间也就是世界时间(UTC),但我们要显示的是北京时间BTC,BTC需要加上8个小时才等于UTC时间,所以转换完后要在这个基础上加上8个小时。
具体程序算法可以参考程序。
2.判断是否定位成功的标志,在没有定位成功的时候,会接收到‘V’,当定位成功后,会受到‘A’,之后才开始收到有效的数据包。
然后我们在程序中就判断是那个符号就能判断出是否定位成功。
3.纬度,我们需要把它转换成度的格式才能在谷歌地图中输入进去,计算方法:
比如接收到的纬度是:
3924.58719
首先我们先要编写一个函数unsignedlongStr_To_long(uchar*buf)
这个函数的功能是把字符串转换成数392458719,这样实际上扩大了100000倍,然后
392458719/10000000)=39这样就得到了39度
392458719%10000000%60=40978.65这样也把分转化成了度
(39*100000+40978.65)*0.00001=39.4097865这样就全部转化成了度的格式了。
具体详见程序。
4.南北纬,这个位有两种值‘N’(北纬)和‘S’(南纬)
5.经度的计算方式跟计算纬度是一样的。
6.东西经,这个位有两种值‘E’(东经)和‘W’(西经)
7.这个是速率值,可以表示成海里/时,是以节为单位的,要想转化成公里/时需要乘以1.85倍。
8.航向,指的是偏离正北的角度
9.日期,这个日期是准确的,不需要转换
一下是部分解析程序:
voidGPS_inform()//GPS信息解析函数
{
if(buf_full==1)
{
if(GpsInfo.Statue=='0'||GpsInfo.Statue==0)//如果没有定位显示GPS初始化请等待
{
Display_GPS_Init();
GpsFlag=0;
Clear_flag=1;
}
else
{
GpsFlag=1;
rev=Str_To_long(GpsInfo.Longitude);//把经度字符串穿换成数
jingdu=(rev/10000000);//分离经度
jingdu_du=(rev%10000000)*100/60;//把分变成度
jingdu=jingdu*10000000+jingdu_du;//合成为度
rev=Str_To_long(GpsInfo.Latitude);//把纬度字符串穿换成数
weidu=(rev/10000000);//分离纬度
weidu_du=(rev%10000000)*100/60;//把分变成度
weidu=weidu*10000000+weidu_du;//合成为度
}
buf_full&=~0x01;
dsp_count=0;
}
if(GpsFlag)//解析完了就送到显示屏进行显示
{
if(Clear_flag)//清除之前显示的数据信息
{
clr_screen();
Clear_flag=0;
}
GPS_Dis();//解析处理完数据后显示到屏幕上
}
}
4.2软件设计流程
程序的设计流程大致是这样的:
首先上电,然后程序分别对液晶初始化和对单片机寄存器的一些参数进行初始化,初始化完成后程序判断是否定位成功,没有成功就一直等待判断成功与否,定位成功之后就解析GPS语句提取相应定位信息,然后在液晶上进行显示。
程序在编写时采用了模块化编程的思想,之所以采用模块化的编程方式主要是方便后期程序的调试,可读性强,方便维护的同时也方便移植,在其他不同的硬件平台上只需调用.C和.H文件即可,具体程序流程如图4.1所示。
·
N
Y
N
Y
图4.1软件程序流程图
4.2软件编译环境及下载软件简介
4.2.1Keil开发环境
KeilC51是一款功能非常强大的集成开发调试的工具,集成了C语言和汇编语言两种开发方式并提供多种具有C51内核的芯片的工程配置,它可以在线调试程序,可以对系统进行模拟外设的仿真,调试的时候可以很方便的打开各种寄存器的窗口查看他们的数值,而且有很全面的帮助文档,可以把芯片的说明文档集成在IDE中,而且它生成的目标的代码的效率是非常高的,在Keil中我们用C语言进行编写程序,它的可读性强,移植性好,相比使用一种MCU就学一种汇编的汇编语言相比大大降低了对产品的开发时间。
4.2.2程序的编译和下载
1首先打开Keil要先建立一个工程文件:
2建立好工程之后需要选择单片机型号,因为我用的是STC89C52单片机,然而在系统的库里面没有STC系列单片机,有两个办法可以解决这个问题,第一个就是安装一个STC单片机的补丁,第二个就是可以选择AT89C52单片机进行替代,他们的指令是完全兼容的,在此我选择后者,如图5.3所示:
图5.3选择器件
3建立完并保存后需要进行设置,
点击TargetOptions按钮,在设置中选择生成HXE文件,
图5.4
然后可以创建文件进行编写程序了。
图5.5
4最后写完程序需要进行编译才能生成HEX文件。
如图5.6所示:
图5.6编译程序
编译过程中不能有错误,否则不能生成HEX文件,如果有错误,在下面会显示出哪行有错误,双击出现的错误就可以找到出错的位置,然后一个一个改正过来,直到没有错误为止,若是存在警告可以先不必进行修改,这不会影响到程序的正常运行。
5然后确定和编译器生成HEX文件,接下来要做的是将生成的HEX文件下载但单片机,这里我们选择stc_ispSTC网站提供的下载工具,首先单片机连接好串口模块准备下载,然后在STC_ISP中选择单片机型号,打开HEX文件,选择串口号,最后点击Download进行下载就行了。
如图4.7所示。
图4.7STC_ISP下载工具
第五章系统调试与实验结果
5.1硬件焊接调试
首先第一步:
要把需要焊接的所有元器件准备好,然后按照电路原理图一步一步的焊接好,焊接好后先不要着急上电,先目测下电路板看看各个元器件是否焊接正确,电解电容的极性是不是焊接的正确,然后用万用表量下各个点之间是不是有短路和断路的情况,检测开关是不是正常,然后重点检测下电源跟地是不是存在短路现象,这个是非常重要的如果存在短路现象会烧毁元器件的。
然后第二步:
在以上检测都没问题的情况下开始试通电,接好电源后打开电源开关并观察电源指示灯是不是亮起,如果指示灯不亮要迅速关闭电源,然后再次进行检查器件是不是有焊接错误,是不是存在短路现象等。
第三步:
将下载好程序的STC89C52单片机放入焊接好的单片机IC座中插好,然后在用万用表测量下芯片引脚与IC座间是不是接触良好。
第四步:
将12864液晶插到焊接好的电路板上,将GPS模块也插到相应位置,接上天线,然后把天线放到窗户外面或者拿到室外准备上电。
第五步:
在以上准备工作都做好之后打开电源看看液晶是不是像程序写的那样显示指定的字符,定位成功后观察显示的信息是否跟预期的一样,如果不一样需要再次进行调试,直到没有问题为止。
5.2实验结果分析
通过综合调试软件部分和硬件
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精品 NMEA0183GPS 定位 信息 显示 系统 方案设计