APP下载

基于DSP水下主动声呐探测指令控制系统设计

2023-10-17张杨梅

西安航空学院学报 2023年5期
关键词:探测系统声呐线程

张杨梅,毕 杨

(西安航空学院 电子工程学院,西安 710077)

0 引言

水下主动声呐探测系统利用声波对水下目标进行探测、定位、跟踪及识别,在水下通信导航、鱼雷制导、海洋环境勘探等方面有着广泛的应用。自第一部用于侦测潜艇的主动式声呐设备出现后,多国均投入了大量人力物力发展主动声呐系统,但由于技术的限制、水下环境复杂,水下主动声呐探测系统的发展缓慢。随着微电子和嵌入式技术的发展,通过引入嵌入式处理器,水下主动声呐探测系统的控制部件发生了巨大变化,其信号处理能力得到了显著提升[1-3]。然而,传统的水下主动声呐探测系统大多是单机单控的相对独立的设备,针对不同的环境和用途,需要设计不同的系统,其硬件结构和软件体系相对固定和封闭,导致设备的通用性和扩展能力较差[4-5],限制了水下主动声呐探测系统的扩展与兼容能力。因此,如何在有限的存储空间和处理器处理速度下,充分利用软硬件资源,将主动声呐探测系统采集到的大量水声信号数据快速、准确的发送给上位机,以便进行实时的处理、诊断和显示,是整个水下主动声呐探测系统的发展关键之一[6-8]。

水下主动声呐探测系统根据上位机下发的控制指令完成各项任务,在工作状态下需要完成对水下目标回波数据的采集、预处理及存储,并实时将数据上传到上位机进行显示及分析,具有工作时间长、可靠性要求高、传输数据量大等设计要求。因此,本文设计了一个基于德州仪器(Texas Instruments,TI)公司开发的OMAP系列数字信号处理器(Digital Signal Processor, DSP)OMAP-L138的指令控制系统。

1 水下主动声呐探测指令控制系统

水下主动声呐探测系统是重要的海洋环境探测和水下目标检测工具,在设计时需要遵循可靠性高、工作时间长、大规模数据传输等要求。水下主动声呐探测系统结构示意图如图1所示,其中指令系统处于整个水下主动声呐探测系统的关键位置,主要负责与上位机通信、处理信息、控制系统、传输数据,具有实现整个系统同步的功能。

由于本文所设计的指令控制系统在与上位机及其他设备进行指令通信的同时,还需要实时传输水下主动声呐探测所产生的大量数据,整个系统对于数据和指令的传输速率及传输可靠性要求较高。同时,为了方便以后的升级以及再次开发,系统采用TI的OMAP-L138,并利用SYS/BIOS来简化程序设计。

1.1 OMAP-L138

TI公司的OMAP-L138是一款高性能、低功耗浮点处理器,片上集成了一颗300 MHz的ARM核与一颗300 MHz的DSP核,双核可同时工作,兼具ARM处理器与DSP处理器的优点。ARM核与DSP核共享高达128 KB的RAM,可通过该共享内存区域进行相互通信。OMAP-L138提供了丰富的外设接口,可以灵活地与各种外部设备进行通信,包括外部存储器扩展接口(EMIFA和EMIFB)、串行数据接口(UART、SPI、GPIO等)、并行数据接口(UPP)、网络通信接口、大容量存储接口(MMC/SD、USB、SATA)、音视频接口(VPIF、McASP)等[9]。

本文所设计并实现的基于OMAP-L138的水下主动声呐探测指令控制系统连接示意图如图2所示。通过网口与上位机进行指令通信以及数据传输;通过UART接口与声呐载体控制设备(转台)相连,控制调整声呐载体的动作;通过SATA接口将水下主动声呐探测系统在进行探测时采集到的大量数据存储到外部存储设备中;使用SPI接口向接收机发送TVG(时变增益控制)曲线调节接收机的增益;通过uPP接口向发射机、接收机发送各种指令及配置参数;通过EMIFA接口从接收机接收采集到的数据,并通过网口将数据打包上传至上位机。不同的水下主动声呐探测系统可根据需要进行适当裁剪和改变。

图2 水下主动声呐探测指令控制系统连接示意图

1.2 SYS/BIOS

SYS/BIOS具有灵活的配置功能,能够满足多线程任务的各种需求,包括对线程的调度、同步与通信[10],其主要特点是实时性和高效性。实时性体现在抢占式的任务调度机制上,当中断出现时,操作系统会在很短的时间内去调用中断服务程序,没有复杂的任务调度机制。高效性主要体现在简单的系统调用上,CPU花费在系统调用上的时间远远小于系统有效执行任务的时间,使得SYS/BIOS仅占用极少的CPU资源。此外,SYS/BIOS还提供了丰富的应用函数接口和实时分析及配置工具,可以更加灵活地协调各个软件模块的执行,更加便捷地扩展系统功能,加快软件的开发和调试进度。

