張 敏 張云桃 孟憲民
(哈爾濱工業(yè)大學(威海)信息與電氣工程學院1,山東 威海 264209;山東卡爾電氣股份有限公司2,山東 威海 264209)
故障測試是信息產(chǎn)品制造的重要組成部分。在科學技術高度發(fā)展的今天,測試工作處在各種先進裝備系統(tǒng)設計和制造的首位。據(jù)資料顯示,目前測試成本已達到所研制設備成本的50%甚至70%。如何使診測更加快捷和準確是一項重要的研究課題[1]。
傳統(tǒng)的故障診斷是一項十分復雜的工作。測試的對象數(shù)量龐大,如待測電路的輸入與輸出變量可能多達數(shù)十個甚至上百個,分支龐雜;電路響應是組合的,而且在大多數(shù)情況下是時序的;需要觀察的邏輯位于芯片內部,不可能直接測量它們的邏輯電平與輸入輸出波形。
現(xiàn)代數(shù)字系統(tǒng)故障診斷的基本思想是在輸入端加載激勵信號,在輸出端得到響應;根據(jù)激勵和響應的對應關系以及電路的拓撲關系,確定故障點。其實現(xiàn)的關鍵是測試向量的生成,即在輸入端加載激勵信號,使輸入故障通過電路內部的故障點反映出來。找到故障的測試向量后,采用數(shù)字系統(tǒng)故障診斷進行故障檢測。
由于采用FPGA的電子系統(tǒng)更具設計靈活性,其根據(jù)需要更改內部邏輯來滿足硬件外圍電路要求;而故障測試算法具有邏輯的完備性,可以大大提高參試性能和準確度,因此將兩者相結合來進行故障診斷。由于FPGA中的邏輯單元是可編程的,因此可針對布爾差分法定制測試邏輯軟件,而不必做出任何物理硬件變動[2]。
方案具體實現(xiàn)過程如下。
首先針對布爾差分算法特性,構造一個具體數(shù)字電路進行故障分析及故障檢測。
然后利用算法,求出電路各個節(jié)點以及各種故障的測試矢量,使得輸入故障在輸出端表現(xiàn)出來。將測試矢量作為故障電路的激勵,觀察輸出端的響應,并與該輸入下正常電路的輸出值進行比較,若輸出結果與真實值相反,則測試矢量生效;否則,測試矢量失效。將生效的測試矢量記錄下來,作為下一步進行電路故障檢測時的電路激勵。
最后計算出每一種故障下各個節(jié)點的故障列表,建立檢測故障所需要的電路模塊,包括故障仿真模塊、分頻模塊、消抖模塊、檢測模塊等。當將某一故障對應的所有的測試矢量作為輸入時,各個節(jié)點的邏輯函數(shù)值都與故障列表吻合,則確定該電路存在故障,并將故障類型顯示在開發(fā)板上[3]。
一階布爾差分法是用來求解單故障測試矢量集的。如果要求解多故障的測試矢量集,就必須使用高階布爾差分。這里主要敘述二階布爾差分及雙故障測試矢量的求法。定義函數(shù)f(X)為:
式(2)為函數(shù)f相對于xi和xj的二階差分分別為第i個和第j個故障的輸入測試矢量,且滿足如下關系式:
檢測雙故障 xi(s-a-α)、xj(s-a-β)的測試集為:
式中:α,β∈(0,1);x1=x,x0=1。
建立的數(shù)字電路模型如圖1所示。
圖1 數(shù)字電路模型Fig.1 Model of digital circuit
由圖1可以看出,該電路圖由3個與門和1個或門組成,一共有6個節(jié)點??紤]節(jié)點的單固定故障和雙固定故障,理論上可以計算出電路中存在的故障有72種。但是,考慮到與或門本身的邏輯功能,有一部分故障是不可測的。
對于與門來說,它的某一個輸入端若存在邏輯固定低電平故障,則它的輸出端在正常情況下應該是邏輯低電平。但是,假如這個與門的輸出端同時也出現(xiàn)邏輯固定低電平故障,則對于這一類雙固定故障,它是不可測的。因此,排除這類故障,實際上可測的故障有66種。
測試生成是數(shù)字電路故障診斷研究的核心問題之一。將測試矢量作為正常電路的輸入,觀察電路輸出值;在相同情況下,把它們加到故障電路的輸入端,若此時故障輸出值與正常輸出值不一致,則這樣的電路輸入稱為這一類故障的測試矢量。每一個故障可以有多個測試矢量,而每一個電路輸入也可以是多個故障的測試矢量[5]。
3.2.1 單故障測試生成
在所設計的電路模型中,共有6個節(jié)點,這6個節(jié)點都有可能出現(xiàn)故障。而每一個節(jié)點出現(xiàn)的故障類型有(s-a-0)型故障和(s-a-1)型故障這兩種情況。因此,可能存在的單故障有12個。
布爾差分法求解每個故障的測試矢量步驟如下。
①列出電路輸出對每一個故障的一階布爾差分。
②列出診斷每一個故障的測試矢量的計算公式。
③用Matlab實現(xiàn)每一個故障測試矢量的生成。
④假如需要求解A(s-a-1)故障的測試矢量,圖1所示電路的輸入Y的邏輯表達式為:
⑥最后,利用Matlab編程實現(xiàn)。
定義矩陣a:
把A0賦值為一個8行3列的零矩陣。對于a中的某一行,它的第一列數(shù)表示為A輸入,第二列數(shù)表示為B輸入,第三列數(shù)表示為C輸入。接著,把a中的每一行元素代入求解故障A(s-a-1)的測試矢量集的方程中。把滿足這個方程的第n行元素相應地賦值給A0矩陣中的第n行元素。運行程序后,可以從矩陣A0中得出故障A(s-a-1)的測試矢量集[6]。
由于矩陣A0中第一行本身就是零元素。因此,賦值結束后,第一行仍然是零元素,不能確定這一行元素是否為故障A(s-a-1)的一個測試矢量。最直接的辦法是將這一行的元素代入測試矢量集的方程中進行驗證,如果滿足,則這一行也屬于故障A(s-a-1)的一個測試矢量;反之,則不屬于。同理可求解出其他11種單故障的測試矢量集。記錄這些測試矢量,以備試驗需要[7]。
3.2.2 雙故障測試生成
設計的電路中存在54種可檢測的雙故障。而求解雙故障的測試矢量集的方法步驟與單故障的求解過程類似。
假設需要求解故障A(s-a-1)、故障B(s-a-1)的測試矢量集,則Y相對于節(jié)點B的一階布爾差分為:
Y對于A、B節(jié)點的二階布爾差分為:
故障A(s-a-1)、故障B(s-a-1)的測試矢量集為:
則故障A(s-a-1)、故障B(s-a-1)的測試矢量集為T={001,010,100}。
采用Matlab解測試矢量集的過程與單故障類似,同樣需要定義矩陣a,以及用來存儲測試矢量集的零矩陣A1、B1,然后將矩陣a經(jīng)過循環(huán)代入測試矢量集方程,把符合條件的行元素賦值給矩陣A1、B1中相應的行。最終可以從矩陣A1、B1中得出故障A(s-a-1)、故障B(s-a-1)的測試矢量集。同理可以解出其他雙故障的測試矢量集。
在求解雙故障過程時,不管兩個節(jié)點在電路中有任何邏輯關系,它們的二階布爾差分都必須把這兩個節(jié)點看成是獨立變量,否則就會得出錯誤的測試矢量[8]。
在QuartusII上建立模塊,實現(xiàn)故障仿真、故障檢測和顯示的功能。其中涉及到的模塊有消抖模塊、分頻模塊、偽隨機序列生成模塊、按鍵模塊、故障生成模塊、電路模塊、檢測模塊和顯示模快。總體設計模塊流程圖如圖2所示。
圖2 總體設計模塊流程圖Fig.2 The whole design module flowchart
利用測試矢量來進行故障檢測,設計中就必須考慮如何自動生成所有的測試矢量。對于3輸入的邏輯電路,它的所有可能輸入有8種。用偽隨機碼生成器來模擬電路的輸入。3級m序列生成器如圖4所示。
圖3 3級m序列生成器Fig.3 The generator of 3-layer m sequence
利用開發(fā)板上的按鍵來生成所需要的故障?;谶@個思想,設計了1個3選1選擇器來仿真邏輯固定高電平故障或邏輯固定低電平故障。此外,按鍵模塊還有1個輸入。在操作過程中,通過按鍵輸入來改變其輸出值,利用這些輸出值來控制選擇器的工作狀態(tài)。
狀態(tài)機及其設計技術是數(shù)字系統(tǒng)的重要組成部分。在設計中,定義了133種狀態(tài),其中66個是故障狀態(tài);另外66個是故障進入下一個狀態(tài)的中間態(tài);還有一個狀態(tài)是初始狀態(tài),即此電路正常,沒有任何故障。故障仿真模塊的原理框圖如圖4所示。
圖4 故障仿真模塊原理Fig.4 Principle of fault simulation module
對于某一故障,當輸入為它的一個測試矢量時,記錄此時各個節(jié)點的邏輯值作為這個故障的故障列表信息;當所有測試矢量都列表填入故障列表中時,故障列表信息就完備了。
每一個故障的故障列表與其他故障都是不同的。利用這種完備的故障列表信息,可以準確地確定這個故障的類型。將所有故障的完備故障列表信息存入檢測模塊,它的輸入端用于接收各個節(jié)點的邏輯值信息,并對這些輸入進行判斷,如果電路出現(xiàn)的故障列表與某個故障的故障列表信息一致,則說明電路中存在這個故障。檢測模塊的工作原理框圖如圖5所示。
圖5 檢測模塊原理框圖Fig.5 Principle of the detection module
設計所用的開發(fā)板FPGA是EP2C8Q208C8,開發(fā)板的8個動態(tài)數(shù)碼管是共陽型。設計中用到了6個數(shù)碼管。通過動態(tài)顯示模塊,將檢測模塊檢測到的故障類型在4個數(shù)碼管上加以顯示,另外兩個數(shù)碼管用來顯示故障標號。
故障C(s-a-1)、E(s-a-0)采用QuartusII波形仿真后得到的界面如圖6所示。圖6中,dx代表段選管腳的輸入值,px代表片選管腳的輸入值。將整個電路編譯后下載到開發(fā)板,數(shù)碼管可以動態(tài)顯示出C1E0,表示檢測到電路中存在該故障。
圖6 故障波形圖Fig.6 Fault waveforms
布爾差分法是生成故障測試矢量的重要方法,利用它們可以求解出任何一種邏輯電路的故障測試矢量,包括時序邏輯電路和組合邏輯電路[9]。由于工作量的問題,本設計選擇的是對較為簡單的組合邏輯電路進行故障分析與檢測。利用狀態(tài)機以及選擇器的組合,成功地設計出一種可以仿真故障的方法。該方法能夠按照設計者的意愿來生成任何一種故障,避免了通過編程仿真帶來的麻煩;其次,以偽隨機碼生成器的輸出作為電路的模擬輸入,不僅可以實現(xiàn)設計要求,而且提高了設計的準確性以及檢測結果的權威性[10]。
[1]秦福星,周慶年,安江波,等.基于測試向量的數(shù)字電路故障診斷[J].船電技術應用研究,2010(10):47-48.
[2]郭希維,蘇群星,谷宏強.數(shù)字電路測試中的關鍵技術研究[J].科學技術與工程,2006(18):2903-2906.
[3]黃考利,連光耀,魏忠林.基于仿真級數(shù)的故障知識獲取方法研究[J].兵工學報,2005(4):573-576.
[4]楊士元.數(shù)字系統(tǒng)的故障診斷與可靠性設計[M].北京:清華大學出版社,2000:29 -35.
[5]Su Wei,Dong Nanping,F(xiàn)an Tongshun.The development of interface adapter in the digital circuit fault diagnosis system based on VXI[J].Power Electronics and Intelligent Transportation System(PEITS),2009(9):431 -434.
[6]周繼承,黎飛,肖慶中.數(shù)字電路故障診斷[J].應用科技,2008(2):29-32.
[7]吳麗華,李濤,鄒海英,等.多故障測試生成的一種簡化算法[J].電機與控制學報,2008(3):350-353.
[8]Su Wei.Research for digital circuit fault testing and diagnosis techniques[J].IEEE Transactions on Test and Measurement,2009:330-333.
[9]余黨軍,鄭茂生,陳偕雄.基于D算法的組合電路單故障檢測的代數(shù)方法[J].杭州電子工業(yè)學院學報,2000,20(6):373 -378.
[10]陳永剛,張彩珍.組合電路的故障測試生成D算法研究[J].蘭州鐵道學院學報,2002(6):14-16.