基于单片机的GPS定位模块

好久不见. 提交于 2020-01-24 14:44:43

随着时代的发展,先进的科学技术给人们的生活带来了翻天覆地的变化。各种各样的智能化产品层出不穷,推动着社会的进步。全球定位系统GPS是美国从20世纪70年代开始研制,在1994年建成,以接收导航卫星信号为基础的非自主式导航与定位系统,它以全球性、全能性、全天候性、连续实时高精度的实时时间、三维位置、三维速度为人们的生活带来了方便。随着全球定位技术的不断改进和完善,它的应用领域将会不断地扩大,必将成为信息时代不可缺少的一部分。在我们的生活中GPS定位系统给我们带来了便利,如车载GPS导航仪、GPS手持设备、GPS/GPRS远程终端控制设备等,但是他们的价格比较昂贵。本设计使用低功耗的AT89S52单片机、GPS卫星定位模块和LCD12864液晶显示模块来实现对GPS定位信息的计算和显示。GPS信息主要有GPGSV(可见卫星信息)、GPGLL(地理定位信息)、GPRMC(推荐最小定位信息)、GPVTG(地面速度信息)、GPGGA(GPS定位信息)和GPGSA(当前卫星信息)。在设计中我用软件只对GPRMC(最小定位信息)和GPGGA(GPS定位信息)进行了解析,并将解析后的数据转换成字符,通过LCD12864显示日期、时间、经度、纬度、航向、速度和海拔高度等卫星信息。本设计思路清晰、结构简易、性价比高,对研究GPS定位系统二次开发有重要作用。

1.总体设计方案

1.1系统设计框图

本设计主要由电源电路、复位电路、时钟电路、串口通信电路、GPS接收模块、LCD12864显示电路组成。电源电路为系统提供电源,复位电路用于单片机的初始化操作,时钟电路用于是单片机工作在统一的时钟脉冲。GPS接收模块由GPS接收电路和GPS接收天线组成。GPS接收机用于接收GPS卫星信号,并将接收到的信息通过串口通信方式发送到单片机中。单片机通过软件程序对接收到的GPS定位信息进行计算解析,并将解析的结果通过LCD12864显示。

2.设计原理

2.1 AT89S52单片机结构和原理

2.1.1
AT89S52单片机功能特性

AT89S52单片机是一种低功耗、高性能COMS8位控制器,具有8K可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,适宜于常规编程。AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32 位 I/O 口线,看门狗定时器,2 个数据指针,三个 16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至 0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。AT89S52引脚分布图如图2所示:

图2 AT89S52引脚分布图

AT89S52主要性能:

★ 与MCS-51单片机产品兼容

★ 8K字节在系统可编程Flash存储器

★ 1000次擦写周期

★ 全静态操作:0Hz~33Hz

★ 三级加密程序存储器

★ 32个可编程I/O口线

★ 三个16位定时器/计数器

★ 八个中断源

★ 全双工UART串行通道

★ 低功耗空闲和掉电模式

★ 掉电后中断可唤醒

★ 看门狗定时器

★ 双数据指针

★ 掉电标识符

2.1.2
复位控制电路原理

复位是单片机的初始化操作,单片机在上电启动运行时,都需要先复位。其作用是使单片机和其他部件都处于一个确定的初始化状态,并从这个工作状态开始工作。但是单片机自身不能自动进行复位,必须使用外部复位电路来实现单片机的复位。单片机的外部复位电路有上电自动复位电路和按键手动复位电路两种。我们采用的是按键手动复位,当复位按键按下后,复位端与VCC电源接通,电容迅速放电,使REST引脚为高电平;当复位键弹起后,VCC电源通过10K欧姆电阻对22uf电容重新充电,REST引脚端出现复位正脉冲。其持续时间取决于RC电路时间常数。

2.1.3
时钟控制电路原理

单片机的工作是在统一的时钟脉冲控制下进行的,这个时钟脉冲由单片机时钟电路发出,单片机的时钟产生有内部时钟和外部时钟两种,我们采用的是内部时钟方式。此方式是利用芯片内部的振荡器,然后在引脚XTAL1和XTAL2两端接晶体振荡器,就构成了自激的振荡器,发出的脉冲直接送入内部时钟电路。外接晶振时,C4和C5的值通常选择为15PF—33PF之间,电容对频率有微调作用。

2.2 GPS结构组成

全球定位系统(Global Positioning System)GPS是美国第二代卫星导航系统,是在子午仪卫星导航系统的基础上发展起来的,它采纳了子午仪系统的成功经验,和子午仪系统一样,全球定位系统由空间部分、地面控制部分和用户设备三大部分组成。GPS结构组成图如图5所示:

图5 GPS结构组成图

2.2.1
空间部分

GPS的空间部分由21颗工作卫星和3颗备用卫星组成,它们位于距离地球表面20200Km的高空中。平均分配在6个轨道平面上(每个平面4颗),轨道倾斜角为55°,各轨道平面升交点的赤径相差60度。此外,还有4颗有源备份卫星在轨运行。卫星的分布使得在全球任何地方、任何时间都可观测到4颗以上的卫星,并能保持良好定位解算精度的几何图象,这就提供了在时间上连续的全球导航能力。GPS卫星产生两组电码, 一组称为C/A
码( Coarse/Acquisition Code11023MHz) ;一组称为P 码(Precise Code 10123MHz),P 码因频率较高,不易受干扰,定位精度高,因此受美国军方管制,并设有密码,一般民间无法解读,主要为美国军方服务。C/A 码人为采取措施而刻意降低精度后,主要开放给民间使用。

GPS卫星有如下基本功能:

★ 接受和存储有地面监控站发来的导航信息,接受并执行监控站的控制命令。

★ 借组与卫星上设有的微处理机进行必要的数据处理工作。

★ 通过星载的高精度铯原子钟和铷原子钟提供精密的时间标准。

★ 向用户发送定位信息。

★ 在地面监控站的指令下,通过推进器调整卫星的姿态和启用备用卫星。

2.2.2
地面控制部分

地面控制部分由1个主控站、5个监测站和3个地面控制站组成。检测站是主控站直接控制下的数据自动采集中心,站内配有双频的GPS接收机和高精度原子钟。检测站将卫星观测数据,包括电离层和气象数据,经过初步处理后,传送到主控站。主控站从各监测站收集跟踪数据,计算出卫星的轨道和时钟参数,然后将结果送到3 个地面控制站。地面控制站在每颗卫星运行至上空时,把这些导航数据及主控站指令注入到卫星。这种注入对每颗GPS 卫星每天一次,并在卫星离开注入站作用范围之前进行最后的注入。如果某地面站发生故障,那么在卫星中预存的导航信息还可用一段时间,但导航精度会逐渐降低。

2.2.3
用户设备部分

用户设备即为GPS接收机本设计主要是设计该部分,其主要功能是能够捕获一定卫星截止角所选择的待测卫星,并跟踪这些卫星。利用已经设计好的GPS接收模块接收卫星发送的定位信息,通过MCU处理采集到的数据,并将数据转换成字符,显示定位信息。GPS接收机的硬件,一般包括主机(包括GPS数据采集芯片)、天线和电源,接收机中的微处理机算机是用户设备的核心部分,它可以按照定位解算方法进行定位计算,计算出用户所在位置的经度、纬度、海拔高度、速度和日期时间信息。

2.3 GPS工作原理

GPS定位的基本原理是根据高速运动的卫星瞬间位置作为已知的起算数据,采用空间距离后方交会的方法,确定待测点的位置。本设计采用GPS绝对定位原理,参照坐标系为WGS—84坐标系。假设t时间在地面安置GPS接收机,测得GPS信号到达GPS接收机的时间为△t,再根据GPS接收机上接收到的从GPS卫星发射回来的星历信息。

上述四个方程式中待测点坐标X、Y、Z和Vt0为未知参数,其中di=C△ti(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的卫星时钟差它由卫星星历提供。Vt0为接收机的时钟差。

由以上四个方程即可解算出待测点的坐标X、Y、Z和接收机的时钟差Vt0。

2.4 GPS数据解析

本设计的GPS接收机根据NMEA-0183协议的标准规范,将位置、速度等信息通过串口传送到单片机系统。NMEA-0183协议是GPS接收机应当遵守的标准协议,也是目前GPS接收机上使用最广泛的协议,大多数常见的GPS接收机、GPS数据处理软件、导航软件都遵守或者至少兼容这个协议。

NMEA 通讯协议所规定的通讯语句都已是以 ASCII 码为基础的,NMEA-0183
协议语句的数据格式如下:“”为语句起始标志;“,”为域分隔符;“ *”为校验和识别符,其后面的两位数为校验和,代表了“”和“*”之间所有字符的按位异或值(不包括这两个字符);“/”为终止符,所有的语句必须以“”或“”来结束,也就是 ASCII 字符的“回车”(十六进制的 0D)和“换行”(十六进制的 0A)。所有的信息由‘’开始,以换行结束,紧跟着‘’后的五个字符解释了信息的基本类型,多个参数之间用逗号隔开。

NMEA-0183 协议定义的语句非常多,但是常用的或者兼容性最广的语句有GPGGAGPGGA、GPGSA、GPGSVGPGSV、GPRMC、GPVTGGPVTG、GPGLL等。在设计中我们只对GPRMC数据和GPRMC数据进行了解析。

2.4.1 GPRMC数据详解

$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh

<1>
UTC时间,hhmmss(时分秒)格式

<2> 定位状态,‘A’=有效定位,‘V’=无效定位

<3> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)

