,
(海軍工程大學 電氣與信息工程學院 武漢 430033)
傳統消磁系統認為艦船固定磁場在一定范圍內是不發生變化的,所以只采用開環控制方式,即只給出一個固定的電流來補償固定磁場。但是,實踐證明,固定磁場可以隨著地球磁場的長期作用、海浪對艦船的沖擊、艦船上設備的改變、武器發射等情況發生變化。因此,隨著磁性水雷的精度越來越高,國外磁性探潛設備對潛艇搜尋能力的提高,傳統的開環消磁系統已不能滿足艦船磁場隱身的要求。閉環消磁系統能實時測量艦船固定磁場的變化,并通過測得的變化量實時改變閉環消磁系統中的電流大小,以達到補償固定磁場的目的。這樣可以進一步減小艦船磁場,從而使磁性水雷失效,或者超出磁性探潛設備對潛艇的搜尋范圍。本文對閉環消磁系統的核心部分閉環消磁電流控制儀進行開發和調試。
系統的硬件組成見圖1。

圖1 硬件組成
本文采用ARM2748作為閉環消磁電流控制儀的主控芯片,用周立功公司生產的SmartARM2400工控開發平臺進行開發。以太網訪問控制器(MAC)已經在LPC2478中集成,是一個功能齊全的10/100 Mb/s以太網MAC。以太網PHY收發器采用KSZ8041NL單芯片以太網物理層收發器,它具有功耗低、體積小、波形穩定、價格便宜等特點。片外存儲器采用16位存儲器(NORFlash)SST39VF1601,其大小為1 Mb[1]。
閉環消磁電流控制儀主要完成3個功能:采集內部磁場、計算外部磁場和計算外部補償電流。其主要工作流程如下。
首先從測磁儀讀取磁場值,計算出潛艇內部磁場變化量,通過內外磁場換算法計算出外部磁場變化量;然后算出外部補償電流的變化量,將該變化量發送給數控電源,數控電源輸出對應的電流,達到補償磁場變化量的目的。
本文采用uC/OS-Ⅱ嵌入式操作系統進行軟件開發。
實驗使用的是uCOS-ⅡV2.52版本,其嵌入式實時操作系統與硬件的關系見圖2。

圖2 uC/OS-Ⅱ體系結構
通過裁剪之后的uC/OS-Ⅱ微小內核源代碼分為3部分[2]。
1)內核代碼。內核代碼僅提供了4個微小內核,分別位于sourceSOURCE1、sourceSOURCE2、sourceSOURCE3和sourceSOURCE4。它們的功能依次增強,代碼也依次增大。
2)移植代碼。將uC/OS-Ⅱ移植到LPC2478處理器上,需要修改四個與ARM體系有關的文件。分別為OS_CPU_C.C,OS_CPU_a.S, OS_CPU.H和IRQ.INC。
①OS_CPU_C.C:移植代碼C語言部分;
②OS_CPU_a.S:移植代碼匯編語言部分;
③OS_CPU.H:移植代碼頭文件;
④RQ.INC:移植代碼與芯片無關的中斷處理接口程序。
3)配置文件。配置文件是每個uC/OS-Ⅱ程序必備的文件,而且不同的程序一般不一樣,但大小基本上相同。配置文件分別為INCLUDES.H和OS_CFG.H。
①INCLUDES.H:內核需要的頭文件,對于特定的移植,一般不需要改變;
②OS_CFG.H:內核配置的頭文件,一般需要根據程序的需求修改其常量的內容。
uC/OS-Ⅱ是實時多任務操作系統,可以獨立并行執行多個任務。通常將獨立且并行執行的程序稱為任務,也就是說任務是可以被分割為獨立的且可并行執行的基本邏輯單位程序。一個任務的程序是順序執行的,而不同任務的程序卻是并行執行的。因此要把一個程序稱為任務,必須滿足兩個條件:獨立、并行執行。
獨立的具體含義是指任務不能彼此直接調用,也不能直接進行數據交換。
如圖3所示,task0和task1之間沒有相互直接調用,之間的數據交換是通過內核來完成的,這時可以把task0和task1作為任務。任務在宏觀上是并行執行的,一個任務需要另一個任務協助時,需將自己的請求通過系統調用提交給內核,另一個任務可以通過系統調用從內核獲得這些請求,然后完成這個請求。

圖3 獨立的任務結構