SYS/BIOS可以根据用户的需求,自动分配不同的资源。它可以实现对不同资源的快速响应,包括硬件中断、软件中断、线程任务以及后台线程。软件中断内部最多可分为32个优先级,线程任务最多有32个优先级。可通过指定线程的优先级,使得SYS/BIOS能够根据需要决定在某一时刻应该运行哪个线程,确保硬件中断优先于软件中断,软件中断优先于线程任务。

水下主动声呐中的指令控制系统不仅需要将所采集到的数据上传给上位机,同时还需要与上位机保持通信,从上位机接收各种操作指令及配置参数[11],通过指令解析决定是否需要将指令继续下传给其它设备,并将指令执行结果发送给上位机。因此,水下主动声呐探测的指令控制系统采用SYS/BIOS进行程序设计,给各个任务分配优先级,将任务调度的工作交给SYS/BIOS,简化了整个系统控制程序。

2 软件设计

2.1 指令控制系统软件总体设计

指令控制系统的软件部分基于C语言,通过模块化程序设计来完成,主要包括以下几个模块:软硬件资源初始化、主程序、串口通信中断服务子程序、定时器中断服务子程序等,指令控制系统工作流程图如图3所示。系统上电开机后,完成各软硬件资源的初始化,包括SYS/BIOS系统内核初始化、中断服务的初始化、IP和MAC地址的设定、启动TCP及UDP服务器、探测参数的初始化以及各标准外设接口的初始化;然后系统进入等待状态,等待上位机下发指令及参数数据;当系统接收到上位机下发的指令及参数数据后,先对指令进行解析,判断指令的类别(如自诊断指令、参数配置指令、数据导出指令或启动/停止探测指令);若指令为“自诊断”或“参数配置”,系统从指令中解析出该指令的执行设备编号,将该指令下发给相应执行设备,并在执行设备完成该指令后从指令执行设备接收指令执行结果,上传给上位机,系统再次处于等待状态;若指令为“数据导出”,系统将该指令下发给外部存储设备,开始从外部存储设备中读取数据,同时将读取出的数据上传给上位机,系统再次处于等待状态;若指令为“启动探测”,系统首先通知发射机开始发出探测信号,待探测信号发射完毕后,通知接收机开始接收数据,并将接收到的数据处理后打包上传给上位机;当系统接收到上位机的“停止探测”指令时,整个系统又处于等待状态。

图3 指令控制系统工作流程图

2.2 线程调度管理

指令控制系统的软件程序设计基于SYS/BIOS中的体系架构,根据水下主动声呐探测系统的功能需求,创建TSK_control、TSK_TCP和TSK_UDP_send 3个任务线程,水下主动声呐探测指令控制系统的3个任务线程如图4所示,其中TSK_TCP为TCP通信任务(分为指令接收TSK_TCP_recv和指令应答TSK_TCP_send 2部分),负责与上位机之间的指令接收与应答通信,优先级最高;TSK_UDP_send为UDP通信任务,负责将水下主动声呐探测系统采集到的水声信号数据以UDP协议方式传输给上位机,优先级次之;TSK_control为信息处理线程,负责整个信息处理与逻辑控制,能够被其它2个任务线程抢占,在没有其他任务线程执行时始终不间断地运行,因此优先级最低。

图4 水下主动声呐探测指令控制系统的3个任务线程

以接收“启动探测”指令为例。系统上电开机并完成初始化后,启动任务线程TSK_control;在上位机下发“启动探测”指令后,会触发任务线程TSK_TCP启动,任务线程TSK_control的CPU使用权被任务线程TSK_TCP抢占,系统接收到该指令并进行指令解析;系统完成指令解析并发送完毕指令执行结果后,任务线程TSK_TCP结束,通过信号量将CPU的使用权返还给任务线程TSK_control;任务线程TSK_control将“启动探测”指令下发给发射机,并在发射机发射完毕探测信号后将指令下发给接收机,通知接收机开始接收数据;当有水声信号数据写入系统时,任务线程TSK_UDP_send被触发,取出并打包数据发送给上位机;在任务线程TSK_UDP_send运行过程中,若上位机下发“停止探测”指令,任务线程TSK_TCP被触发,任务线程TSK_UDP_send被抢占,待系统接收指令并解析后,系统发送指令执行结果给上位机,任务线程TSK_TCP结束,并将CPU的使用权返还给任务线程TSK_UDP_send;当采集到的水声信号数据全部发送给上位机后,任务线程TSK_UDP_send结束,将CPU的使用权返还给任务线程TSK_control继续运行,等待上位机再次下发指令。

3 系统功能调试分析

3.1 大规模实时数据采集

