打印
[STM32F4]

【转】STM32F429I-DISCO 和GPS的亲密接触

[复制链接]
1252|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
风萧寒|  楼主 | 2016-11-6 21:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本期教程为大家讲解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
可见GPS导航系统卫星部分的作用就是不断地发射导航电文。然而,由于用户接受机使用的时钟与卫星星载时钟不可能总是同步,所以除了用户的三维坐标x、y、z外,还要引进一个Δt即卫星与接收机之间的时间差作为未知数,然后用4个方程将这4个未知数解出来。所以如果想知道接收机所处的位置,至少要能接收到4个卫星的信号。
GPS接收机可接收到可用于授时的准确至纳秒级的时间信息;用于预报未来几个月内卫星所处概略位置的预报星历;用于计算定位时所需卫星坐标的广播星历,精度为几米至几十米(各个卫星不同,随时变化);以及GPS系统信息,如卫星状况等。
GPS接收机对码的量测就可得到卫星到接收机的距离,由于含有接收机卫星钟的误差及大气传播误差,故称为伪距。对 CA码测得的伪距称为CA码伪距,精度约为20米左右,对P码测得的伪距称为P码伪距,精度约为2米左右。
GPS接收机对收到的卫星信号,进行解码或采用其它技术,将调制在载波上的信息去掉后,就可以恢复载波。严格而言,载波相位应被称为载波拍频相位,它是收到的受多普勒频移影响的卫星信号载波相位与接收机本机振荡产生信号相位之差。一般在接收机钟确定的历元时刻量测,保持对卫星信号的跟踪,就可记录下相位的变化值,但开始观测时的接收机和卫星振荡器的相位初值是不知道的,起始历元的相位整数也是不知道的,即整周模糊度,只能在数据处理中作为参数解算。相位观测值的精度高至毫米,但前提是解出整周模糊度,因此只有在相对定位、并有一段连续观测值时才能使用相位观测值,而要达到优于米级的定位精度也只能采用相位观测值。
按定位方式,GPS定位分为单点定位和相对定位差分定位)。单点定位就是根据一台接收机的观测数据来确定接收机位置的方式,它只能采用伪距观测量,可用于车船等的概略导航定位。相对定位差分定位)是根据两台以上接收机的观测数据来确定观测点之间的相对位置的方法,它既可采用伪距观测量也可采用相位观测量,大地测量或工程测量均应采用相位观测值进行相对定位。
在GPS观测量中包含了卫星和接收机的钟差、大气传播延迟、多路径效应等误差,在定位计算时还要受到卫星广播星历误差的影响,在进行相对定位时大部分公共误差被抵消或削弱,因此定位精度将大大提高,双频接收机可以根据两个频率的观测量抵消大气中电离层误差的主要部分,在精度要求高,接收机间距离较远时(大气有明显差别),应选用双频接收机
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φ,在纬度φ处。(公式不精确)
沙发
风萧寒|  楼主 | 2016-11-6 21:34 | 只看该作者
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=数据无效)

使用特权

评论回复
板凳
风萧寒|  楼主 | 2016-11-6 21:35 | 只看该作者
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
秒脉冲信号

使用特权

评论回复
地板
风萧寒|  楼主 | 2016-11-6 21:36 | 只看该作者
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
不连接

27.5 GPS相关函数说明

主要函数:
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);
说明:计算两点距离



使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

68

主题

134

帖子

3

粉丝