圖4 任務的并行執行
見圖4,如果左側圖中每個任務都存在一個CPU,則所有的任務都可以實現并行處理,但這是不可能實現的。真實的情況如右側圖所示,CPU只有一個,但可以認為uC/OS-Ⅱ為每個任務虛擬了一個CPU。因此在對多任務進行編程時,應該時刻注意這個細節。
綜上所述,任務是指程序員編寫的應用軟件程序,它與以往編寫的程序沒有太大的區別,但它是在內核下被分割為獨立且可并行執行的基本邏輯單位的程序,這是它的最大特點。
由于uC/OS-Ⅱ是多任務操作系統,因此需要建立幾個關鍵的任務。
1)建立兩個按鍵任務,分別是Start_Stop和Rerserve_Data。其中開始和暫停功能在Start_Stop任務中描述。
2)將接收的數據保存到片外存儲器NORFlah中的功能在Rerserve_Data任務中實現。
3)建立一個UDP接收數據的任務UDP_test,這個任務的功能是采集磁場,即等待磁場數據通過以太網傳輸過來,然后對數據進行相應的操作,以便下一步將數據寫入NORFlash中。
4)建立一個初始化任務,分別對ARM的IP地址、端口號,UDP協議,ARP協議,以太網底層功能等進行初始化。
5)建立一個計算補償電流的任務Count_I,這個任務的功能是計算外部磁場的變化量和計算外部補償電流的變化量。
采用文獻[3]所介紹的內外磁場換算算法來計算外部磁場變化量,用到的公式為[3]
SF=(ΔNTΔN)-1ΔNT(ΔHn)h+1
(1)
(△Hw)h+1=△W×SF
(2)
式中:△N——內部磁場變化量矩陣,這個矩陣的數據已經存入磁場數據庫中;
△W——外部磁場變化量矩陣,已經存入磁場數據庫中;
△Hn——單次內部磁場變化量矩陣,可以通過改變潛艇磁場獲得;
△Hw——單次外部磁場變化量矩陣,就是最后需要的數據。
計算外部補償電流變化量時,用到的公式為
G×I=-b
(3)
式中:G——線圈效率矩陣;
I——線圈電流矩陣;
b——外部各個測量點的磁場矩陣。
由于測量點數大于可以通的電流數,相當于求解一個不相容的方程組。因此采用矩陣形式的最小二乘法來求解[4]。
設已給不相容實系數線性方程組(即無解的線性方程組)
A×X=B
(4)
那么它的最小二乘解所滿足的代數方程為
AT×A×X=AT×B
(5)
式(5)是一個線性方程組,系數矩陣為ATA,常數項為ATB。
將式(3)代入式(4),然后按照式(5)計算,就可以得到各個線圈中應該通的電流大小。計算外部補償電流的變化量時,只需把式(1) 的△Hn代入式(3)中的b即可。
具體軟件流程見圖5。
線圈效率已經測量出來。因為片外存儲器(NORFlash)SST39VF1601是16位存儲器,因此在寫入數據時要注意存儲地址及數據的存儲位置。比如,LPC2478是小端存儲器系統,16位數據的高8位存儲在高地址,低8位存儲在低地址。
經過實際操作,磁場數據的采集和存儲可以很順利地完成,外部補償電流也能實時輸出,并且可以實時根據外部磁場的變化,外部補償電流實時發生變化,實時性基本達到了要求。補償后的磁場也在很小的范圍內,達到了閉環消磁的技術要求。

圖5 閉環消磁過程流程
實踐證明,系統實時性達到了要求,補償誤差都在10%以內。而且加入了uC/OS-Ⅱ操作系統,使得軟件編程簡化,程序模塊化和可視化程度增強。后期準備加入液晶顯示模塊,可以很方便地實時觀察測得的磁場數據以及補償后的效果等。
[1] 周立功.深入淺出ARM7-LPC2400[M].上冊.廣州:廣州致遠電子有限公司,2008.
[2] 周立功.uC/OS-Ⅱ微小內核分析與程序設計-基于LPC2400[M].廣州:廣州致遠電子有限公司,2008.
[3] 王 鯨,劉勝道,蘇廣東.一種潛艇內外磁場換算算法的實驗驗證[J].海軍工程大學學報,2010,22(1):83-86.
[4] 羅家洪,方衛東.矩陣分析引論[M].4版.廣州:華南理工大學出版社,2006.