基于ARM9的快速对星装置设计与实现
2010-05-13伍文平,王小兵
伍文平,王小兵
摘 要:该装置以ARM9为核心,采用Windows CE多线程编程技术,分别采集GPS和电子罗盘等传感器件数据,加以综合计算,得到卫星通信天线对星的理论值与实际值,调整天线指向使实际值与理论值一致,即可完成对星。使用该装置能够明显缩短对星时间,平均对星时间由原来不可预知,缩短到2 min以内,显著提高了通信效能。该装置在天线方位角的磁偏角修正方面具有先进性。
关键词:电子罗盘;对星;磁偏角;ARM9
中图分类号:TP216文献标识码:A
文章编号:1004-373X(2009)19-053-03
Design and Implement of Quickly Aimed the Satellite Device Based on ARM9
WU Wenping1,WANG Xiaobing2
(1.Uint 69046,Urumqi,830002;2.Xinjiang Mobile Communication Corp.,Urumqi,830063,China)
Abstract:This device based on ARM9 collects the data from GPS and compass,then the theoretic value and the real value can obtain by computing the data.The antenna can be rotated to make the real value equal to the theoretic value,then the antenna is aimed at the satellite accurately.Using this device can reduce the time of aim the satellite,the average time for aim the satellite can be reduced from the unpredictable period to 2 minutes,then the efficiency of communication is increased markedly.The device is advanced on the azimuthal angle revised by the declination.
Keywords:compass;aimed the satellite;declination;ARM9
0 引 言
大中型卫星站均具有相应的、完善的天线跟踪伺服系统,天线伺服跟踪系统依据信标信号强弱,决定天线转向,驱动天线旋转,达到准确对星。随着通信技术和电子技术的发展,小型卫星站如车载站、便携站受机动性能和便携性能的局限,不可能采用大中型卫星站才能使用的伺服跟踪系统,采用不同原理,开发适用于小型卫星站天线的对星装置,具有现实意义。
1 系统概述
该装置通过GPS采集地理信息、电子罗盘采集姿态信息,根据GPS采集的地理信息,结合通信卫星位置,计算出对星所需要的标准方位、俯仰、极化参数,同时计算出当地、当年磁偏角数据;通过采集电子罗盘数据,得到初步方位、俯仰、极化数据,其中俯仰和极化均为天线实际指向值,但是方位值是以磁北为标准测量值;通过GPS得到的磁偏角数据,对从电子罗盘得到的以磁北为标准的方位值进行修正,得到比较准确的、以真北为标准的真实方位数据。其系统结构如图1所示,其中基于EVC4平台的多线程应用程序流程结构如图2所示。
图1 系统结构构图
图2 简要程序流程图
2 硬件设计
本装置在设计上,选择S3C2440作为主控制器构成硬件平台,利用其丰富的外部接口和高速处理能力,达到实时采集数据、及时处理数据、快速传输数据、不附加额外接口设备的目的。由于该装置需要测量的参数多,GPS、电子罗盘统一采用RS 232接口,保证了测量数据精度和接口一致性。供电统一采用+5 V锂电池电源供电。
3 软件设计
本装置采用ARM9作为主控制器,以Windows CE.net操作系统作为系统平台,使用EVC4开发环境作为开发工具,软件采用多线程结构,MFC和API编程技术,实时采集传感器数据,计算修正方位值,达到准确对星的目的。
3.1 总体程序设计
本装置程序采用多线程结构,在主线程(用户接口线程)的基础上,增加两个辅助线程(工作者线程),辅助线程负责处理数据采集,主线程负责界面响应、数据融合、数据显示。线程处理采用API,而不采用MFC编程,增加了程序的通用性。程序中还使用SuspendThread挂起线程、ResumeThread恢复线程、ExitThread退出线程[1,2]。
线程同步采用临界区域(也称关键区域,即CRITICALSECTION)措施,首先用CRITICALSECTION申明一个全局变量,再调用InitializeCriticalSection初始化,使用EnterCriticalSection进入关键区域,使用LeaveCriticalSection离开关键区域,使用DeleteCriticalSection 函数删除关键区域[1,2]。其关键部分代码如下:
CRITICALSECTION gcs;
DWORD WINAPI GpsThreadProc(LPVOID);
DWORD WINAPI CompassThreadProc(LPVOID);
void MainDlg::Starton()
{ …
HANDLE hThread1,hThread2;
DWORD dwThreadId1,dwThreadId2;
hThread1 = CreateThread(NULL,0,GpsThreadProc,NULL,0,&dwThreadId1;);
hThread2 = CreateThread(NULL,0,CompassThreadProc,NULL,0,&dwThreadId2;);
if((hThread1 != NULL)&( hThread2 != NULL))
{…//创建线程后的一些初始化、计算、显示等工作}
InitializeCriticalSection(&gcs;);
WaitForSingleObject(hThread1,INFINITE);
WaitForSingleObject(hThread2,INFINITE);
DeleteCriticalSection(&gcs;);
CloseHandle(hThread1);
CloseHandle(hThread2);
…
}
3.2 HMR3000程序设计
电子罗盘数据输出格式满足NMEA0183通信协议规范,根据需求选用$PTNTHPR语句,每秒更新30次,基本满足实时测量的要求。$PTNTHPR语句的数据格式为[3,4]:
$PTNTHPR,<1>,<2>,<3>,<4>,<5>,<6>*hh
各字段含义为:<1>表示方位值,<2>表示方位状态,<3>表示俯仰值,<4>表示俯仰状态, <5>表示横滚值,<6>表示横滚状态,hh表示校验和。采集数据程序在判断各参数状态正常的基础上,从输出语句中提取对应参数值。其线程函数部分代码如下:
DWORD WINAPI CompassThreadProc(LPVOID)
{…
EnterCriticalSection(&gcs;);
ucTemp=ReadByte();
if(ucTemp=′$′) //判断语句开始
{iAZ=0;iEL=0;iPOL=0;numberComa=0;}//变量初始化
if(ucTemp1=′,′)
{numberComa++;}//逗号加一,根据逗号数目划分字段
If((numberComa==1)&(ucTemp!=′,′))//读取方位数据
{AZ[iAZ]=ucTemp;iAZ++;}
If((numberComa==2)&(ucTemp!=′,′))//读取方位状态
{MarkAZ=ucTemp;}
…//读取其他参数并处理
LeaveCriticalSection(&gcs;);
return 0;
}
3.3 GPS模块程序设计
GPS模块数据输出格式也满足NMEA0183通信协议规范,根据需求选用$GPRMC语句[5],默认更新速率。$GPRMC语句的数据格式为:
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,*hh。
各字段含义为:<1>表示方位值,<2>表示方位状态,<3>表示俯仰值,<4>表示俯仰状态, <5>表示横滚值,<6>表示横滚状态。采集数据程序在判断各参数状态正常的基础上,从输出语句中提取对应参数值。其线程函数部分代码如下:
DWORD WINAPI GpsThreadProc(LPVOID)
{…
EnterCriticalSection(&gcs;);
ucTemp=ReadByte();
if(ucTemp==′$′)
{iLog=0;iLat=0;numberComa=0;}
if(ucTemp==′,′)
{numberComa++;}
if((numberComa==2)&(ucTemp!=′,′)) //读取标示位,为A则数据有效
{iFlag=ucTemp;}
if((numberComa==3)&(ucTemp!=′,′))//读取纬度数据
{Lat[iLat]=ucTemp;iLat++;}
if((numberComa==5)&(ucTemp!=′,′))//读取经度数据
{Log[iLog]=ucTemp;iLog++;}
…//读取其他数据并处理
LeaveCriticalSection(&gcs;);
return 0;…
}
3.4 对星参数理论值计算
卫星通信中重要的一步就是卫星通信天线准确对准通信卫星。对星需要三个参数:方位、俯仰、极化。下面分别是三个参数的计算公式[6],其中Ψc是卫星波束中心经度,Ψs为卫星的经度,Ψg是接收地经度,θ为接收地纬度。
卫星通信天线方位角计算公式:
AZ=arctg[tg(Ψs -Ψg)/sin θ]
(1)
俯仰角计算公式:
EL=arctgcos(Ψs-Ψg)cos θ-0.151 721-[cos(Ψs-Ψg)cos θ]2
(2)
极化角计算公式1:
POL=arctg[sin(Ψs-Ψg)/tg θ]
(3)
极化角计算公式2:
POL=arctg[sin(Ψc-Ψg)/tg θ]
(4)
极化角通常位于式(3)和式(4)的计算值之间,为简化计算常采用式(3)作为极化角计算公式使用。
经过GPS采集得到接收地经度、纬度,结合卫星经度,采用C语言提供的数学函数可以很简便地计算出天线准确对星需要的三个参数:方位、俯仰、极化。为对星操作提供理论标准值,将对星操作简化为比对理论标准值,调整天线,使实际值与理论值完全一致,从而完成对星任务。
3.5 方位角修正程序设计
电子罗盘测量得到的是天线实际指向值,由于电子罗盘是根据地磁场测量出方位值,此方位值实际是以磁北为标准的方位值,而理论值是以真北为标准的方位值,这样在电子罗盘测量值和理论计算值之间存在一个差值,此差值即为磁偏角。要使电子罗盘测量的方位值代表以真北为标准的方位值,必须在电子罗盘测量的数据基础上进行磁偏角的修正[7]。
根据IGRF2005地磁场模型,利用NOAA的NGDC提供的磁偏角计算程序,逐一计算覆盖我国领土及周边的磁偏角数据,其纬度为北纬10°~50°,经度为东经70°~140°,构成41×71的二维数组,根据经度、纬度数据提取磁偏角数据,与采集的罗盘数据进行运算,修正罗盘方位值,从而得到代表物体指向的比较准确的方位值。其部分代码如下所示:
fAZ=cAZ+Dec[nLat,nLog];
Double Dec[int x,int y]
{ ……
Doule DecTable[41,71]
{{23,232,233,235,235,235,233,23,23,225,222,212,212,205,198,192,183,175,167,157,147,137,127,115,105,095,085,075,065,055,047,04,033,027,022,018,015,013,012,012,012,013,017,018,022,025,028,032,035,038,04,042,043,043,042,04,037,032,025,018,01,0,-01,-022,-035,-05,-065,-082,-10,-118},…}
//磁偏角数组
Return(DecTable[x-10,y-70]);
}
从电子罗盘得到的方位数据,经过磁偏角修正,形成以真北为标准的真实方位数据,从而具有与理论对星参数比对的基础。
4 应用及结果
该装置巧妙利用GPS模块和电子罗盘模块,在分别采集模块数据的基础上,利用地理信息进行查表运算,得出当地磁偏角,利用磁偏角修正方位,得到较为准确的方位指向数据。此装置采用S3C2440ARM9芯片作为主CPU,Windows CE.Net为操作系统平台;电子罗盘选用Honeywell HMR3000,GPS选用GARMIN GPS25LVS,蘑菇头天线,单一+5 V供电,输出接口均为RS 232。该系统精度高、实时性好、界面直观,具有广泛的应用前景。某型卫星通信装备,天线口径1 m,工作于Ku波段,其半功率波瓣宽度近似计算公式为:θ=70λ/D[6],得到半功率波瓣宽度θ=1.75°;通过磁偏角修正后的电子罗盘角度指示误差为φ=±0.5°,θ≥φ,满足应用需求。2009年乌鲁木齐的磁偏角为-2.93°,如果不加磁偏角修正,其误差总和为2.93°+0.5°=3.43°,超过半功率波束宽度,无法完成对星任务。程序运行后界面如图3所示。
图3 快速对星装置程序实例
5 结 语
经过使用证明:该装置经过磁偏角修正后,可以使用于方位精度要求±0.5°、倾角和横滚经度要求±0.1°的物体位置和姿态测量。经过在昆明、喀什、北京等地实际使用测量,效果良好,平均对星时间由原来不确定减少到2 min以内(实际测量平均时间为14 min),改善效果明显。使用中注意事项:由于此装置采用的电子罗盘,利用地磁场根据磁阻传感信息计算方位的原理,因此,此装置在使用中要求尽量远离框架式建筑物、铁矿厂、铁栅栏、铁门铁窗等大型硬铁物质,避免因硬铁物质对磁力线的影响,导致测量误差大的情况出现。
参考文献
[1]高守传,聂云铭,郑静.Visual C++6.0开发指南[M].北京:人民邮电出版社,2007.
[2]明日科技.Visual C++程序开发范例宝典[M].北京:人民邮电出版社,2007.
[3]Honeywell Corp.HMR3000 Digital Compass Module User′s Guide[Z].1999.
[5]GARMIN Corp.GPS25 LP Series GPS Sensor Boards Technical Specification[Z].2000.
[6]吕海寰,蔡剑铭,甘仲民,等.卫星通信系统[M].北京:人民邮电出版社,1988.
[4]葛伟,冯桂兰,黄光伟,等.HMR3000数字罗盘在船舶导航中的应用[J].科学技术与工程,2006,6(16):2 579-2 580.
[8]黄少锋,张尊泉,邓斌.雷达图像传输天线自动控制系统的设计[J].电子技术应用,2007,33(5):86-88.
[7]吕永清,蔡亚先,程骏玲.地震仪器定向与磁偏角[J].大地测量与地球动力学,2006,26(2):120-122.
[9]侯志强,王祖林.车载天线定向系统设计[J].电子测量技术,2006,29(4):17-18.
[10]章大勇,吴文启,吴美平,等.基于测姿GPS及电子罗盘组合的姿态估计算法[J].中国航海,2007(4):33-36,49.