基于ARM与FPGA的便携式GNSS信号采集回放系统设计

作者:张婉明,李 琦,李金海,汪 峰,高 宇,董 盟 文章来源:2016年电子技术应用第10期

摘 要: 设计了一种基于ARM与FPGA的便携式GNSS导航信号采集回放系统。该系统可采集复杂情况下的导航卫星信号,并且增益可控,为导航接收机测试提供了特定的信号源。系统将导航卫星信号经射频电路转换为数字中频信号,通过FPGA处理后保存至SATA硬盘。ARM处理器作为监控端发送指令至FPGA,控制FPGA进行数据采集与回放,同时接收监控接收机串口发送的报文,提取载噪比信息,并绘制载噪比柱状图。该系统ARM端基于嵌入式Linux系统开发,采用Qt4设计用户图形界面,可扩展及可移植性强,为系统的后续开发提供了保障。实验结果表明,该系统信号质量满足要求,ARM监控端数据处理时间在200 ms~500 ms之间,实时性良好。

0 引言

目前,GNSS卫星导航定位系统的应用越来越广泛,包括中国、美国、欧盟、俄罗斯等世界主要强国都在积极布置自己的全球卫星导航定位系统[1]。虽然中国在卫星导航方面起步较晚,但是技术发展迅猛,随着中国的北斗2号卫星导航系统的逐步完善,使得中国成为继美俄之后第三个拥有完整的导航系统的国家。国内市场对导航接收机的需求也越来越多,设计高性能、多模式、低价位的导航接收机已成为研究热点。作为导航接收机研发过程中必不可少的设备,采集回放系统具有广阔的应用前景。所以,迫切需要设计一种价格低廉、便携性好、界面直观、可操作性强的GNSS导航信号采集回放系统。

综上,该系统的监控端采用了基于CortexA8系列的ARM处理器,该处理器同时兼顾了成本与性能的要求,可设计美观的图形化操作界面。该系统工作于BD2-B1和GPS-L1两个频点,便携性好,界面直观,可通过按键或触摸屏两种方式操作,同时可随时采集户外复杂环境下的导航卫星信号,极大地提高了导航接收机的开发效率和质量。

1 系统结构

本系统整体分为射频模块与基带模块两大部分。其中,射频模块负责接收和发送射频信号,并将射频信号转换为基带信号后交由基带模块处理;基带模块完成用户交互、接口对接等功能。此外还包括SSD硬盘(数据存储的介质,存放采集和回放的数据)以及对外各种接口。系统的结构组成如图1所示。

2 系统硬件设计

2.1 射频模块

射频模块可分为上变频与下变频两大部分,下变频部分的核心器件采用MAX2769B芯片,该芯片是一款多模导航接收机芯片,适用于GPS/北斗/格洛纳斯/伽利略卫星导航定位系统。上变频部分的增益控制器件采用了HMC472LP4数控衰减芯片,该衰减芯片步进0.5 dB,最高衰减31.5 dB,分别由V1~V6 6个引脚控制,低电平有效。上下变频部分均采用C8051F230单片机进行配置,下变频部分采用GPIO口模拟SPI接口对MAX2769B芯片写配置字,配置相关参数;上变频模块通过控制12个GPIO口电平的高低配置增益。同时,射频模块的上下变频部分均采用杭州中科微电子的ATGM332D导航接收机作为监控接收机,上下变频模块分别将监控接收机接收的报文信息通过串口送入FPGA模块,由FPGA选择输出至ARM端。图2为射频模块原理图[2]。

2.2 基带模块

基带模块可以分为FPGA模块、ARM模块及基带底板3个部分。基带底板是各模块连接的桥梁,并完成除ARM、FPGA之外的所有功能,各模块均以接插件形式与底板连接。这里创新性地采用了SSD硬盘进行数据存储,满足了设备长时间采集数据对大容量空间的需求。由于系统复杂性高,本文对于基带底板子模块只介绍电源与时钟电路的设计方案。

2.2.1 FPGA模块

FPGA采用了Xilinx 的XC7K325TFFG900-2型FPGA(下文简称K7)。K7系列是Xilinx最新推出的面向中低端市场的低价位、高性能FPGA[3]。K7核心板主要负责对接射频数据接口和高速收发接口,FPGA内部逻辑结构如图3所示,根据功能大致分为3个部分:控制单元、SATA控制器、UART分线单元。FPGA的控制单元主要负责系统的差错控制及与ARM端的通信。这里ARM与FPGA是通过SMC总线进行通信的,需要在Linux内核中编写K7处理器的SMC总线驱动[4]。

2.2.2 ARM模块

ARM模块采用Atmel SAMA5D31处理器,该处理器基于Cortex-A5架构,主频528 MHz,内部集成了浮点运算单元,是一款高性能、低功耗的嵌入式处理器。ARM模块集成了256 MB ROM、256 MB RAM,保证性能的同时降低了开发成本。对于本系统而言,选用该模块是考虑了性能、功耗、价位等多种综合因素的结果[5]。ARM作为主控芯片控制整个系统流程,图4所示为ARM与其他部件的连接关系图。

2.2.3 基带底板(电源与时钟)

本设计采用5 V~42 V宽压电源输入,根据各个器件工作时所需电流的大小,采用12 V/5 A适配器作为输入电源,整体电源分配如图5所示。

