1、引言
飞行控制系统的两个主要功能是:飞行和增稳控制、导航和任务控制。飞机导航就是引导飞机按照预定航线飞向目标。导航的基本任务就是确定飞机在飞行中的位置和飞行方向。GPS即全球定位系统,是适合微小型飞机的一种重要导航系统。飞行控制系统将根据航路点的经纬度坐标、序号、各航段飞行速度、高度、各航路点半径等参数设置确定的任务航线,通过GPS 卫星定位接收机获取飞机当前位置信息,经 CPU 运算后通过飞行控制系统,控制飞机按航路点序号已设定的速度和高度顺序飞行。
GPS通过串口与飞控计算机实现数据通信,下面将具体介绍如何实现GPS与飞控计算机的串口通信。
2、串行通信
每台PC都配有串行端口,以便与外部串行设备之间进行通信。串行端口的本质功能是作为芯片和串行设备之间的编码转换器。当数据从芯片经过串行端口发送出去时,字节数据被转换为串行的位。在接收数据时,串行的位将被转换为字节数据。GPS提供串行通信接口,串行通信参数为:波特率=4800bps,数 据位=8位,开始位=l位,停止位=l位,无奇偶校验。
3、GPS数据格式
工程所使用的是e-Compass E511GPS模块,它是12通道的GPS接收机模块,同时可以跟踪多达12颗GPS卫星,跟踪性能优越,从而能够快速的定位。E511接收机模块功耗非 常小,数据更新率为每秒一次,其优良的性能既能够满足陆地导航的灵敏度需求,也能够满足飞行器的动态需求。E511所输出的数据是以美国国家海洋电子协会 (National Marine ElectroNIcs Association)的NMEA0183 ASCII 码接口协议为基础的。此语句包括:GPGGA,GPGSA,GPGSV,GPRMC,GPGLL,GPVTG。而在我们实际使用时可通过NMEA 0183 输入语句对输出语句进行选择,也可对波特率进行更改[1]。本工程中,最终只需取出高度、经度、纬度、速度和接收信号的时间等信息,所以只要求获得 GPGGA和GPRMC语句即可。现以GPGGA语句为例,介绍它的语句格式:$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh
$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>,*hh
<1>UTC时间,hhmmss.dd (时分秒)格式
<2>纬度ddmm.mmmm(度分)格式(前面的0也被传输)
<3>纬度半球N(北半球)或S(南半球)
<4>经度dddmm.mmmm(度分)格式(前面的0也被传输)
<5>经度半球E(东经)或S(西经)
<6>GPS状态:0=未定位,1=定位
<7>正在使用解算位置的卫星数量(00~12)(前面的0也将被传输)
<8>HDOP水平精度因子(0.5~99.9)
<9>海拔高度(-9999.9~99999.9)
<10>地球托球面相对大地水准面的高度
<11>差分时间(从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空)
<12>差分站ID号0000~1023(前面的0也将被传输,如果不是差分定位将为空)
表1 GPGGA语句信息说明

4、GPS信号的接收模块设计
接收模块是基于PHILIP公司LPC2138进行研制的,它是基于ARM7TDMI-S核,采用单电源供电、LQFP64封装,有两个符合 `550工业标准的异步串行口(UART)UART0和UART1。它具有16字节收发FIFO;接收器FIFO触发点可为1,4,8和14字节;内置波 特率发生器等特性。对于串口接收既可以采用查询方式进行处理,也可以采用中断方式进行处理,本文采用中断处理方式以减少接收程序对CPU时间的占用。具体 步骤为:首先进行串口初始化,包括管脚的选择、波特率的设置、设置接收的数据格式、允许中断、设置FIFO、建立数据队列等[2]。
串口的接收过程可采用查询方式或中断方式,但查询方式耗时较长,有可能延长20ms的程序运行周期,不满足实时性要求,所以选择使用中断方式以减少 驱动程序对CPU时间的占用[4]。由于UART可以同时存在几个中断源申请中断的情况,而UART的硬件仅指示出其中的一个中断源,为减少多次进入中断 而引起的开销,中断中使用了while循环判断UART的中断是否处理完毕。中断服务程序流程图如图1:

图1 串口中断服务程序
在中断处理程序中先后使用了两种方式进行数据的接收,一是使用uC/OS-II实时操作系统提供的信号量机制。信号量实际上是一种约定机制,在多任 务内核中普遍使用。 信号像是一把钥匙,任务要运行下去,得先拿到这把钥匙。如果信号已被别的任务占用,该任务只得被挂起,直到信号被当前使用者释放[3]。当中断源为接收数 据可用或接收字符超时,表明UART的FIFO中有数据,中断程序发送信号量给接收任务,以便接收数据的任务可以接收数据。接收任务得到这个信号量,则将 接收器缓存寄存器UxRBR中的数据读出。此方法对普通的串口接收来说不失为一种好方法,但是此方法有一种致命的缺陷,当没有接收数据时,程序会一直等待中断服务程序发出信号量,从而会影响整个任务的执行状态,比如,当串口接收与AD采集、PWM采集在同一任务中运行时,当串口没有接收数据时,AD采集与 PWM采集将无法进行,从而影响了整个任务状态。第二种方法是采用数据队列,数据队列一般用于数据缓存,且一般用于平衡速率不同的两个部件,使快速部件无需等待慢速部件。本数据队列设置为先入先出(FIFO),当中断服务程序接收到数据后,接收程序即从串口接收缓冲区中UxRBR将数据读到队列缓冲区 UART1GetBuf[]中。其流程如图2:

图2 串口接收程序流程图
5、GPS信号的提取
根据GPS数据格式可以看出,一个完整的NEMA0183语句是从起始符“$”到终止符 “
6、结束语
通过本方法,可以将GPS定位导航信息从GPS接收机完整接收,并将所需信息从中提取,从而为实现飞行控制系统的导航控制提供数据采集。其实,GPS接收并提取的数据也可以为其它应用系统所应用,如电子地图、车载导航、智能交通、野外勘探等方面。只是在数据提取方面有所不同,经过修改,完全可以应用到其中。
参考文献
[1] 李洪涛,许国昌等。GPS应用程序设计。北京:科学出版社,1999
[2] 周立功 ARM微控制器基础与实战 北京:航空航天大学出版社, 2003.11
[3] Labrosse J J. 嵌入式实时操作系统uC/OS-II(邵贝贝等译). 北京:北京航空航天大学出版社,2003
[4] Kernighan Brain W,Dennis M Ritchie. The C Programming Language. 2 edition.Englewood Cliffs, New Jersey:Prentice Hall,1998
[5] 杨贵军,武文波。PDA环境下GPS信号的接收和处理方法。单片机与嵌入式系统应用,2005(9):27~29




