当前位置:首页 > 工业控制 > 电子设计自动化
[导读] 全球定位系统(Clobal Position System,GPS)能够提供实时、全天候、全球性和高精度的服务,其广泛应用于各行各业中。GPS接收机通过天线单元接收卫星信号,将信号进行带通滤波、下变频混频、AGC放大、A/D转换等一系

 全球定位系统(Clobal Position System,GPS)能够提供实时、全天候、全球性和高精度的服务,其广泛应用于各行各业中。GPS接收机通过天线单元接收卫星信号,将信号进行带通滤波、下变频混频、AGC放大、A/D转换等一系列处理,得到数字中频信号,进而对中频信号进行捕获、跟踪,解调出用户的纬度、经度、高度、速度、时间等导航信息,将这些信息按NMEA-0183协议封装,通过串口输出数据。用户设备中的GPS接收器在收到GPS信息后,需要对相关信息予以解码处理,从而得到用户的位置、时间等信息,进而实现用GPS导航和定位的目的。近几年来,现场可编程门阵列(FPGA)凭借其开发过程投资少、设计周期短、灵活方便以及可反复编程等特点,在现代电子设计中得到了广泛应用。本设计选择现场可编程门阵列(FPGA)来实现GPS信号的解析处理。

1 NMEA-0183协议的数据格式

NMEA-0183是美国国家海洋电子协会(NMEA,The National Marine Electronics Association)为海用电子设备制定的标准格式,它现在已被广泛地应用于多个领域的设备之间的数据传输。NMEA标准格式输出采用ASCII码,每个ASCII数据码长8位,串行通信的波特率为9600位/秒,数据位8位,开始位1位,停止位1位,无奇偶校验位。

NMEA-0183协议由语句组成,每条语句以字符“$”作为语句起始标志,数据之间以逗号相隔,字符“*”作为校验和前缀,最后以校验和数值和回车/换行字符结束。最常用的有6种语句格式:$GPGGA,$GPGLL,$GPGSA,$GPGSV,$GPRMC,$GPVTG。下面以推荐定位信息GPRMC语句为例介绍数据格式。语句的格式如下:

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

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

<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>模式指示(仅NMEA-0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效);

<13>校验和;

2 NMEA-0183协议解析器设计

2.1 系统的总体设计

以深圳星际通公司生产的GP5MX1513F1导航芯片为例进行说明。该芯片为一个64并行通道单频接收机,只接受L1波段的卫星信号,定位精度2 m(2D RMS)。该芯片依次输出6种NMEA信息,分别是:$GPGGA,$GPGLL,$GPGSA,$GPGSV,$GPRMC,$GPVTG,串口默认设置:波特率9 600bps,起始位1位,数据位8位,无奇偶校验位,停止位1位。NMEA-0183协议解析系统的总体设计框图如图1所示,GP5MX1513F1导航芯片通过天线单元接收卫星信号,将信号滤波、下变频、放大和模数转换等一系列处理,得到数字中频信号,进而对中频信号进行捕获、跟踪、位同步及帧同步,解调出导航数据,最后计算出用户的纬度、经度、高度、速度、时间等信息,以NMEA-0183协议格式打包成数据帧,再通过标准的串口输出数据。NMEA-0183协议解析模块生成的硬件电路内嵌在FPGA中,一方面通过串口模块接收GP5MX1513F1芯片发出的串行数据,将接收的信号给解析模块进行处理,另一方面解析模块根据NMEA-0183协议的数据格式提取出所需要的信息。

2.2 串口模块

串口模块主要负责接收由GP5MX1513芯片输出的导航定位信息,串口模块通过波特率发生器将系统时钟进行分频,产生16倍数据波特率的时钟。系统复位后,接收端以16倍波特率的速率读取线路状态,检测信号GPS_TX出现下降沿,在GPS_TX信号下降沿后第8个采样点确认是否为低电平,如果检测得到的是高电平,则认为起始位无效,返回到空闲状态,重新等待起始信号的到来。起始位找到后,开始接收数据,当数据计数器data_bit_cnt计到7时,8位数据都已经输入完成。最后,检测停止位,如果正确检测到高电平,则

说明本帧的各位数据正确接收,将数据存入到8位数据寄存器中,否则出错。

串口模块接收端的状态转移图如图2所示,接收机由4个工作状态组成,分别是空闲状态、起始位、数据位和停止位。当系统复位后,电路处于空闲状态,等待信号的触发,连续8个时钟检测出数据发生负跳变,sof信号为高,进入起始状态,当sample为1时,进入数据位,接着的数据位将每隔16个采样周期被采样一次。即取每一位的第8次的波特率时钟采样值来确保采样正确。连续采样8次后,采样计数器data_bit_cnt==7,进入停止位,当sample为1时,进入空闲状态,开始接收下一个数据。

在状态机模型的基础上,使用verilog HDL语言来描述其功能,其主要代码如下:

2.3 解析模块

串口模块输出的8位数据送到解析模块,解析模块采用6MUX1选择器来选择提取哪种语句,通过外部输入信号对寄存器config_Reg进行配置来实现,当config_Reg=000时,提取GGA语句,当config_Reg=001时,提取GLL语句,当config_Reg=010时,提取GSA语句,当config_Reg=001时,提取GSV语句,当config_Reg=011时,提取RMC语句,当config_Reg =100时,提取VTG语句。下面以RMC语句为例,来说明解析过程,解析模块将串口模块接收端接收的数据进行循环检测,判断报文头、定位状态、校验位、结束位信息,提取时间信息。首先,对config_Reg进行配置,设置config_Reg=011;其次,检测报文头$GPRMC,如果是,则进行下一步,否则,继续检测;最后,用逗号计数器的值来决定提取$GPBMC语句的哪段信息,当逗号计数器为1时,提取时分秒信息,存储在data_hh_mm_ss寄存器中;当逗号计数器为2时,提取定位状态信息,当VALID信号为高,则有效定位;当VALID信号为低,则无效定位;当逗号计数器为3时,提取纬度信息,存储在lat_data寄存器中;当逗号计数器为5时,提取经度信息,存储在lon_data寄存器中;当逗号计数器为9时,提取日月年信息,存储在data_dd_mm_yy寄存器中。程序设计的流程图如图3所示。