整个系统的时钟源有2个,均为16.368 MHz的有源晶振,分别位于基带底板(主时钟)、射频板(备用时钟)。正常情况下使用主时钟,在特殊应用下使用备用时钟。除16.368 MHz时钟外,ARM具有自身的无源晶振作为自己的时钟源。模块通信时均采用异步通信方式,以避免钟差产生的错误。图6所示为系统的时钟设计方案。

3 系统软件设计

3.1 FPGA程序设计

本系统在采集数据时,FPGA接收来自下变频模块的8位AD数字信号(L1+B1),经过处理后通过SATA接口存入到SSD硬盘中,完成数据的采集与存储[6];回放时,FPGA从SSD硬盘中读取数据,经过DA数模转换后,送入上变频模块完成信号的播发[7]。在卫星信号采集回放时,FPGA要接收来自上下变频模块监控接收机的UART信息,确定采集和播发的信号是否正常。

本设计采用VHDL语言[8]对需要实现的电路进行描述,Xilinx的K7系列FPGA内部集成的高速收发器(GTX)数目高达16个,单个GTX的速率能达到12.5 Gb/s,GTX是实现SATA协议的核心器件,用于实现SATA2.0控制器绰绰有余。本文采用K7实现了SATA协议的物理层、链路层和传输层,主要包括完成链路初始化、帧的封装、帧的发送/暂停/结束控制、帧的解析与校验。SATA协议的传输层由万兆位级收发器GTX、OBB控制模块和接口传输率选择模块共同实现。GTX的主要功能包括16B/20B编码/解码、串并/并串转换、逗点检测、时钟修正、预测重和线性均衡等。OBB控制模块用于硬盘的上电过程或者硬件的复位过程,同时与SATA控制器建立通信链路。

3.2 ARM程序设计

ARM模块作为本系统的核心控制模块,负责各个任务的调度,加之需要友好的用户交互界面,因此采用嵌入式Linux作为ARM模块的操作系统。根据ARM任务可以大致分为:用户交互操作、模块指令配置、数据文件管理、模块状态监控。

首先需要在Linux内核中实现相应接口的驱动程序,除SMC总线驱动外,Atmel官方提供的linux3.6.9版本的内核中已经提供了其他接口的驱动程序[9],只需在设备树文件中引出相应的设备节点即可。Atmel官方同时提供了SPI、I2C、GPIO接口的测试程序,可以直接移植相应的程序到Qt4中用于实现相应的功能。这里需要特别强调的是UART接口,在Qt4中没有特定的用于串口通信的类,本系统参考第三方的qextserialport类,自定义一个PortSettings类型的结构体,用于存储串口参数。由于Linux系统不支持串口中断方式,所以这里需要新建一个定时器QTimer,定时1 s,并在程序中实现串口发送与接收的同步。接下来调用open()函数打开串口,并调用bytesAvailable()函数判断串口数据是否为零,若串口缓冲中有数据,则调用readAll()函数将缓冲区中所有数据读取到QByteArray类型变量中[10]。

要实现实时接收机监控,需要解析串口接收到的报文数据,并提取载噪比信息,绘制柱状图用于实时显示信号质量。本系统针对Qt4用户图形界面,提出了一种全新的报文解析方式,首先需要将QByteArray型变量转换为QString型,并调用replace()函数将报文中的星号、回车符全部替换为逗号,并以逗号为分隔符,调用split()函数对报文进行分割,用查询的方式查找$GPGSV字段,将卫星编号以及载噪比保存到数组中。根据数组中的数据,采用第三方的QCustomPlot类绘制载噪比柱状图,首先调用setLabel函数设置横纵坐标名称,并使用QCustomPlot提供的QCPBars来表示柱状图,调用setData()函数对每个柱子进行赋值,然后调用addPlittable()函数将柱状图添加到Widget上,横坐标赋值需要调用setTickVector()及setTickVectorLabels()函数,最后调用replot()重绘柱状图,保证柱状图实时更新。

4 实验与验证

由于Qt4在界面设计中的优越性,因此可以随时按照自己的需求改变界面样式[11]。

为了验证ARM端程序是否发生过串口阻塞现象及是否满足实时性要求,对每帧报文的处理时间进行分析。将程序移植到嵌入式开发平台上,使用labsat循环回放一段卫星的中频信号,该中频信号包含GPS与BD2的报文信息,经过3.5 h的连续测试得到一组数据,将该数据用MATLAB分析后,得到图7所示结果。

从图7中可以清楚地看到,报文解析及绘图时间多在250 ms左右,偶尔突发时刻会达到550 ms的峰值,处理时间在1 s之内,完全满足实时性要求。

5 结束语

本文设计的便携式GNSS导航信号采集回放系统实现了对卫星中频数据的保存与回放,其监控端采用ARM处理平台,编写了针对K7型FPGA的SMC总线驱动,并设计了相应的图形化操作界面,节约成本的同时保持了设备良好的可操作性,同时采用SSD作为存储介质,保障了设备长时间采集的要求。这里用MATLAB对中频信号的频谱和功率谱分析后得知,其回放的信号质量满足导航接收机测试的需求,同时其保存的中频数据为信号捕获与跟踪算法的研究提供了可靠的原始数据,为研制高性能、低价位的导航接收机奠定了基础。