0 引言
随着信息社会的到来,人类的生产方式、生活方式以及工作方式也随着现代技术的不断发展而发生变化。无论在民用还是军用方面,都需要一种可以在移动中实时、大容量、不间断地传递语音、数据、动态图像等多媒体信息的卫星天线跟踪系统的出现。因此,机动性能强、抗干扰能力强、保密性强的卫星通信系统理所当然地成为了当前移动通信研究领域的热点与重点。
本文所介绍的基于XScale微处理器的“动中通”移动卫星天线控制系统,能够在各种条件下保证天线高精度地对准目标卫星,准确而快速实现平台天线和卫星之间的实时通信。由于采用了嵌入式控制系统进行开发,该卫星移动天线控制系统体积小,性价比优良,实时性好。
1 系统总体设计
1.1 总体方案
采用“开环稳定+闭环跟踪”的控制方案。总体思想如下:通过GPS接收机得出载体方位信息,使用姿态传感器敏感载体的姿态角,快速初始对准卫星,将惯性角速率陀螺仪作为电机伺服控制的反馈元件,敏感载体运动过程中天线平台在方位和俯仰方向的变化,通过反馈补偿保证载体运动过程中平台的稳定。同时,为克服载体姿态变化快、幅度大,以及陀螺的漂移和电机的特性等诸多复杂因素的影响,满足卫星通信对跟踪精度的要求,在陀螺稳定的基础上还配以电平信号步进跟踪以达到高精度稳定跟踪目标卫星的目的。
采用方位和俯仰两轴控制,虽可以避免三轴控制的复杂性,但是天线俯仰轴相对于水平面的横滚变化却无法消除。该变化对螺旋天线、平板天线影响不大,但是会影响抛物面天线接收信号的强度。这时可以在两轴稳定控制的基础上增加极化轴,用电机寻找最佳极化角度。
1.2 嵌入式系统组成
嵌入式系统设计是本文的重点内容。嵌入式系统是一种将嵌入了软件的计算机硬件作为其最重要的一部分的系统。它是一种专用于某个应用或者产品的基于计算机的系统,既可以是一个独立的系统,也可以是更大系统的一部分[1]。总体而言,一个嵌入式系统有三个主要组成部分:支撑硬件、主应用软件和实时操作系统(RTOS)。实时操作系统和主应用软件集成于计算机硬件系统之中,也就是软件与硬件的一体化。软件和硬件之间由BSP层(板极支持包)连接。嵌入式系统的体系结构如图2所示:
1.3 硬件支持
设计中首先要考虑的是如何使操作系统能更有效的管理资源并支持多任务环境。为了移植Windows CE操作系统与开发相关的程序,我们选用基于Intel XScale PXA255处理器的高端嵌入式解决方案XSBASE255作为实验平台。
该开发板具有我们系统实验所需的大部分硬件配置。同时,硬件设备厂商为客户提供了Windows CE.NET下PXA255的BSP,所以在硬件扩展加以改动时,可以很方便的进行BSP开发,只需对现有的源代码进行修改。
Intel XScale PXA255是32位RISC处理器,支持ARMv5TE指令集,采用7级超流水线,32KB指令缓存和32KB数据缓存,主频为400MHz,具有MMU(Memory Management Unit)。XSBASE255采用两片16MB的Flash Rom提供了32MB的非易失存储,采用两片32MB SDRAM组成64MB作为主内存。引导程序、Image等所有的软件都是存储在Flash中。同时,PXA255提供众多的外设接口为开发提供了极大的扩展性和适应性。
2 系统软件实现
2.1 软件支持
在嵌入式计算机应用中使用实时操作系统,可使控制系统的实时性得到保证,同时良好的多任务规划设计及根据需求对软件进行裁剪,有助于提高系统的稳定性和可靠性。
Microsoft Windows CE是一个开放的、可裁剪的、32位的实时嵌入式窗口操作系统。可以工作在12种不同的处理器体系结构、180余种CPU上;紧凑、高效和可扩展的特性,使它适用于各种嵌入式系统和产品。拥有多线程、多任务、确定性的实时、完全抢占式优先级的操作系统环境,专门面向只有有限资源的硬件系统[2]。同时,它的模块化设计方式使得系统开发人员和应用开发人员能够为多种多样的产品来定制它。
Windows CE内核是Windows CE操作系统的核心。系统运行时,Windows CE的内核表现为NK.EXE进程。NK.EXE是所有基于Windows CE的系统中都存在的核心进程,它实现了Win32 API核心进程创建加载、线程调度、中断处理和内存管理等核心功能[3]。
当Windows CE加载一个应用程序时,它就产生了一个进程。多个进程使用户可以同时工作于多个应用程序,而多个线程可以使一个应用程序同时完成多个任务。在任务调度过程,内核维护一个当前操作系统所有线程的优先级列表。每个进程可能包含多个线程,而每一个线程都是一个可执行单元。调度系统控制这些执行单元的执行顺序,并允许他们相互之间以可预测的方式交换数据[4]。当中断发生时,调度系统重新排列所有线程的优先级。
下面是一些与调度有关的主要函数介绍[5]:
1、MakeRunIfNeeded(HANDLE hth)函数:主要功能是在需要时调度线程;
2、MakeRun(PTHREAD pth)函数:如果当前没有可运行的线程,或者指定的线程pth是优先级最高的线程,那么把pth插入到可运行队列的最前面,并判断是否需要重新修改调度策略;
3、RunqDequeue(PTHREAD pth,DWORD cprio)函数:从运行队列中删除一个线程;
4、SleepqDequeue(PTHREAD pth)函数:把一个线程从睡眠队列中删除;
5、ThreadSleep(DWORD time)函数:让线程睡眠一段时间。