張楊梅,畢 楊
(西安航空學(xué)院 電子工程學(xué)院,西安 710077)
水下主動聲吶探測系統(tǒng)利用聲波對水下目標進行探測、定位、跟蹤及識別,在水下通信導(dǎo)航、魚雷制導(dǎo)、海洋環(huán)境勘探等方面有著廣泛的應(yīng)用。自第一部用于偵測潛艇的主動式聲吶設(shè)備出現(xiàn)后,多國均投入了大量人力物力發(fā)展主動聲吶系統(tǒng),但由于技術(shù)的限制、水下環(huán)境復(fù)雜,水下主動聲吶探測系統(tǒng)的發(fā)展緩慢。隨著微電子和嵌入式技術(shù)的發(fā)展,通過引入嵌入式處理器,水下主動聲吶探測系統(tǒng)的控制部件發(fā)生了巨大變化,其信號處理能力得到了顯著提升[1-3]。然而,傳統(tǒng)的水下主動聲吶探測系統(tǒng)大多是單機單控的相對獨立的設(shè)備,針對不同的環(huán)境和用途,需要設(shè)計不同的系統(tǒng),其硬件結(jié)構(gòu)和軟件體系相對固定和封閉,導(dǎo)致設(shè)備的通用性和擴展能力較差[4-5],限制了水下主動聲吶探測系統(tǒng)的擴展與兼容能力。因此,如何在有限的存儲空間和處理器處理速度下,充分利用軟硬件資源,將主動聲吶探測系統(tǒng)采集到的大量水聲信號數(shù)據(jù)快速、準確的發(fā)送給上位機,以便進行實時的處理、診斷和顯示,是整個水下主動聲吶探測系統(tǒng)的發(fā)展關(guān)鍵之一[6-8]。
水下主動聲吶探測系統(tǒng)根據(jù)上位機下發(fā)的控制指令完成各項任務(wù),在工作狀態(tài)下需要完成對水下目標回波數(shù)據(jù)的采集、預(yù)處理及存儲,并實時將數(shù)據(jù)上傳到上位機進行顯示及分析,具有工作時間長、可靠性要求高、傳輸數(shù)據(jù)量大等設(shè)計要求。因此,本文設(shè)計了一個基于德州儀器(Texas Instruments,TI)公司開發(fā)的OMAP系列數(shù)字信號處理器(Digital Signal Processor, DSP)OMAP-L138的指令控制系統(tǒng)。
水下主動聲吶探測系統(tǒng)是重要的海洋環(huán)境探測和水下目標檢測工具,在設(shè)計時需要遵循可靠性高、工作時間長、大規(guī)模數(shù)據(jù)傳輸?shù)纫蟆K轮鲃勇晠忍綔y系統(tǒng)結(jié)構(gòu)示意圖如圖1所示,其中指令系統(tǒng)處于整個水下主動聲吶探測系統(tǒng)的關(guān)鍵位置,主要負責(zé)與上位機通信、處理信息、控制系統(tǒng)、傳輸數(shù)據(jù),具有實現(xiàn)整個系統(tǒng)同步的功能。
由于本文所設(shè)計的指令控制系統(tǒng)在與上位機及其他設(shè)備進行指令通信的同時,還需要實時傳輸水下主動聲吶探測所產(chǎn)生的大量數(shù)據(jù),整個系統(tǒng)對于數(shù)據(jù)和指令的傳輸速率及傳輸可靠性要求較高。同時,為了方便以后的升級以及再次開發(fā),系統(tǒng)采用TI的OMAP-L138,并利用SYS/BIOS來簡化程序設(shè)計。
TI公司的OMAP-L138是一款高性能、低功耗浮點處理器,片上集成了一顆300 MHz的ARM核與一顆300 MHz的DSP核,雙核可同時工作,兼具ARM處理器與DSP處理器的優(yōu)點。ARM核與DSP核共享高達128 KB的RAM,可通過該共享內(nèi)存區(qū)域進行相互通信。OMAP-L138提供了豐富的外設(shè)接口,可以靈活地與各種外部設(shè)備進行通信,包括外部存儲器擴展接口(EMIFA和EMIFB)、串行數(shù)據(jù)接口(UART、SPI、GPIO等)、并行數(shù)據(jù)接口(UPP)、網(wǎng)絡(luò)通信接口、大容量存儲接口(MMC/SD、USB、SATA)、音視頻接口(VPIF、McASP)等[9]。
本文所設(shè)計并實現(xiàn)的基于OMAP-L138的水下主動聲吶探測指令控制系統(tǒng)連接示意圖如圖2所示。通過網(wǎng)口與上位機進行指令通信以及數(shù)據(jù)傳輸;通過UART接口與聲吶載體控制設(shè)備(轉(zhuǎn)臺)相連,控制調(diào)整聲吶載體的動作;通過SATA接口將水下主動聲吶探測系統(tǒng)在進行探測時采集到的大量數(shù)據(jù)存儲到外部存儲設(shè)備中;使用SPI接口向接收機發(fā)送TVG(時變增益控制)曲線調(diào)節(jié)接收機的增益;通過uPP接口向發(fā)射機、接收機發(fā)送各種指令及配置參數(shù);通過EMIFA接口從接收機接收采集到的數(shù)據(jù),并通過網(wǎng)口將數(shù)據(jù)打包上傳至上位機。不同的水下主動聲吶探測系統(tǒng)可根據(jù)需要進行適當(dāng)裁剪和改變。
圖2 水下主動聲吶探測指令控制系統(tǒng)連接示意圖
SYS/BIOS具有靈活的配置功能,能夠滿足多線程任務(wù)的各種需求,包括對線程的調(diào)度、同步與通信[10],其主要特點是實時性和高效性。實時性體現(xiàn)在搶占式的任務(wù)調(diào)度機制上,當(dāng)中斷出現(xiàn)時,操作系統(tǒng)會在很短的時間內(nèi)去調(diào)用中斷服務(wù)程序,沒有復(fù)雜的任務(wù)調(diào)度機制。高效性主要體現(xiàn)在簡單的系統(tǒng)調(diào)用上,CPU花費在系統(tǒng)調(diào)用上的時間遠遠小于系統(tǒng)有效執(zhí)行任務(wù)的時間,使得SYS/BIOS僅占用極少的CPU資源。此外,SYS/BIOS還提供了豐富的應(yīng)用函數(shù)接口和實時分析及配置工具,可以更加靈活地協(xié)調(diào)各個軟件模塊的執(zhí)行,更加便捷地擴展系統(tǒng)功能,加快軟件的開發(fā)和調(diào)試進度。
SYS/BIOS可以根據(jù)用戶的需求,自動分配不同的資源。它可以實現(xiàn)對不同資源的快速響應(yīng),包括硬件中斷、軟件中斷、線程任務(wù)以及后臺線程。軟件中斷內(nèi)部最多可分為32個優(yōu)先級,線程任務(wù)最多有32個優(yōu)先級。可通過指定線程的優(yōu)先級,使得SYS/BIOS能夠根據(jù)需要決定在某一時刻應(yīng)該運行哪個線程,確保硬件中斷優(yōu)先于軟件中斷,軟件中斷優(yōu)先于線程任務(wù)。
水下主動聲吶中的指令控制系統(tǒng)不僅需要將所采集到的數(shù)據(jù)上傳給上位機,同時還需要與上位機保持通信,從上位機接收各種操作指令及配置參數(shù)[11],通過指令解析決定是否需要將指令繼續(xù)下傳給其它設(shè)備,并將指令執(zhí)行結(jié)果發(fā)送給上位機。因此,水下主動聲吶探測的指令控制系統(tǒng)采用SYS/BIOS進行程序設(shè)計,給各個任務(wù)分配優(yōu)先級,將任務(wù)調(diào)度的工作交給SYS/BIOS,簡化了整個系統(tǒng)控制程序。
指令控制系統(tǒng)的軟件部分基于C語言,通過模塊化程序設(shè)計來完成,主要包括以下幾個模塊:軟硬件資源初始化、主程序、串口通信中斷服務(wù)子程序、定時器中斷服務(wù)子程序等,指令控制系統(tǒng)工作流程圖如圖3所示。系統(tǒng)上電開機后,完成各軟硬件資源的初始化,包括SYS/BIOS系統(tǒng)內(nèi)核初始化、中斷服務(wù)的初始化、IP和MAC地址的設(shè)定、啟動TCP及UDP服務(wù)器、探測參數(shù)的初始化以及各標準外設(shè)接口的初始化;然后系統(tǒng)進入等待狀態(tài),等待上位機下發(fā)指令及參數(shù)數(shù)據(jù);當(dāng)系統(tǒng)接收到上位機下發(fā)的指令及參數(shù)數(shù)據(jù)后,先對指令進行解析,判斷指令的類別(如自診斷指令、參數(shù)配置指令、數(shù)據(jù)導(dǎo)出指令或啟動/停止探測指令);若指令為“自診斷”或“參數(shù)配置”,系統(tǒng)從指令中解析出該指令的執(zhí)行設(shè)備編號,將該指令下發(fā)給相應(yīng)執(zhí)行設(shè)備,并在執(zhí)行設(shè)備完成該指令后從指令執(zhí)行設(shè)備接收指令執(zhí)行結(jié)果,上傳給上位機,系統(tǒng)再次處于等待狀態(tài);若指令為“數(shù)據(jù)導(dǎo)出”,系統(tǒng)將該指令下發(fā)給外部存儲設(shè)備,開始從外部存儲設(shè)備中讀取數(shù)據(jù),同時將讀取出的數(shù)據(jù)上傳給上位機,系統(tǒng)再次處于等待狀態(tài);若指令為“啟動探測”,系統(tǒng)首先通知發(fā)射機開始發(fā)出探測信號,待探測信號發(fā)射完畢后,通知接收機開始接收數(shù)據(jù),并將接收到的數(shù)據(jù)處理后打包上傳給上位機;當(dāng)系統(tǒng)接收到上位機的“停止探測”指令時,整個系統(tǒng)又處于等待狀態(tài)。
圖3 指令控制系統(tǒng)工作流程圖
指令控制系統(tǒng)的軟件程序設(shè)計基于SYS/BIOS中的體系架構(gòu),根據(jù)水下主動聲吶探測系統(tǒng)的功能需求,創(chuàng)建TSK_control、TSK_TCP和TSK_UDP_send 3個任務(wù)線程,水下主動聲吶探測指令控制系統(tǒng)的3個任務(wù)線程如圖4所示,其中TSK_TCP為TCP通信任務(wù)(分為指令接收TSK_TCP_recv和指令應(yīng)答TSK_TCP_send 2部分),負責(zé)與上位機之間的指令接收與應(yīng)答通信,優(yōu)先級最高;TSK_UDP_send為UDP通信任務(wù),負責(zé)將水下主動聲吶探測系統(tǒng)采集到的水聲信號數(shù)據(jù)以UDP協(xié)議方式傳輸給上位機,優(yōu)先級次之;TSK_control為信息處理線程,負責(zé)整個信息處理與邏輯控制,能夠被其它2個任務(wù)線程搶占,在沒有其他任務(wù)線程執(zhí)行時始終不間斷地運行,因此優(yōu)先級最低。
圖4 水下主動聲吶探測指令控制系統(tǒng)的3個任務(wù)線程
以接收“啟動探測”指令為例。系統(tǒng)上電開機并完成初始化后,啟動任務(wù)線程TSK_control;在上位機下發(fā)“啟動探測”指令后,會觸發(fā)任務(wù)線程TSK_TCP啟動,任務(wù)線程TSK_control的CPU使用權(quán)被任務(wù)線程TSK_TCP搶占,系統(tǒng)接收到該指令并進行指令解析;系統(tǒng)完成指令解析并發(fā)送完畢指令執(zhí)行結(jié)果后,任務(wù)線程TSK_TCP結(jié)束,通過信號量將CPU的使用權(quán)返還給任務(wù)線程TSK_control;任務(wù)線程TSK_control將“啟動探測”指令下發(fā)給發(fā)射機,并在發(fā)射機發(fā)射完畢探測信號后將指令下發(fā)給接收機,通知接收機開始接收數(shù)據(jù);當(dāng)有水聲信號數(shù)據(jù)寫入系統(tǒng)時,任務(wù)線程TSK_UDP_send被觸發(fā),取出并打包數(shù)據(jù)發(fā)送給上位機;在任務(wù)線程TSK_UDP_send運行過程中,若上位機下發(fā)“停止探測”指令,任務(wù)線程TSK_TCP被觸發(fā),任務(wù)線程TSK_UDP_send被搶占,待系統(tǒng)接收指令并解析后,系統(tǒng)發(fā)送指令執(zhí)行結(jié)果給上位機,任務(wù)線程TSK_TCP結(jié)束,并將CPU的使用權(quán)返還給任務(wù)線程TSK_UDP_send;當(dāng)采集到的水聲信號數(shù)據(jù)全部發(fā)送給上位機后,任務(wù)線程TSK_UDP_send結(jié)束,將CPU的使用權(quán)返還給任務(wù)線程TSK_control繼續(xù)運行,等待上位機再次下發(fā)指令。
大規(guī)模實時數(shù)據(jù)采集功能原理框圖如圖5所示。具體流程為:①接收機將采集到的水聲信號進行正交解調(diào)、低通濾波等處理后存儲在FIFO中;②當(dāng)FIFO內(nèi)存夠一定數(shù)量數(shù)據(jù)后,接收機產(chǎn)生GPIO中斷;③DSP收到GPIO中斷;④DSP通知EMIFA接口讀取數(shù)據(jù);⑤數(shù)據(jù)從接收機讀出;⑥數(shù)據(jù)放入DSP緩存。其中,GPIO中斷服務(wù)程序的核心代碼如下:
圖5 數(shù)據(jù)采集功能原理框圖
void gpioInputIsr(Ptr ignore)
{
…
/*清除中斷狀態(tài)*/
pinCmdArg.pin = GPIO6_13_PIN; /*接收機通過GPIO6_13管腳產(chǎn)生中斷通知DSP讀取數(shù)據(jù)*/
Gpio_clearInterruptStatus(gpio0, &pinCmdArg, NULL);
…
/*通過EMIFA接口從接收機讀取數(shù)據(jù)*/
EMIFA_read(&destBuf, &srcBuf);
…
}
圖6所示為從SignalTap上截取的數(shù)據(jù)采集時序圖。Gpio_int管腳對應(yīng)的是接收機發(fā)送給DSP的中斷,EMA_D管腳對應(yīng)的是DSP采集到的數(shù)據(jù)。ADC采樣頻率600 kHz,接收機采樣頻率30 kHz,共采集5路32bits的I、Q信號。由于上位機的LabView用戶程序中UDP一次讀取最大字節(jié)數(shù)的限制,接收機每333 us產(chǎn)生一次GPIO中斷,一次向DSP發(fā)送400×8bits的數(shù)據(jù)。可以看出,DSP從接收機讀取數(shù)據(jù)的速度能夠跟上中斷的速度,且有空閑時間,說明本文中的指令系統(tǒng)能夠?qū)崿F(xiàn)大規(guī)模實時數(shù)據(jù)采集功能。
圖6 數(shù)據(jù)采集時序圖
高速數(shù)據(jù)傳輸功能原理框圖如圖7所示。對于放入緩存中的數(shù)據(jù),在將其通過網(wǎng)口使用UDP協(xié)議上傳前,還需要給其添加包頭,放入標識編號,以利于上位機接收后對其進行處理,防止丟包所產(chǎn)生的錯誤積累。同時,也可根據(jù)應(yīng)用需要,將數(shù)據(jù)通過SATA接口存入外接硬盤,以備后續(xù)研究。通過UDP傳輸數(shù)據(jù)的核心代碼如下:
圖7 數(shù)據(jù)傳輸功能原理框圖
…
while(1)
{
…
SemPend(Sem_UDP,SEM_FOREVER);
/*使用UDP協(xié)議發(fā)送數(shù)據(jù)*/
sendto(sudp, &UDP_data, size, flag, (struct sockaddr *)&sin1, sizeof(sin1));
…
}
…
圖8所示為上位機LabView用戶程序界面,界面顯示接收到的數(shù)據(jù)波形連續(xù),無數(shù)據(jù)丟失。系統(tǒng)利用百兆光纖進行數(shù)據(jù)傳輸,在專線專用的情況下,能夠?qū)崿F(xiàn)高速數(shù)據(jù)傳輸?shù)墓δ?且無丟包。
圖8 上位機用戶程序界面
指令解析功能原理框圖(以“啟動探測”指令為例)如圖9所示。具體流程為:①上位機下發(fā)指令,指令通過網(wǎng)絡(luò)傳輸至DSP;②網(wǎng)口接收到上位機下發(fā)的指令,產(chǎn)生網(wǎng)口硬件中斷;③CPU被網(wǎng)口硬件中斷搶占,掛起正在運行的任務(wù),開始解析指令;④DSP根據(jù)指令解析結(jié)果,判斷需要將該指令下發(fā)給哪個外設(shè);⑤指令執(zhí)行完畢后,DSP接收指令執(zhí)行結(jié)果;⑥D(zhuǎn)SP將指令執(zhí)行結(jié)果通過網(wǎng)口上傳;⑦上位機接收指令執(zhí)行結(jié)果。其中,指令解析的核心結(jié)構(gòu)如下:
圖9 指令解析功能原理框圖(以“啟動探測”指令為例)
void decode(char *cmd, char *data)
{
…
/*判斷指令類型*/
switch(cmd_type)
{
/*指令1*/
case 1:
…
break;
…
/*指令n*/
case n:
…
break;
/*錯誤的指令*/
default:
…
break;
}
}
圖10所示為CCS調(diào)試界面,指令系統(tǒng)能夠正確解析上位機下發(fā)的指令,執(zhí)行相應(yīng)的操作,并將結(jié)果上傳給上位機。
圖10 CCS調(diào)試界面
本文基于浮點DSP+ARM9雙核低功耗處理器OMAP-L138,設(shè)計并實現(xiàn)了一個用于水下主動聲吶探測的指令控制系統(tǒng)。該系統(tǒng)利用OMAP-L138上的各種接口與外設(shè)進行通信,利用其內(nèi)置DSP核的高速數(shù)據(jù)處理能力完成大規(guī)模水聲信號數(shù)據(jù)的處理和快速傳輸。系統(tǒng)與上位機之間采用統(tǒng)一指令及參數(shù)數(shù)據(jù)格式進行通信,能夠?qū)ι衔粰C下發(fā)的指令和參數(shù)進行解析,并根據(jù)解析結(jié)果完成相應(yīng)功能或下發(fā)至對應(yīng)的執(zhí)行設(shè)備。系統(tǒng)軟件在SYS/BIOS的基礎(chǔ)上采用C語言編寫,結(jié)構(gòu)簡單,能夠在滿足水下主動聲吶探測實時通信與大規(guī)模數(shù)據(jù)傳輸效率要求的同時,確保各執(zhí)行設(shè)備之間數(shù)據(jù)通信的可靠性,減少各執(zhí)行設(shè)備的運行開銷,系統(tǒng)功能模塊化,易于移植和擴展,能夠便捷地應(yīng)用到聲吶、魚雷自導(dǎo)、水雷等不同功能的水下主動探測系統(tǒng)中。