<4> 纬度半球N(北半球)或S(南半球)

<5> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)

<6> 经度半球E(东经)或W(西经)

<7> 地面速率(000.0—999.9节,前面的0也将被传输)

<8> 地面航向(000.0—359.9度,以真北为参考基准,前面的0也将被传输)

<9> UTC日期,ddmmyy(日月年)格式

<10> 磁偏角(000.0—180.0度,前面的0也将被传输)

<11> 磁偏角方向,E(东)或W(西)

<12> 模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)

★ 解析内容:

  1. 时间,这个是格林威治时间,是世界时间(UTC),我们需要把它转换成北京时间(BTC),BTC和UTC差了8个小时,要在这个时间基础上加8个小时。

  2. 定位状态,在接收到有效数据前,这个位是‘V’,后面的数据都为空,接到有效数据后,这个位是‘A’,后面才开始有数据。

  3. 纬度,我们需要把它转换成度分秒的格式,计算方法:

如接收到的纬度是:4546.40891

4546.40891/100 =
45.4640891 可以直接读出45度

4546.40891–45 * 100 = 46.40891 可以直接读出46分

46.40891–46 = 0.40891 * 60 =
24.5346 读出24秒

所以纬度是:45度46分24秒。

  1. 南北纬,这个位有两种值‘N’(北纬)和‘S’(南纬)

  2. 经度的计算方法和纬度的计算方法一样

  3. 东西经,这个位有两种值‘E’(东经)和‘W’(西经)

  4. 速率,这个速率值是 海里/时,单位是节,要把它转换成千米/时,根据:1海里 = 1.85公里,把得到的速率乘以1.85。

  5. 航向,指的是偏离正北的角度

  6. 日期,这个日期是准确的,不需要转换

2.4.2 GPGGA数据详解

$GPGGA,<1><2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*xx

$GPGGA:起始引导符及语句格式说明(本句为GPS定位数据)

<1> UTC时间,格式为hhmmss.sss

<2> 纬度,格式为ddmm.mmmm(第一位是零也将传送)

<3> 纬度半球,N或S(北纬或南纬)

<4> 经度,格式为dddmm.mmmm(第一位零也将传送)

<5> 经度半球,E或W(东经或西经)

<6> 定位质量指示,0=定位无效,1=定位有效

<7> 使用卫星数量,从00到12(第一个零也将传送)

<8> 水平精确度,0.5到99.9

<9> 天线离海平面的高度,-9999.9到9999.9米 M指单位米

<10> 大地水准面高度,-9999.9到9999.9米 M指单位米

<11> 差分GPS数据期限(RTCM SC-104),最后设立RTCM传送的秒数量

<12> 差分参考基站标号,从0000到1023(首位0也将传送)

2.5 LCD12864液晶显示原理

LCD12864是一种具有4/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块,其显示分辨率为128×64,内置8192个1616点汉字和128个168点ASCII字符集。利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字。也可完成图形显示,低电压低功耗是它的又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不但硬件电路结构和显示程序简单,该模块的价格也略低于相同点阵的图形液晶模块。

2.5.1 LCD12864的基本特性

★ 低电源电压(VDD:+3.0—+5.5V)

★ 显示分辨率:128×64点

★ 内置汉字字库,提供8192个16×16点阵汉字(简繁体可选)

★ 内置
128个16×8点阵字符


2MHZ时钟频率

★ 显示方式:STN、半透、正显

★ 驱动方式:1/32DUTY,1/5BIAS

★ 背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10

★ 通讯方式:串行、并口可选

★ 内置DC-DC转换电路,无需外加负压