其主要代码如下:

3 仿真测试及硬件实现

根据编写的测试模块在ModelSim 6.2软件下进行了功能仿真,其仿真结果如图4所示,GPS_TX为输入的串行数据,rcv_data为接收的8位数据,hh_mm_ss为提取出时分秒信息:15:49:41,dd_mm_yy为提取出日月年信息:13.06.09,lat_data为提取的纬度信息:3409.3297,lon_data为提取的经度信息:10853.6986,从仿真波形上看,仿真的结果与测试激、励中的数据一致。

完成了仿真后,在Quartus II 9.0下进行了逻辑综合,将程序下载到Altera公司生产的CycloneII系列EP2C5T144C8型号的FPGA中,用Quartus II 9.0软件自带的嵌入式逻辑分析仪SignalTapII,对FPGA内部的信号进行观测,FPGA内部实际工作波形如图5所示,从硬件调试结果观测,实际测出的结果:年月日2013.08.19,时分秒00:07:42,纬度为3412.0714,经度为10856.6625。由于所测得时间信息为世界协调时间,北京时间与世界协调时相差8个时差,北京时间应修正为:08:40:09,所测得结果与本地的时间一致。

结果分析:从图4和图5波形上可以看到我们测试的结果,实际测试中,我们让整个解析过程连续工作12 h,没有发现解析错误、丢包等不正常现象。因此,大量测试结果表明,该模块能够正确的接收和处理导航信息。

4 结论

根据NMEA—0183协议格式,提出使用FPGA实现NMEA-0183信息解析的一种方法,仿真及实际测试结果表明,该电路能够正确地提取出所需要的信息,如时间、位置等信息,最终实现了GPS数据采集及处理等工作,为搜查救援、事故定位等工作提供了技术依据。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

FPGA(Field-Programmable Gate Array)即现场可编程门阵列,是一种硬件可重构的体系结构,以其并行处理能力强、开发周期短、逻辑可实时改变等优势,在数字信号处理、图像处理、通信等多个领域得到了广...

关键字: FPGA 现场可编程门阵列

在硬件描述语言(HDL)如Verilog中,浮点数的处理一直是一个复杂且富有挑战性的领域。尽管浮点数在算法和数学计算中广泛使用,但在硬件实现中,特别是使用Verilog进行FPGA(现场可编程门阵列)或ASIC(专用集成...

关键字: Verilog 硬件描述语言

在FPGA(现场可编程门阵列)的广阔应用领域中,数学运算作为其核心功能之一,对于实现高效、精准的数据处理至关重要。在FPGA的数学运算体系中,浮点数与定点数是两种关键的数字表示方式,它们各有特点,适用于不同的应用场景。本...

关键字: FPGA 现场可编程门阵列 浮点数

在FPGA(现场可编程门阵列)设计中,性能和资源利用率的量化是衡量设计质量和效率的关键指标。通过精确量化这些指标,设计者可以评估设计的实际效果,进而对设计进行优化和改进。本文将深入探讨FPGA设计中性能与资源利用率的量化...

关键字: FPGA设计 现场可编程门阵列

在当今的高科技时代,FPGA(现场可编程门阵列)作为一种高度灵活且功能强大的半导体器件,在通信、数据处理、图像处理等众多领域发挥着核心作用。然而,随着FPGA性能的不断提升,其功耗也随之增加,导致散热问题日益凸显。散热设...

关键字: FPGA散热设计 现场可编程门阵列

在FPGA(现场可编程门阵列)设计中,层次结构的优化是提升系统性能、简化设计复杂度以及加速开发流程的重要手段。通过减少设计层次结构,我们可以显著简化信号路由、降低时序分析的复杂性,并可能直接提升系统的整体性能。本文将深入...

关键字: FPGA设计 现场可编程门阵列

在现代电子系统设计中,FPGA(现场可编程门阵列)已成为实现高性能系统的核心组件。然而,仅仅依靠FPGA的硬件特性并不足以充分发挥其性能潜力。综合过程,作为将高级设计描述转化为硬件实现的关键步骤,对FPGA的性能有着至关...

关键字: FPGA 现场可编程门阵列 综合过程

Verilog作为一种广泛使用的硬件描述语言(HDL),在数字电路设计和验证中扮演着核心角色。掌握Verilog中的表达式与运算符是编写高效、可维护代码的关键。本文将详细介绍Verilog中的表达式构成、运算符分类及其使...

关键字: Verilog 硬件描述语言 HDL

在Verilog硬件描述语言中,函数(Function)和任务(Task)是两种非常重要的构造,它们为设计者提供了强大的工具来组织代码、复用逻辑以及提高设计的可读性和可维护性。本文将深入探讨Verilog中函数与任务的概...

关键字: Verilog Function 硬件描述语言

在数字电路与系统设计中,Verilog作为一种硬件描述语言(HDL),扮演着至关重要的角色。它允许设计师以文本形式描述电路的行为和结构,进而通过仿真和综合工具验证设计的正确性。模块(Module)和接口(Interfac...

关键字: 硬件描述语言 Verilog
关闭