基于DSP+FPGA的激光半主动导弹飞控软件设计
2019-12-02
(陕西中天火箭技术股份有限公司,西安 710000)
0 引言
弹载飞控系统通常由传感器(惯组、导引头)、飞控计算机及其内嵌飞控软件、执行机构(舵机)组成。飞控计算机通过内嵌的飞控软件,处理传感器数据进行舵指令计算,引导和控制导弹沿方案弹道飞行,使得在没有人为干预情况下完成自动导航、目标识别、精确控制等智能化任务[1],飞控软件是飞控系统的核心部分。
飞控软件实时性强,软件的主任务周期时间有严格限制,每周期内必须完成与各种外设的通讯、舵指令计算、数据遥测等任务[2]。飞控软件可靠性要求高,飞行中如果软件出现问题,不但造成飞行失败,可能还会造成人员伤亡,飞控软件要对飞行中出现的各种可能情况做出冗余处理,保证飞行的安全。
为满足飞控软件实时性和可靠性的要求,本文从硬件和软件两方面进行协同设计[3],硬件方面飞控计算机采用DSP+FPGA结构,软件则采用模块化设计方法[4-5]。
1 飞控计算机原理
飞控计算机组成如图1所示,包括主机模块、FPGA模块、DC/DC模块、通信模块、输入输出开关量模块、A/D转换模块,其中主机模块由DSP和时钟电路组成,FPGA模块由通信控制逻辑模块、开关量控制模块等组成。
图1 飞控计算机原理图
DSP采用TI公司生产的TMS320 C6713核心处理器,具有快速数据处理以及高精度和宽动态范围的浮点计算能力,保证了飞控软件的计算速度和精度,并且外设接口丰富,可实现飞控系统的小型化。DSP通过EMIF总线与FPGA相连,使FPGA充当一个协处理器,FPGA采用成熟的IP核,通过操作寄存器完成接收帧头、帧尾、帧长、校验方式、发送帧头、帧尾、波特率的配置,FPGA根据配置对通信数据进行判断,如果数据格式正确,则将数据存储在相应的fifo,并将接收完成状态寄存器置为1,否则将数据丢弃,接收完成状态寄存器置为0。DPS只需查询接收完成状态寄存器,利用与协处理器的接口函数就可实现数据接收和发送。
DSP+FPGA的硬件结构利用了FPGA的控制能力和高度并行化数据处理方面的优势,为DSP进行流程控制、导航和制导控制算法解算提供了更多的时间余量,减少了DSP计算压力,保证了飞控软件的实时性。
2 飞控软件功能和性能
某激光制导弹飞控软件包括测试工作模式和正常工作模式。测试工作模式主要用于导弹交付用户之后,定期对弹上设备的功能测试、零位测试和校准,正常工作模式完成弹的发射和控制。
正常工作模式由离轨前准备阶段和离轨后自主飞行阶段组成。离轨前准备阶段主要完成飞控计算机硬件初始化、弹上设备自检、传递对准、离轨信号采集和判断;离轨后自主飞行阶段包括导航计算、制导控制指令计算两部分,其中制导控制系统包括中制导阶段、中末制导交接阶段、末制导阶段。
某激光制导弹飞控软件正常模式流程图如图2所示。
图2 飞控软件正常模式流程图
导弹总体方案要求飞控软件严格按照图2所示流程进行任务管理和调度,并且要求软件实时性强。DSP每1ms要查询一次外部通讯接口接收完成状态寄存器,并完成弹上设备数据的接收和解析;每T1周期执行一次导航、制导与控制算法计算,实现姿态和过载回路控制;每T2周期向数据记录设备发送一帧遥测数据。
由飞控软件功能和性能要求可知,飞控软件功能复杂、实时性强。为了程序易于编写、调试和维护,提高软件的可靠性,并且便于功能扩展,采用了模块化设计方法。
3 飞控软件模块化设计
飞控软件总的架构包括硬件配置、定时中断和主程序三部分。飞控计算机上电后立即进行硬件配置且只进行一次,配置完成后进入主程序循环,一旦定时中断触发,则跳出主程序执行中断,中断执行完继续回到主程序。
硬件配置主要完成飞控计算机EMIF总线、PLL、中断周期配置和RS422通讯串口初始化。根据寄存器定义,软件可设置每个RS422通道接收帧头、帧尾、帧长、奇偶校验方式,FPGA按照设置的帧格式判断接收的数据帧是否正确,如果正确则存放fifo,否则将数据丢弃。
为了保证数据接收的实时性,飞控软件设置了1 ms定时中断函数,在中断函数顺序查询各个串口接收完成标志位,如果标志位为1,则读取fifo数据,并根据通信协议将接收的数据解析为十进制浮点数,否则继续查询下一个通信接口。
主程序主要完成导弹测试、维护和图2所示的飞控软件功能,包括测试维护、设备自检、传递对准、离轨信号判断、组合导航、制导、控制共7个模块,飞控软件架构和模块结构图如图3所示。
图3 飞控软件架构和模块结构图
1)测试维护模块:导弹交付用户之后,只有飞控计算机与发控单元通信接口,弹上其它设备通信测试口均已封闭,为了在全弹状态下,完成对弹上各设备的测试和校准,开发了飞控软件测试维护模块。该模块利用飞控计算机的转发功能,首先将接收的测试指令转发到相应弹上设备,并将设备测试结果转发给导弹测试仪,导弹测试仪对测试结果进行显示和存储,该模块实现了在不打开导弹包装箱的前提下,完成对弹上设备的测试,且操作简单、安全。飞控计算机初始化完成后T3时间内必须连续收到三帧测试指令,才能进到测试维护模块,否则进入设备自检模块开始执行图2所示软件流程。
图4.测试维护模块功能图
2)设备自检模块:采用两次问答形式完成弹上设备自检,飞控软件分别向导引头、舵机、惯组发送自检指令,通过设备返回的状态字判断自检是否正常,如果自检异常,飞控软件再发送第二帧自检指令,并将自检结果上报发控单元,发控单元根据上报的自检状态决定是继续发射流程还是终止发射流程。
3)传递对准模块:飞控软件根据接收的飞机主惯导数据和弹上传感器输出数据,利用卡尔曼滤波在规定时间内估计出弹上陀螺零位、加速度计零位,并对滤波结果进行收敛性判断,给出对准是否成功的结论,该模块包括传递对准算法、对准结果收敛性判断、传递对准结果输出三部分。
4)离轨信号判断:飞控软件采集热电池电压A/D值,并实时查询离散输入开关量(即电气分离信号),开关量为1时,即认为脱插已分离。热电池激活和脱插分离两个条件均满足时,则认为弹体离轨,飞控软件进入自主飞行阶段。为了提高软件的可靠性,避免因电器分离信号采集失败导致飞控软件无法进入自主飞行阶段,对离轨信号增加冗余判断,如果弹体传感器输出轴向过载连续100 ms均大于20 g,则也认为导弹已离轨。
5)组合导航模块:利用四元数法计算姿态矩阵,再从姿态矩阵中提取弹体的姿态,用姿态矩阵把加速度计输出的沿弹体各轴的过载信息转换到导航坐标系,然后进行位置、速度计算,并对GPS工作状态进行判断,如果GPS收星数大于4,并且通信正常,则用GPS位置修正导航计算的位置。该模块包括初始四元数计算、导航计算、GPS修正位置三部分。
6)制导模块:根据弹目距离和导引头跟踪状态,制导律计算分为中制导、中末制导交接、末制导3个部分。中制导阶段采用弹上捷联惯导作为测量设备,将弹体导向装订的目标方向;末制导阶段利用导引头信息将弹体导向目标,直至命中目标;中末交接段主要为了避免指令跳边,进行中制导到末制导的线性过渡。在飞行过程中受到天气、导航误差等因素影响,导引头会出现全程不跟踪、跟踪后丢失、丢失后又跟踪、丢失后不再跟踪等多种可能情况,飞控软件需对导引头各种工作情况做出相应的逻辑处理,保证飞行安全。制导逻辑流程图如图5所示。
图5 飞控软件制导逻辑流程图
7)控制模块:控制模块包括自动驾驶仪和舵分配两部分,自动驾驶仪由俯仰通道、偏航通道、滚转通道组成,其中俯仰/偏航采用内环为姿态角/角速度反馈、外环为过载反馈的三回路驾驶仪;滚转通道采用角速度反馈和姿态稳定的两回路驾驶仪。自动驾驶仪根据制导模块计算的过载指令和弹上传感器输出的弹体姿态、角速率、过载,分别计算出俯仰、偏航、滚转3个通道舵指令。舵分配是将驾驶仪计算的3个通道指令转换为4个舵面指令,并将指令发送给舵机,舵机进行舵面偏转,完成对弹的控制。
舵指令转换公式如上式所示,其中δx为滚转舵偏,δy为偏航舵偏,δz为俯仰舵偏,δ1~δ4分别为4个舵面指令,δ1和δ3为联动舵,两者大小相等,方向相反。
模块间数据传递关系如图6所示,飞控软件定义主惯导数据结构体、惯组传感器数据结构体、导引头数据结构体、导航计算结果结构体、制导计算结构体。模块间数据传递通过结构体指针完成,保持了模块在功能及结构方面的独立性和完整性,便于模块间的联接与分离。
图6 模块间数据传递关系图
4 飞控软件的编程
飞控软件采用汇编语言和C语言混合编程。中断向量表设置以及搬运程序bootload等对寄存器和存储器的操作采用汇编语言编写,指令占用内存少,执行速度快;飞控软件的主程序主要对数据进行操作,则采用C语言进行编程,充分利用编译器的库函数实现复杂算法的计算。软件主要包括一个定时中断函数和主函数,主函数采用switch-case跳转结构,根据发控单元指令,跳转到相应分支,程序的主要部分如下所示:
Interrupt void ExtInt1() //1ms定时中断
{
………………
DataNum=ComRev(FKaddr);//查询发控单元
if(DataNum==FKLen)
{
……………… //数据解析
}
DataNum=ComRev(DYTaddr);//查询导引头
if(DataNum==DYTLen)
{
……………… //数据解析
}
………………//查询GPS串口
………………//查询惯组传感器
}
{
InitDevice(); //硬件初始化
for(;;) //循环
{
switch(Order) //发控指令
{
case 10:
According to the Japanese guidelines on the gastric cancer treatment issued by JGCA (2011)[13], the algorithm of surgical treatment in patients with GC is as follows (Figure 7).
TestMode(); //测试维护模块
break;
case 20:
DeviceCheck(); //自检模块
break;
case 30:
TransferAlign(); //传递对准模块
break;
case 40:
TransferAlign(); //离轨信号判断模块
break;
case 50:
Navigation(); //导航模块
Guidance(); //制导模块
Control(); //控制模块
break;
default:
break;
}
}
}
5 半实物仿真试验
为了验证飞控软件功能、性能是否满足系统要求,搭建了反射式半主动激光末制导仿真系统,如图7所示,由仿真机、三轴转台、二轴转台、反射屏、激光器、飞控计算机、导引头、惯组等组成。仿真机接收舵机输出的舵偏角,进行弹体运动学和动力学模型实时解算,并将仿真曲线和结果实时显示,三轴转台接收仿真机指令模拟弹体姿态运动,二轴转台上装有反射棱镜,将激光器输出的光源反射到发射屏上,模拟目标的运动。仿真机与转台之间的通信通过反射内存网,保证了实时性。半实物仿真将硬件连入回路,尽可能的接近真实飞行环境,克服了数学模型的不精确以及干扰因素的影响[6]。
半实物仿真试验重点对制导逻辑和离轨后自主飞行阶段的导航、制导和控制算法进行了验证,完成了涵盖典型、近界、远界、有无发射离轴角等近50条弹道仿真,脱靶量均小于2.0 m。
图7 反射式半主动激光末制导仿真系统
设计的制导逻辑测试用例及测试结果如表1所示,主要包括导引头不跟踪目标、跟踪后丢失、丢失后又跟踪等情况进行测试,测试结果与软件设计状态均一致,飞控软件制导逻辑处理正确。
表1 制导逻辑测试用例
典型弹道的半实物仿真试验结果与数字仿真结果对比曲线如图8所示,飞控软件计算结果与数字仿真结果一致。飞控软件实时性、精度、可靠性均满足要求。
图8 弹体俯仰、偏航、滚转角速率
6 结论
飞控计算机采用DSP+FPGA的结构,利用了FPGA高度并行化数据处理能力,使得DSP更及时响应外部事件请求,并在规定时间内完成事件的处理工作;飞控软件的模块化设计,便于程序的扩展和维护,提高了软件的可靠性。软件通过了半实物仿真试验,软件的实时性和可靠性均得到了验证。
飞控软件采用了1 ms定时中断查询模式,测试中发现在自主飞行阶段主程序进行导航、制导和控制算法解算时被1 ms定时中断打断,导致算法计算周期最大达到1.8 ms,虽然满足计算周期小于T1的要求,但增加了舵指令输出延迟。后续对飞控软件进行改进,在自主飞行阶段关闭所有定时中断,将惯组传感器通信接口由查询模式改为中断模式,每产生一次中断,完成一次导航、制导和控制算法计算,在计算过程中不再受定时中断干扰。软件的改进方案有待进一步验证。