★ 无需片选信号,简化软件设计

★ 工作温度: 0℃ —+55℃ ,存储温度: -20℃ — +60℃

表1 LCDD12864并行接口表

管脚号

管脚名称

电平

管脚功能描述

1

VSS

0V

电源地

2

VCC

3.0+5V

电源正

3

V0

对比度(亮度)调整

4

RS(CS)

H/L

RS=“H”,表示DB7——DB0为显示数据
RS=“L”,表示DB7——DB0为显示指令数据

5

R/W(SID)

H/L

R/W=“H”,E=“H”,数据被读到DB7——DB0
R/W=“L”,E=“H→L”, DB7——DB0的数据被写到IR或DR

6

E(SCLK)

H/L

使能信号

7

DB0

H/L

三态数据线

8

DB1

H/L

三态数据线

9

DB2

H/L

三态数据线

10

DB3

H/L

三态数据线

11

DB4

H/L

三态数据线

12

DB5

H/L

三态数据线

13

DB6

H/L

三态数据线

14

DB7

H/L

三态数据线

15

PSB

H/L

H:8位或4位并口方式,L:串口方式(见注释1)

16

NC

空脚

17

/RESET

H/L

复位端,低电平有效(见注释2)

18

VOUT

LCD驱动电压输出端

19

A

VDD

背光源正端(+5V)(见注释3)

20

K

VSS

背光源负端(见注释3)

注释1:如在实际应用中仅使用并口通讯模式,可将PSB接固定高电平,也可以将模块上的J8和“VCC”用焊锡短接。

注释2:模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。

注释3:如背光和模块共用一个电源,可以将模块上的JA、JK用焊锡短接。

3.模块电路设计

3.1单片机最小系统

单片机最小系统由复位电路、时钟电路、P0口加上拉电阻组成。我们采用的是按键手动复位,当复位按键按下后,复位端与VCC电源接通,电容迅速放电,使REST引脚为高电平;当复位键弹起后,VCC电源通过10K欧姆电阻对22uf电容重新充电,REST引脚端出现复位正脉冲。其持续时间取决于RC电路时间常数。时钟电路我们采用的是内部时钟方式。此方式是利用芯片内部的振荡器,然后在引脚XTAL1和XTAL2两端接晶体振荡器,就够成了自激的振荡器,发出的脉冲直接送入内

本设计电源电路由三个部分组成:包括整流电路、滤波电路、稳压电路。U5为整流桥它将交流电转化直流电。常见的整流电路有单相半波、全波、桥式、和倍压整流电路。滤波电路用于滤去整流输出电压中的纹波,常见的滤波电路有电容滤波、电感滤波和混合滤波电路,设计中采用的是电容滤波。本设计的稳压电路采用的是三端稳压器。电源电路图如图8所示:

3.3 串口通信电路

对于单片机来说,为了进行串行数据的数据通信,单片机有一个全双工的串行通信接口,包含串行口接收和发送缓冲寄存器等。本设计中考虑到GPS定位接收模块与单片机之间进行数据通信。由于GPS接收模块需要的是TTL或CMOS电平,可以通过MAX232进行电平转化,单片机输出的电平就是TTL电平。为什么要在加一个MAX232串口电路呢,就是为了方便在PC机上应用GPS
Viewer软件观察GPS模块是否接收到GPS卫星传回的数据信息。LCD12864显示电路

LCD12864是20个引脚SIP封装的集成接口器件。在设计中我们将2脚外接电源,3脚接10K的电位器,可实现对其背光调节。4、5、6脚是控制端口,7-14脚是数据输出端口,接单片机P0端口。

3.5
HOLUX GR-87 GPS模块

HOLUX GR-87 GPS是一种高性能,低功耗,体积小,很容易集成GPS引擎板为一种广谱的设计OEM系统应用。该产品是基于成熟的技术在其他HOLUX12通道GPS接收机和SiRFstar II / LP芯片组解决方案。该GPS引擎板将跟踪多达12颗卫星在同一时间,而提供快速的时间,首次定位和一秒钟的导航更新。其远达能力满足汽车导航的灵敏度的要求,以及其他基于位置的应用程序。因此,HOLUX GR- 87引擎板是非常适合的客户的AVL系统集成和基于位置的服务。而GR- 87的设计采用了最新的表面贴装技术(BGA)和高水平的电路集成,实现卓越的性能,同时最大限度地减少空间和功率的要求。这种硬件功能结合智能软件使引擎板更容易被集成在各种导航应用产品上。应用系统可通过两个RS232兼容设置与CMOS / TTL电平的双向沟通渠道进行数据通信。