大规模实时数据采集功能原理框图如图5所示。具体流程为:①接收机将采集到的水声信号进行正交解调、低通滤波等处理后存储在FIFO中;②当FIFO内存够一定数量数据后,接收机产生GPIO中断;③DSP收到GPIO中断;④DSP通知EMIFA接口读取数据;⑤数据从接收机读出;⑥数据放入DSP缓存。其中,GPIO中断服务程序的核心代码如下:

图5 数据采集功能原理框图

void gpioInputIsr(Ptr ignore)

{

/*清除中断状态*/

pinCmdArg.pin = GPIO6_13_PIN; /*接收机通过GPIO6_13管脚产生中断通知DSP读取数据*/

Gpio_clearInterruptStatus(gpio0, &pinCmdArg, NULL);

/*通过EMIFA接口从接收机读取数据*/

EMIFA_read(&destBuf, &srcBuf);

}

图6所示为从SignalTap上截取的数据采集时序图。Gpio_int管脚对应的是接收机发送给DSP的中断,EMA_D管脚对应的是DSP采集到的数据。ADC采样频率600 kHz,接收机采样频率30 kHz,共采集5路32bits的I、Q信号。由于上位机的LabView用户程序中UDP一次读取最大字节数的限制,接收机每333 us产生一次GPIO中断,一次向DSP发送400×8bits的数据。可以看出,DSP从接收机读取数据的速度能够跟上中断的速度,且有空闲时间,说明本文中的指令系统能够实现大规模实时数据采集功能。

图6 数据采集时序图

3.2 高速数据传输

高速数据传输功能原理框图如图7所示。对于放入缓存中的数据,在将其通过网口使用UDP协议上传前,还需要给其添加包头,放入标识编号,以利于上位机接收后对其进行处理,防止丢包所产生的错误积累。同时,也可根据应用需要,将数据通过SATA接口存入外接硬盘,以备后续研究。通过UDP传输数据的核心代码如下:

图7 数据传输功能原理框图

while(1)

{

SemPend(Sem_UDP,SEM_FOREVER);

/*使用UDP协议发送数据*/

sendto(sudp, &UDP_data, size, flag, (struct sockaddr *)&sin1, sizeof(sin1));

}

图8所示为上位机LabView用户程序界面,界面显示接收到的数据波形连续,无数据丢失。系统利用百兆光纤进行数据传输,在专线专用的情况下,能够实现高速数据传输的功能,且无丢包。

图8 上位机用户程序界面

3.3 指令解析

指令解析功能原理框图(以“启动探测”指令为例)如图9所示。具体流程为:①上位机下发指令,指令通过网络传输至DSP;②网口接收到上位机下发的指令,产生网口硬件中断;③CPU被网口硬件中断抢占,挂起正在运行的任务,开始解析指令;④DSP根据指令解析结果,判断需要将该指令下发给哪个外设;⑤指令执行完毕后,DSP接收指令执行结果;⑥DSP将指令执行结果通过网口上传;⑦上位机接收指令执行结果。其中,指令解析的核心结构如下:

图9 指令解析功能原理框图(以“启动探测”指令为例)

void decode(char *cmd, char *data)

{

/*判断指令类型*/

switch(cmd_type)

{

/*指令1*/

case 1:

break;

/*指令n*/

case n:

break;

/*错误的指令*/

default:

break;

}

}

图10所示为CCS调试界面,指令系统能够正确解析上位机下发的指令,执行相应的操作,并将结果上传给上位机。

图10 CCS调试界面

4 结论

本文基于浮点DSP+ARM9双核低功耗处理器OMAP-L138,设计并实现了一个用于水下主动声呐探测的指令控制系统。该系统利用OMAP-L138上的各种接口与外设进行通信,利用其内置DSP核的高速数据处理能力完成大规模水声信号数据的处理和快速传输。系统与上位机之间采用统一指令及参数数据格式进行通信,能够对上位机下发的指令和参数进行解析,并根据解析结果完成相应功能或下发至对应的执行设备。系统软件在SYS/BIOS的基础上采用C语言编写,结构简单,能够在满足水下主动声呐探测实时通信与大规模数据传输效率要求的同时,确保各执行设备之间数据通信的可靠性,减少各执行设备的运行开销,系统功能模块化,易于移植和扩展,能够便捷地应用到声呐、鱼雷自导、水雷等不同功能的水下主动探测系统中。

猜你喜欢

探测系统声呐线程
探索大洋的“千里眼”——声呐
一种便携式侧扫声呐舷侧支架的设计及实现
声呐
民用飞机货舱烟雾探测系统研究
基于固体火箭和GPS测风技术的中低空气象探测系统关键技术研发与应用
高可靠性火灾探测系统设计
基于LDC1314的金属探测系统灵敏度提升方法
浅谈linux多线程协作
COTS技术在声呐装备中的应用
基于上下文定界的Fork/Join并行性的并发程序可达性分析*