STM32F429I-DISCO 和GPS的亲热接触
第27章 GPS LCD显示教程
本期教程为大家解说GPS Global Positioning System(全球定位系统)的使用,。GPS是由美国国防部研制建立的一种具有全方位、全天候、全时段、高精度的卫星导航系统,能为全球用户提供低成本、高精度的三维位置、速度和精确定时等导航信息,是卫星通信技术在导航领域的应用典范,它极大地提高了地球社会的信息化水平,有力地推动了数字经济的发展。
27.1 GPS 基础知识介绍
27.2 NMEA-0183协议介绍
27.3 NEO_6M模块介绍
27.4 硬件连接说明
27.5 GPS相关函数说明
27.6 实验例程说明
27.7 实验总结
27.1 GPS 基础知识介绍
27.1.1 定位原理
GPS导航系统的基本原理是測量出已知位置的卫星到用户接收机之间的距离。然后综合多颗卫星的数据就可知道接收机的详细位置。
要达到这一目的。卫星的位置能够依据星载时钟所记录的时间在卫星星历中查出。而用户到卫星的距离则通过记录卫星信号传播到用户所经历的时间,再将其乘以光速得到(因为大气层电离层的干扰。这一距离并非用户与卫星之间的真实距离。而是伪距(PR,):当GPS卫星正常工作时,会不断地用1和0二进制码元组成的伪随机码(简称伪码)发射导航电文。GPS系统使用的伪码一共同拥有两种,各自是民用的C/A码和军用的P(Y)码。C/A码频率1.023MHz。反复周期一毫秒。码间距1微秒,相当于300m;P码频率10.23MHz。反复周期266.4天。码间距0.1微秒,相当于30m。而Y码是在P码的基础上形成的,保密性能更佳。导航电文包括卫星星历、工作状况、时钟改正、电离层时延修正、大气折射修正等信息。它是从卫星信号中解调制出来,以50b/s调制在载频上发射的。
导航电文每一个主帧中包括5个子帧每帧长6s。
前三帧各10个字码;每三十秒反复一次。每小时更新一次。
后两帧共15000b。导航电文中的内容主要有遥測码、转换码、第1、2、3数据块,当中最重要的则为星历数据。当用户接受到导航电文时,提取出卫星时间并将其与自己的时钟做对照便可得知卫星与用户的距离,再利用导航电文中的卫星星历数据推算出卫星发射电文时所处位置,用户在WGS-84大地坐标系中的位置速度等信息便可得知。
可见GPS导航系统卫星部分的作用就是不断地发射导航电文。然而,因为用户接受机使用的时钟与卫星星载时钟不可能总是同步。所以除了用户的三维坐标x、y、z外。还要引进一个Δt即卫星与接收机之间的时间差作为未知数。然后用4个方程将这4个未知数解出来。
所以假设想知道接收机所处的位置,至少要能接收到4个卫星的信号。
GPS接收机可接收到可用于授时的准确至纳秒级的时间信息;用于预报未来几个月内卫星所处概略位置的预报星历;用于计算定位时所需卫星坐标的广播星历,精度为几米至几十米(各个卫星不同,随时变化);以及GPS系统信息。如卫星状况等。
GPS接收机对码的量測就可得到卫星到接收机的距离,因为含有接收机卫星钟的误差及大气传播误差。故称为伪距。
对 CA码測得的伪距称为CA码伪距。精度约为20米左右,对P码測得的伪距称为P码伪距,精度约为2米左右。
GPS接收机对收到的卫星信号,进行解码或採用其他技术。将调制在载波上的信息去掉后。就能够恢复载波。
严格而言。载波相位应被称为载波拍频相位,它是收到的受多普勒频移影响的卫星信号载波相位与接收机本机振荡产生信号相位之差。
一般在接收机钟确定的历元时刻量測。保持对卫星信号的跟踪,就可记录下相位的变化值,但開始观測时的接收机和卫星振荡器的相位初值是不知道的。起始历元的相位整数也是不知道的。即整周模糊度。仅仅能在数据处理中作为參数解算。
相位观測值的精度高至毫米,但前提是解出整周模糊度,因此仅仅有在相对定位、并有一段连续观測值时才干使用相位观測值。而要达到优于米级的定位精度也仅仅能採用相位观測值。
单点定位就是依据一台接收机的观測数据来确定接收机位置的方式,它仅仅能採用伪距观測量,可用于车船等的概略导航定位。
相对定位(差分定位)是依据两台以上接收机的观測数据来确定观測点之间的相对位置的方法。它既可採用伪距观測量也可採用相位观測量,大地測量或project測量均应採用相位观測值进行相对定位。
在GPS观測量中包括了卫星和接收机的钟差、大气传播延迟、多路径效应等误差。在定位计算时还要受到卫星广播星历误差的影响,在进行相对定位时大部分公共误差被抵消或削弱。因此定位精度将大大提高,双频接收机能够依据两个频率的观測量抵消大气中电离层误差的主要部分,在精度要求高,接收机间距离较远时(大气有明显区别)。应选用双频接收机。
GPS定位的基本原理是依据快速运动的卫星瞬间位置作为已知的起算数据,採用空间距离后方交会的方法,确定待測点的位置。
如图所看到的,如果t时刻在地面待測点上安置GPS接收机,能够測定GPS信号到达接收机的时间△t。再加上接收机所接收到的卫星星历等其他数据能够确定下面四个方程式。
27.1.2 定位精度
28颗卫星(当中4颗备用)早已升空,分布在6条交点互隔60度的轨道面上,距离地面约20000千米。已经实现单机导航精度约为10米,综合定位的话,精度可达厘米级和毫米级。
但民用领域开放的精度约为10米。
27.1.2 GPS 设置
GPS 拿到手。假设是新机器要定位。已经提到了。另外,另一些设置,经常使用的有坐标系、地图基准、參考方位、公制/英制、数据接口格式什么的。
坐标系:经常使用的是 LAT/LON 和 UTM。LAT/LON 就是经纬度表示,UTM 在这里就无论他了。
地图基准:一般用 WGS84。
參考方位:实际上有两个北。磁北和真北呀(简称 CB 和 ZBY)。指南针指的北就是磁北。北斗星指的北就是真北。
两者在不同地区相差的角度不一样的,地图上的北是真北。
公制/英制:自选。
数据接口格式:这得细谈谈。
GPS 能够输出实时定位数据让其它的设备使用,这就牵扯到了数据交换协议。差点儿全部的 GPS 接收机都遵循美国国家海洋电子协会(National Marine Electronics Association)所指定的标准规格,这一标准制订全部航海电子仪器间的通讯标准。当中包括传输资料的格式以及传输资料的通讯协议。
NMEA 协议有 0180、0182 和 0183 三种。0183 能够觉得是前两种的超集,如今正广泛的使用。
经纬度的表示
再讲讲数据表示。
一般从 GPS 得到的数据是经纬度。经纬度有多种表示方法。
1.)ddd.ddddd, 度.度的十进制小数部分(5 位)
2.)ddd.mm.mmm,度.分.分的十进制小数部分(3 位)
3.) ddd.mm.ss, 度.分.秒
不是全部的 GPS 都有这几种显示, GPS315 仅仅能选择另外一种和第三种。
在 LAT/LON 坐标系里,纬度是平均分配的,从南极到北极一共 180 个纬度。地球直径 12756KM,周长就是12756*PI,一个纬度是 12756×PI /360 = 111.133 KM (不精确)。
经度就不是这样,仅仅有在纬度为零的时候。就是在赤道上,一个经度之间的距离是 111.319KM。经线随着纬度的添加,距离越来越近。最后交汇于南北极。所以经度的单位距离和确定经度所在的纬度是密切相关的,简单的公式是:
经度 1°长度=111.413cosφ,在纬度φ处。(公式不精确)
27.2 NEMA-0183协议知识介绍
NMEA-0183协议是GPS接收机应当遵守的标准协议。也是眼下GPS接收机上使用最广泛的协议,大多数常见的GPS接收机、GPS数据处理软件、导航软件都遵守或者至少兼容这个协议。
NMEA-0183是 美国国家海洋电子协会(Na-tionalMarineElectronicsAssociation)为统一海洋导航规范而制定的标准,该格式标准已经成为国际通用的一种格式,协议的内容在兼容NMEA-0180和NMEA-0182的基础上,添加了GPS、測深仪、罗经方位系统等多种设备接口和通讯协议定义,同一时候还同意一些特定厂商对其设备通信自定协议(例,Garmin GPS,Deso 20等)。NMEA-0183格式数据串的全部数据都採用SASCII文本字符表 示,传输数据以“$”开头,后面是语句头。语句头由五个字母组成,分两部分,前两个字母表示“系统ID”,即表示该语句是属于何种系统或设备,后三个字母表示“语句ID”,表示该语句是关于何方面的数据。语句头后是数据体,包括不同的数据体字段,语句末尾为校验码(可选),以回车换行符<CR><LF>结束,也就是ACSII字符“回车”(十六进制的0D)和“换行”(十六进制的0A)。每行语句最多包括82 个字符(包括回车换行符和$”符号)。数据字段以逗号分隔识别,空字段保留逗号。以GPS的GPRMC语句为:
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh<CR><LF>
当中GP表示该语句是GPS定位系统的,RMC 表示该语句输出的是GPS定位信息,后面是数据体。
最后校验码*hh是用做校验的数据。在通常使用时,它并非必须的,可是当周围环境中有较强的电磁干扰时,则推荐使用。
hh代表了“$”和“*”的全部字符的按位异或值(不包含这两个字符)。个别厂商自定义语句格式以“$P”开头,其后是3个字符的厂家 ID识别号,后接自己定义的数据体。
详细说明例如以下:
1、 Global PositioningSystem Fix Data(GGA)GPS定位信息
$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh<CR><LF>
<1> UTC时间。hhmmss(时分秒)格式
<2> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
<3> 纬度半球N(北半球)或S(南半球)
<4> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
<5> 经度半球E(东经)或W(西经)
<6> GPS状态:0=未定位,1=非差分定位,2=差分定位。6=正在估算
<7> 正在使用解算位置的卫星数量(00~12)(前面的0也将被传输)
<8> HDOP水平精度因子(0.5~99.9)
<9> 海拔高度(-9999.9~99999.9)
<10> 地球椭球面相对大地水准面的高度
<11> 差分时间(从近期一次接收到差分信号開始的秒数。假设不是差分定位将为空)
<12> 差分站ID号0000~1023(前面的0也将被传输,假设不是差分定位将为空)
2、 GPS DOP and ActiveSatellites(GSA)当前卫星信息
$GPGSA,<1>,<2>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<3>,<4>,<5>,<6>*hh<CR><LF>
<1> 模式,M=手动,A=自己主动
<2> 定位类型,1=没有定位。2=2D定位。3=3D定位
<3> PRN码(伪随机噪声码)。正在用于解算位置的卫星号(01~32,前面的0也将被传输)。
<4> PDOP位置精度因子(0.5~99.9)
<5> HDOP水平精度因子(0.5~99.9)
<6> VDOP垂直精度因子(0.5~99.9)
3、 GPS Satellites inView(GSV)可见卫星信息
$GPGSV,<1>,<2>,<3>,<4>,<5>,<6>,<7>,…<4>,<5>,<6>,<7>*hh<CR><LF>
<1> GSV语句的总数
<2> 本句GSV的编号
<3> 可见卫星的总数(00~12。前面的0也将被传输)
<4> PRN码(伪随机噪声码)(01~32,前面的0也将被传输)
<5> 卫星仰角(00~90度,前面的0也将被传输)
<6> 卫星方位角(000~359度。前面的0也将被传输)
<7> 信噪比(00~99dB。没有跟踪到卫星时为空,前面的0也将被传输)
注:<4>,<5>,<6>,<7>信息将依照每颗卫星进行循环显示。每条GSV语句最多能够显示4颗卫星的信息。其它卫星信息将在下一序列的NMEA0183语句中输出。
4、 Recommended MinimumSpecific GPS/TRANSIT Data(RMC)推荐定位信息
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh<CR><LF>
<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=数据无效)
5、 Track Made Good andGround Speed(VTG)地面速度信息
$GPVTG,<1>,T,<2>,M,<3>,N,<4>,K,<5>*hh<CR><LF>
<1> 以真北为參考基准的地面航向(000~359度,前面的0也将被传输)
<2> 以磁北为參考基准的地面航向(000~359度,前面的0也将被传输)
<3> 地面速率(000.0~999.9节。前面的0也将被传输)
<4> 地面速率(0000.0~1851.8公里/小时。前面的0也将被传输)
<5> 模式指示(仅NMEA0183 3.00版本号输出,A=自主定位。D=差分,E=估算,N=数据无效)
6、 Geographic Position(GLL)定位地理信息
$GPGLL,<1>,<2>,<3>,<4>,<5>,<6>,<7>*hh<CR><LF>
<1> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
<2> 纬度半球N(北半球)或S(南半球)
<3> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
<4> 经度半球E(东经)或W(西经)
<5> UTC时间,hhmmss(时分秒)格式
<6> 定位状态,A=有效定位,V=无效定位
<7> 模式指示(仅NMEA0183 3.00版本号输出。A=自主定位,D=差分。E=估算,N=数据无效)
27.3 NEO-6M模块介绍
GPS模块一款高性能GPS定位模块。该模块採用U-BLOX NEO-6M模组。模块自带MAXIM公司高增益(20.5dB)LNA芯片与高性能陶瓷天线结合。组成接收天线,相当于集成有源天线了(无需再购买昂贵的有源天线了),当然为了有更好的接收效果,模块还提供IPX接口,以供大家自行连接有源天线(需自备)。从而组成"双天线",接收新能更上一层楼。
模块支持EEPROM,全部配置信息都能够保存在EEPROM,满足您各种配置需求。模块还自带可充电后备电池(以支持温启动或热启动,后备电池在主电源断电后,能够维持半小时左右的GPS接收数据保存),NEO-6M-V2.3 GPS模块特点例如以下:
1。採用U-BLOX NEO-6M模组,体积小巧。性能优异。
2。自带陶瓷天线及MAXIM 20.5dB高增益LNA芯片,搜星能力强。
3。可通过串口进行各种參数设置。并可保存在EEPROM。使用方便。
4。自带IPX接口,能够连接各种有源天线,适应能力强。
5。兼容3.3V/5V电平。方便连接各种单片机系统。
6。自带可充电后备电池,能够掉电保持星历数据。
正面:
反面
搜星效果 这个是在阳台搜的 东向 实际在室外測试效果将优于此效果
引脚定义:
编号 |
定义 |
说明 |
1 |
VCC |
3.3-5V |
2 |
GND |
|
3 |
TXD |
GPS TTL TXD |
4 |
RXD |
GPS TTL RXD |
5 |
PPS |
秒脉冲信号 |
如有须要请点击:
http://item.taobao.com/item.htm?_u=fliq218f3e&id=41870076926
27.4 NEO-6M模块和硬件连接说明
NEO-6M模块是通过串口和硬件连接。这里我们用STM32F429I-DISCO为例给大家说明如何连接GPS模块。
编号 |
GPS引脚定义 |
STM32F429I-DISCO 连接引脚 |
1 |
VCC |
5V 或VCC |
2 |
GND |
GND |
3 |
TXD |
PB7 |
4 |
RXD |
PB6 |
5 |
PPS |
不连接 |
实物连接图通过杜邦线:
连接图1
STM32F429I——DISCO端 连接图
GPS端连接图
27.5 GPS相关函数说明
整个project例如以下图所看到的:
主数据结构:
主要函数:
void TM_GPS_Init(TM_GPS_Data_t* GPS_Data, uint32_tbaudrate);
说明:
GPS初始化函数
* 參数说明:
* - TM_GPS_Data_t* GPS_Data:
* 结构体TM_GPS_Data_t指针
* - uint32_t baudrate:
* GPS串口波特率
TM_GPS_Result_t TM_GPS_Update(TM_GPS_Data_t* GPS_Data);
说明:
GPS数据处理函数
* 參数说明:
* - TM_GPS_Data_t* GPS_Data:
* 结构体TM_GPS_Data_t指针
float TM_GPS_ConvertSpeed(float SpeedInKnots,TM_GPS_Speed_t toSpeed);
说明:
GPS速度转换函数
* 參数说明:
* - double SpeedInKnots:
* 卫星速度 单位 千米/小时
* - TM_GPS_Speed_t toSpeed:
* 卫星速度 单位 海里/小时
void TM_GPS_ConvertFloat(floatnum, TM_GPS_Float_t* Float_Data, uint8_t decimals);
说明:浮点数转换成整数和小数函数
voidTM_GPS_DistanceBetween(TM_GPS_Distance_t* Distance_Data);
说明:计算两点距离
27.5 实验结果:
上电后 LCD显示:
未定位显示数据:
定位后显示数据: