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