劉云峰,尹彥東,何凡,甘春泉
(1.火箭軍裝備部駐成都地區(qū)第四軍事代表室,四川成都 610036;2.中國兵器工業(yè)第209研究所,四川成都 610041)
某光電跟蹤系統(tǒng)的穩(wěn)定伺服平臺在電磁環(huán)境較為復(fù)雜的廠房中進(jìn)行系統(tǒng)試驗時,出現(xiàn)了失穩(wěn)現(xiàn)象:在對目標(biāo)穩(wěn)定跟蹤一段時間后,穩(wěn)定平臺意外向下方偏左慢速運(yùn)動,然后轉(zhuǎn)而向上方偏右運(yùn)動,最終令目標(biāo)偏出光電跟蹤系統(tǒng)的視場,導(dǎo)致跟蹤失敗。本文作者針對該失穩(wěn)現(xiàn)象,介紹了某光電跟蹤系統(tǒng)穩(wěn)定伺服平臺工作原理,并對平臺失穩(wěn)故障原因及機(jī)制進(jìn)行了分析,將故障定位為伺服控制軟件設(shè)計缺陷,最后就軟件設(shè)計工作給出了啟示。
穩(wěn)定伺服平臺作為某光電跟蹤系統(tǒng)的關(guān)鍵部件,其工作狀態(tài)和性能直接影響系統(tǒng)的跟蹤和穩(wěn)定指標(biāo)[1]。穩(wěn)定伺服平臺主要完成2個功能:(1)根據(jù)跟蹤誤差信號,調(diào)整平臺運(yùn)動,實現(xiàn)對目標(biāo)的精確跟蹤;(2)隔離載體的角振動,克服載體姿態(tài)變化對跟蹤系統(tǒng)的影響,保證光電跟蹤系統(tǒng)視軸穩(wěn)定。因此穩(wěn)定伺服平臺必須具有足夠高的跟蹤精度和較好的擾動隔離度。
此穩(wěn)定伺服平臺由伺服控制器與二軸穩(wěn)定平臺負(fù)載共同組成,如圖1所示。伺服控制器內(nèi)部包括單片機(jī)(型號8051F120)、速率陀螺信號采集電路、正余弦旋轉(zhuǎn)變壓器信號采集電路、通信電路和脈寬調(diào)制輸出驅(qū)動電路等;二軸穩(wěn)定平臺負(fù)載由力矩電機(jī)、平臺框架、雙軸速率陀螺和旋轉(zhuǎn)變壓器等組成[2-3]。
為了實現(xiàn)目標(biāo)跟蹤和載體擾動隔離,設(shè)計了方位、俯仰兩通道雙環(huán)控制回路(單通道控制回路框圖如圖2所示)[4-5]?;芈吠猸h(huán)為圖像跟蹤回路,使用光電跟蹤系統(tǒng)的圖像視頻跟蹤器測量目標(biāo)跟蹤失調(diào)角,進(jìn)行誤差校正后作為回路內(nèi)環(huán)的角速率指令;回路內(nèi)環(huán)為速率穩(wěn)定回路,反饋信號為速率陀螺角速率信號,與角速率指令取差、校正后形成控制量[6],并通過脈寬調(diào)制驅(qū)動電路驅(qū)動二軸穩(wěn)定平臺轉(zhuǎn)動,從而將光電跟蹤系統(tǒng)光軸穩(wěn)定地指向預(yù)定目標(biāo)。
穩(wěn)定伺服平臺控制采用數(shù)字方式實現(xiàn),主要由伺服控制器單片機(jī)中的伺服控制軟件完成控制回路的誤差校正、回路閉環(huán)、控制量的脈寬調(diào)制輸出和對外通信等工作[7]。由于對實時性要求較高,伺服控制軟件中采用了單片機(jī)的中斷機(jī)制來處理脈寬調(diào)制控制量輸出、雙口RAM通信、串口通信及1 ms周期校正算法迭代[8-11]。
穩(wěn)定伺服平臺失穩(wěn)可能由速率陀螺、旋轉(zhuǎn)變壓器、力矩電機(jī)、伺服控制器(軟、硬件)等故障引起[12]。對相應(yīng)硬件進(jìn)行全面檢查,均不存在異常,可以排除系統(tǒng)硬件故障,故障點集中于伺服控制軟件中。
伺服控制軟件主程序?qū)ο到y(tǒng)初始化后進(jìn)入循環(huán)執(zhí)行體,而主體工作由4個中斷服務(wù)程序完成,分別為脈寬調(diào)制輸出中斷、雙口RAM通信中斷、串口UART0中斷和1 ms定時中斷,其優(yōu)先級由高至低設(shè)置為:調(diào)制輸出中斷 > 雙口中斷 > UART0中斷 > 1 ms定時中斷。
其中,進(jìn)入主程序后,首先關(guān)閉中斷,然后進(jìn)行單片機(jī)片內(nèi)寄存器設(shè)置,包括打開看門狗并設(shè)置看門狗定時器溢出時間、系統(tǒng)工作變量初始化等,之后使能中斷并進(jìn)入循環(huán)等待狀態(tài)。調(diào)制輸出中斷服務(wù)程序主要完成對校正后產(chǎn)生的伺服控制量的輸出,以給出功率放大器的電流輸出量;雙口中斷服務(wù)程序主要完成對上位機(jī)雙口通信的響應(yīng),進(jìn)入中斷后首先讀取上位機(jī)指令數(shù)據(jù),然后返回伺服控制器的狀態(tài)數(shù)據(jù);UART0中斷服務(wù)程序用于地面調(diào)試,完成穩(wěn)定伺服控制系統(tǒng)內(nèi)部狀態(tài)變量的監(jiān)測和軟件在線升級;1 ms定時中斷服務(wù)程序主要完成對伺服框架角和陀螺角速度等傳感器的采集、看門狗定時器清零,并根據(jù)上位機(jī)的指令數(shù)據(jù)進(jìn)行校正運(yùn)算,計算出穩(wěn)定平臺所需的控制量。
經(jīng)分析與此次故障現(xiàn)象相關(guān)的中斷服務(wù)程序單元包括雙口中斷、UART0中斷和1 ms定時中斷,在排查代碼時發(fā)現(xiàn)UART0中斷的功能在試驗狀態(tài)下未按要求關(guān)閉。
UART0中斷在同一中斷矢量下有2個中斷源:一個發(fā)送結(jié)束中斷(發(fā)送中斷標(biāo)志TI0置位)和一個接收完成中斷(接收中斷標(biāo)志RI0置位)。如果中斷被允許,在中斷標(biāo)志TI0或RI0置位時將產(chǎn)生中斷。根據(jù)芯片手冊,當(dāng)單片機(jī)轉(zhuǎn)向中斷服務(wù)程序時,硬件不清除UART0中斷標(biāo)志,中斷標(biāo)志必須用軟件清除。
在伺服控制軟件的初始化時,UART0被設(shè)置工作于8位全雙工異步方式,收發(fā)波特率均設(shè)為38 400 b/s(對應(yīng)波特率周期為1 s/38 400=26 μs),允許接收和允許中斷,即發(fā)送結(jié)束和接收結(jié)束時都會產(chǎn)生中斷。進(jìn)一步排查代碼發(fā)現(xiàn),UART0中斷服務(wù)程序只對發(fā)送中斷標(biāo)志TI0進(jìn)行了清零處理,未對接收中斷標(biāo)志RI0進(jìn)行任何處理,是一個明顯的軟件可靠性設(shè)計缺陷。
另外,以上3個程序單元的中斷優(yōu)先級由高至低設(shè)置為:雙口中斷 > UART0中斷 > 1 ms定時中斷,即1 ms定時中斷可以被UART0中斷嵌套,UART0中斷又可以被雙口中斷嵌套。
以上3個中斷中,1 ms定時中斷服務(wù)程序用于穩(wěn)定伺服平臺自閉環(huán)(光軸穩(wěn)定及電氣鎖零),雙口中斷服務(wù)程序用于響應(yīng)上位機(jī)指令進(jìn)行大閉環(huán)(光軸預(yù)置及目標(biāo)跟蹤),兩者在光電跟蹤系統(tǒng)中具有同等重要的地位??紤]到雙口中斷服務(wù)程序的運(yùn)行時間遠(yuǎn)小于1 ms定時中斷服務(wù)程序,所以采用雙口中斷優(yōu)先級高于1 ms定時中斷的設(shè)置,這樣穩(wěn)定伺服控制系統(tǒng)的實時性最好;而UART0接口作為地面使用的測試接口,其中斷優(yōu)先級高于1 ms定時中斷則顯然不合理。
綜上所述,伺服控制軟件存在以下2個缺陷:
(1)UART0接收中斷未進(jìn)行處理;
(2)中斷優(yōu)先級排序不合理。
在以上2個缺陷中,如果UART0接收中斷異常觸發(fā),會引起接收該中斷標(biāo)志RI0無法清除,導(dǎo)致該中斷一直占用伺服控制器單片機(jī),進(jìn)而使得優(yōu)先級低于該中斷的1 ms定時中斷無法響應(yīng),并導(dǎo)致1 ms定時中斷服務(wù)程序無法執(zhí)行,則傳感器信號采集和控制量校正計算將停止。在測試數(shù)據(jù)上表現(xiàn)為伺服控制器部分參數(shù)停止更新,控制量保持最后一次更新數(shù)據(jù),穩(wěn)定平臺出現(xiàn)漂移,導(dǎo)致穩(wěn)定平臺失穩(wěn)。
對穩(wěn)定伺服平臺失穩(wěn)故障建立故障樹,經(jīng)對故障樹分支逐一排查,基本確定造成此故障的原因為伺服控制軟件設(shè)計缺陷,故障誘發(fā)條件為廠房內(nèi)某大功率用電設(shè)備。
光電跟蹤系統(tǒng)加電并正常工作后,重復(fù)啟動廠房內(nèi)某大功率用電設(shè)備釋放干擾,并觀察光電跟蹤系統(tǒng)工作情況,同時,使用筆錄儀監(jiān)測與伺服控制器單片機(jī)UART0連接的RS232接口接收端的電壓波動脈寬、最大峰峰值。具體如表1和圖3—圖5所示。
表1 某大功率用電設(shè)備干擾試驗結(jié)果
該試驗環(huán)境下,當(dāng)干擾到達(dá)RS232接收端的尖峰脈沖寬度為20 μs左右時,對光電跟蹤系統(tǒng)的伺服控制器造成干擾,出現(xiàn)穩(wěn)定伺服平臺失穩(wěn),20 μs與UART0設(shè)置的波特率相匹配,被UART0誤讀為有效數(shù)據(jù)接收,因此故障得以定位。
由于伺服控制軟件設(shè)計存在的缺陷,未對不用的伺服控制器單片機(jī)片內(nèi)UART0(異步串行收發(fā)器0)的接收中斷進(jìn)行禁止以及在中斷服務(wù)程序中未清除接收中斷標(biāo)志位RI0,進(jìn)行系統(tǒng)試驗時,廠房內(nèi)大功率用電設(shè)備產(chǎn)生的電磁干擾串入伺服控制器的RS232接口(其內(nèi)部與伺服控制器UART0連接),致使RS232串口接收線上產(chǎn)生超過+3 V(RS232電平轉(zhuǎn)換器的輸出由空閑狀態(tài)的邏輯1變?yōu)檫壿?)且時間不小于13 μs(波特率38 400周期的一半)的干擾信號。被伺服控制器單片機(jī)誤讀為UART0串行輸入數(shù)據(jù)的起始位,9個波特率時鐘后,UART0的接收中斷被異常觸發(fā),伺服控制軟件不斷進(jìn)入該中斷,從而使伺服控制主流程(中斷優(yōu)先級較低的1 ms定時中斷服務(wù)流程)無法正常執(zhí)行,導(dǎo)致伺服部分參數(shù)(框架角和控制量)不更新,穩(wěn)定平臺不能正??刂疲瑢?dǎo)致出現(xiàn)故障。
在伺服控制軟件中,合理的優(yōu)先級設(shè)置應(yīng)該為:雙口中斷 > 1 ms定時中斷 > UART0中斷,但是,由于器件限制,伺服控制器單片機(jī)無法將UART0中斷優(yōu)先級設(shè)置為低于1 ms定時中斷,因此只能采取關(guān)閉UART0的措施對此類故障進(jìn)行規(guī)避,一并采取多重軟件可靠性措施。具體措施如下:
(1)將UART0控制寄存器設(shè)置為不允許接收,伺服控制軟件UART0初始化配置單元作如下更改:
更改前為
void UART_Init(void)
{
…
SCON0 = 0x50;
…
}
更改后為
void UART_Init(void)
{
…
SCON0 = 0x40;
…
}
(2)在中斷屏蔽寄存器中禁止UART0中斷,伺服控制軟件中斷初始化配置單元作如下更改:
更改前為
void Interrupts_Init(void)
{
IE = 0x91;
…
}
更改后為
void Interrupts_Init(void)
{
IE = 0x01;
…
}
(3)為UART0中斷設(shè)置空的中斷服務(wù)程序,程序中清除接收和發(fā)送中斷標(biāo)志,然后設(shè)置中斷屏蔽寄存器為禁止UART0中斷,以避免該中斷在被異常觸發(fā)的情況下,也能及時退出中斷服務(wù)程序。更改前為
void UART0_ISR(void) interrupt 4
{
…
… // 將組裝完成的監(jiān)測數(shù)據(jù)寫入UART0發(fā)送緩沖區(qū)
…
}
更改后為
void UART0_ISR(void) interrupt 4
{
SFR_PGSaver3 = SFRPAGE;
SFRPAGE = UART0_PAGE;
RI0 = 0; // 清零UART0接收中斷標(biāo)志
TI0 = 0; // 清零UART0發(fā)送中斷標(biāo)志
ES0 = 0; // 禁止UART0中斷
SFRPAGE = SFR_PGSaver3;
}
為了驗證上述更改的有效性,在試驗室建立了此故障的模擬環(huán)境,按以上措施修改伺服控制軟件。系統(tǒng)加電,待系統(tǒng)工作正常后,啟動故障注入裝置,系統(tǒng)仍工作正常;系統(tǒng)斷電,恢復(fù)伺服控制軟件為原設(shè)計狀態(tài),系統(tǒng)上電,正常工作后,啟動故障注入裝置,系統(tǒng)故障復(fù)現(xiàn),表明措施有效。
經(jīng)過問題回溯發(fā)現(xiàn),伺服控制軟件在設(shè)計、開發(fā)過程中不符合GJB/Z 102——1997《軟件可靠性和安全性設(shè)計準(zhǔn)則》中第5.8.1.3條:“對于電磁輻射、電磁脈沖、靜電干擾,以及在太空中使用的計算機(jī)可能遇到的宇宙重粒子的沖擊,硬件設(shè)計應(yīng)按規(guī)定要求將這些干擾控制在規(guī)定得水平之下,軟件設(shè)計要使得在出現(xiàn)這種干擾時,系統(tǒng)仍能安全運(yùn)轉(zhuǎn)?!避浖O(shè)計開發(fā)人員對軟件可靠性和安全性方面的相關(guān)設(shè)計標(biāo)準(zhǔn)和要求掌握得不夠深入,造成了軟件設(shè)計缺陷。技術(shù)人員在進(jìn)行裝備軟件設(shè)計時,首先應(yīng)將系統(tǒng)的所有激勵源納入設(shè)計考慮,比如此案例中,所有中斷都是系統(tǒng)的激勵源(即使沒被使能),必須考慮如何響應(yīng)那些非期望激勵;充分重視非正常流程分支的合理設(shè)計,同時對于在復(fù)雜電磁環(huán)境條件下工作的設(shè)備,對外接口應(yīng)考慮采用隔離電路和相應(yīng)的軟件設(shè)計來屏蔽干擾;對產(chǎn)品應(yīng)用環(huán)境和條件充分了解,尤其對裝備軟件的特殊要求應(yīng)掌握全面,并貫徹到軟件的設(shè)計和開發(fā)之中。
如今,軟件故障已成為航天系統(tǒng)失敗的重要因素,此次發(fā)生的故障在采用軟件靜態(tài)分析技術(shù)后應(yīng)能在裝機(jī)前得以暴露和解決[13]。在采取以上設(shè)計措施的基礎(chǔ)上,后續(xù)還應(yīng)規(guī)范和加強(qiáng)軟件分析和測試工作,消除故障潛回路,提高航天嵌入式軟件的安全性與可靠性。
同時,軍代表在裝備研制跟蹤中,需督促承制單位加強(qiáng)規(guī)范化設(shè)計,貫徹、執(zhí)行航天標(biāo)準(zhǔn),形成統(tǒng)一成熟的軟、硬件設(shè)計規(guī)范,以加強(qiáng)電路的抗干擾能力設(shè)計和軟件的安全性、可靠性設(shè)計。
文中針對穩(wěn)定伺服平臺失穩(wěn)現(xiàn)象,分析了失穩(wěn)故障機(jī)制,受硬件限制,中斷優(yōu)先級無法調(diào)整,只是采取了關(guān)UART0中斷等措施進(jìn)行綜合治理,并再次在試驗環(huán)境下驗證分析。結(jié)果表明:伺服控制軟件中設(shè)置不當(dāng)?shù)闹袛嘣谙鄳?yīng)接口受到干擾后,引發(fā)了伺服平臺失穩(wěn)現(xiàn)象;改進(jìn)后的伺服控制軟件在故障干擾條件下仍能正常工作,具有良好的魯棒性,為復(fù)雜電磁環(huán)境下應(yīng)用的設(shè)備的設(shè)計工作帶來新的啟示。