HOLUX GR-87 GPS模块主要特点:


平均冷启动时间在45秒


低功耗、12通道“全在查看”跟踪


集成ARM7TDMI CPU和软件工程服务


嵌入式客户定义的应用程序


在1Mb的SRAM芯片


双TTL电平的串行端口,一个用于GPS接收器命令消息


接口,另一个为RTCM—104 DGPS输入之一


契约理事会尺寸1“× 1”x0.27“(25.4x25.4x7mm),易于集成到手持设备


重捕时间0.1秒


支持标准NMEA -0183和SiRF二进制协议


支持精确的1PPS输出信号与GPS时序对齐


多路径缓解硬件


板上RTCM SC—104 DGPS和WAAS/
EGNOSDemodulator


内置锂电池进行GPS定位快

表2 HOLUX GR-87 GPS模块管脚分布表

Pin

Pin
Name

Function
description

1

VCC_5V

+3.5~5.5Vdc
power input

2

TXA

Serial Data output port A(TTL Level: Voh≧2.4V
Vol≦0.4V Ioh=Iol=2mA)

3

RXA

Serial Data input port A(TTL Level Vih0.7VCC
Vil≦0.3
VCC)

4

RXB

Serial Data input port B(TTL Level Vih≧0.7VCC
Vil≦0.3
VCC)

5

GND

Power
ground

6

TIMEMARK/
RESET (option)

TIMEMARK: 1PPS Time mark output(Vil≦0.2V Pulse
Width 10ms)。RESET: Reset Input (Active Low)(option function)

4.系统软件设计

4.1主程序流程图

主程序是单片机程序执行的主体部分,整个系统软件的功能都在其中完成,本设计的主程序部分主要包括:串口通信控制程序、LCD12864程序、GPS数据解析程序和显示程序。主程序中进行了串口初始化、定时器0初始化、LCD12864的初始化和GPS数据的初始化。定义了GPS的接收开始和停止标志位rev_start和rev_stop、GPS处理标志位gps_falg和换页显示标志位change_page。进入主程序后首先判断串口是否接收到数据及ch=‘gpsflag=0revstart=1revstop=0GPSrevstart=0revstop=10GPRMCGPGGA’和gps_flag=0;然后rev_start=1,rev_stop=0,开始接收GPS接收机发送的数据,rev_start=0,rev_stop=1接收完成;开定时器0,对GPRMC和GPGGA进行解析,并显示解析的数据信息。如果没有接收到‘’,LCD12864显示初始化信息。主程序流程图如图11所示:

图11 主程序流程图

4.2
GPS数据处理流程图

GPS数据的处理包含两个部分:一部分是对GPRMC数据的解析处理,另一部分是对GPGGA数据的解析处理。在对GPRMC数据的解析时主要是定义了以个字符型变量ch,并判断接收到的数据的第五个字符,如果第五个字符是‘C’,在判断定位状态status是否等于‘A’,如果等于则就将接收到的经度、纬度、日期和时间信息进行字符转换,及单片机将GPS接收机发送来的数据通过软件程序控制转换成字符型数据。在对GPGGA数据的解析是也是定义了一个字符型变量ch,判断接收到的数据的第四个字符,如果第四个字符是‘G’,且定位状态标志位status不等于‘,’,那么单片机也将GPS发送来的海拔高度和水平面高度数据通过软件程序转换成字符型数据。

每行开头的字符都是‘$’,接着是信息类型,后面是数据,以逗号分隔开。一行完整的数据如下:

$GPRMC,080655.00,A,4546.40891,N,12639.65641,E,1.045,328.42,170809,A*60

4.3
显示程序包含三个方面的数据显示主要是日期时间、第一页数据的显示、第二页数据的显示。第一页显示经纬度,第二页显示的是速度、航向、高度、海拔。开始程序后进入程序初始化定义数据;然后判断GPS接收机发送到单片机的数据是否解析,是否有效;有效的话就LCD12864清屏、开定时器0,显示从GPS卫星发射回来的日期和时间。其次判断经纬度是东经还是西经、南纬还是北纬,如果正确显示当前的经纬度数据,关定时器0。否则的话LCD12864再一次清屏,开定时器0,显示速度、航向、高度和海拔。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!