劉棟,任天平
(鄭州大學機械工程學院,河南鄭州 450001)
六面頂壓機是目前國內超高壓高溫靜壓法合成人造金剛石的主要生產設備。頂錘,主要材料是鎢鈷系列硬質合金,安裝在六面頂壓機活塞的大墊塊頂部使用。當受油缸驅動一組6個頂錘閉合形成高壓腔時,腔體內可達到10~20 GPa以上的壓力和攝氏1 500℃以上的溫度,承受著壓應力、拉應力以及剪切應力,處于超臨界狀態(tài)下工作。由于頂錘內部的缺陷造成的應力集中不能通過塑性變形得到消除,以及頂錘校對不當、合成塊放置不當等外界因素影響,頂錘發(fā)生破裂。如果未及時發(fā)現,進行卸壓停熱操作,將會導致高壓腔內壓力外泄,進而造成碎屑及合成塊飛濺、“放炮”、多個頂錘損壞等危害,帶來巨大的人員傷亡隱患和經濟損失。六面頂壓機頂錘破裂在線無損檢測預報警顯得非常重要,有顯著的經濟意義及社會意義。
現階段對于頂錘破裂的檢測,并無可靠實用的技術,主要是通過生產現場有經驗的合成工通過聽聲音的方式來判斷 (頂錘破裂時,發(fā)出類似鋸條掰斷的聲音),以預防為主。基于此,認為當頂錘產生宏觀裂紋進而產生聲音時或之前,產生了音頻段的特征信號。該特征信號可以是音頻信號或者是頂錘破裂所產生的振動信號,文中采集的是振動信號而非音頻信號以屏蔽環(huán)境噪聲的干擾。經過現場信號采集,確定了頂錘破裂時存在該頻譜分布異常的特征信號。通過對該特征信號的識別,實現頂錘破裂的報警。
作者提出一種基于聲卡的頂錘破裂實時檢測系統(tǒng)。采用計算機聲卡而非傳統(tǒng)的數據采集卡完成數據采集;采用C++多線程技術、C++和MATLAB混合編程的方式完成軟件設計;利用MATLAB強大的信號分析能力,編寫信號分析識別算法,封裝成COM組件,供C++調用,完成信號分析以實現實時檢測報警。
通過功能分析,頂錘破裂在線檢測報警系統(tǒng),在系統(tǒng)組成上分為傳感檢測模塊、信號調理模塊、數據采集模塊、數據分析模塊、人機顯示模塊、報警輸出模塊。如圖1所示,傳感器信號通過信號調理電路,利用計算機的線路輸入 (line in)作為信號輸入端口,將獲取的A/D采樣數值傳入計算機中,進而通過編寫的應用程序進行相關分析,若檢測識別到頂錘破裂信號,報警輸出。另外,聲卡測量信號的引入應采用音頻電纜或者屏蔽電纜以降低噪聲干擾。

圖1 系統(tǒng)組成
傳統(tǒng)數據采集工作主要由專用的數據采集卡完成,價格昂貴并需要單獨的驅動程序完成數據采集和獲取。大多數分辨率為12/16位,并且受計算機插槽接口、地址、中斷資源的限制,擴展性較差,同時在電磁干擾較強的場合可能無法對其進行電磁屏蔽,造成采樣數據失真[1]。
而計算機聲卡就是一款很好的雙通道數據采集系統(tǒng),同時具有A/D、D/A以及低通濾波功能,價格低廉、兼容性好、靈活通用、性能穩(wěn)定。另外聲卡使用DMA方式傳遞數據,極大地降低了CPU的占用率。一般聲卡的16位轉換精度對于許多工程測量和科學實驗來講已經足夠了。當然聲卡數據采集也具有其局限性,只適合采集音頻域的信號,即輸入信號范圍為20~20 000 Hz的信號;不允許任意設定采樣頻率,因此不能控制整周期采樣,需要通過相應的信號處理方法來彌補非整周期采樣帶來的問題[2]。雖然現今一些聲卡的采樣率提高到了96/192 kHz甚至更高,但是價格昂貴,而且某些是通過重采樣技術轉換得到的。
在頂錘破裂在線檢測應用中,采集的振動信號頻率位于音頻段,同時現場的壓機控制系統(tǒng)帶有工控機,采用計算機聲卡完成數據采集是一種很好的選擇。聲卡一般有mic in和line in兩個音頻輸入口。聲卡的mic in輸入端有高增益的放大器,最大輸入信號強度50 mVrms,容易引入噪聲,使信號有較大失真,且容易造成信號過負荷;line in線路輸入抗干擾強,輸入電壓不超過1.5 Vrms[3]。故使用line in口作為信號輸入端口,其干擾小且動態(tài)特性良好。
但是直接測量信號可能過于嘈雜或危險,信號調理電路將信號處理成可以直接輸入聲卡line in口,主要包括信號的隔離和線性化處理、放大/衰減、阻抗匹配、濾波等,以使信號能夠正確地被聲卡所識別。
而后聲卡將信號采樣數據存入數據存儲單元,信號分析模塊對信號進行識別分析,檢測到報警信號,通過報警輸出模塊,通知壓機控制系統(tǒng)進行停熱、卸壓等故障操作。
關于軟件設計,采用C++和MATLAB混合編程的方式,以C++為主,利用多線程技術和COM組件技術,結合兩種編程語言特點,取長補短,提高程序運行效率,完成對信號的采集分析識別。
如圖2所示,開啟采集線程,利用Windows音頻API函數驅動聲卡完成數據采集操作,將采樣數據存入內存數據緩沖區(qū);預處理線程將從內存緩存區(qū)取出數據,進行端點檢測等預處理,然后將疑似信號送入分析線程;分析線程完成信號識別,進而通過報警模塊輸出報警信號。

圖2 系統(tǒng)軟件架構
數據交互在內存中進行,以保證數據的快速存取。信號識別分為兩級,預處理完成算法相對簡單的前期識別處理,只有疑似信號才被送入分析線程,進行相對復雜的特征提取及模式識別算法實現,完成相對耗時的識別操作。通過這種方式,提高程序運行效率,保證信號識別處理的實時性。
通過C++和MATLAB混合編程的方式,利用MATLAB固有的函數和算法,縮短了程序開發(fā)周期;采用C++多線程技術,有效彌補了MATLAB不能并行工作的特點;另一方面,MATLAB是一種解釋性執(zhí)行語言,通過將其編寫的算法封裝成COM組件,某種程度上提高其執(zhí)行效率[4]。
信號調理電路將傳感器信號處理成可以直接輸入聲卡采集的信號,送入聲卡的line in口完成A/D轉換。信號調理電路由高通濾波器、兩級放大電路、低通濾波器等部分組成,完成阻抗匹配、幅度調節(jié)及信號濾波。
3.1.1 阻抗匹配
外電路阻抗和聲卡阻抗之間的對應關系對送入聲卡的信號質量有顯著影響。為了獲得可接受的效果,外電路的輸出阻抗必須小于聲卡的輸入阻抗。否則部分或者全部信號強度將會因為負載效應丟失,大部分聲卡的輸入阻抗為60~2 000 Ω[3],可以利用運放的輸出阻抗無限小的特點,完成阻抗匹配。
3.1.2 幅度調節(jié)
保證輸入電壓范圍不超過1.5 Vrms,不超出聲卡line in口測量范圍。為了提高輸入阻抗,降低輸出阻抗,采用兩級放大電路,第一級采用同相放大器,第二級采用反相放大器。同相放大器具有很高的輸入阻抗,對輸入信號源影響很小,輸入的信號電流很小,信號電壓不會有太大的損失;反相放大器輸出阻抗小,和聲卡輸入端完成阻抗匹配。兩級電路按照1.5 Vrms來考慮選取電阻參數。
3.1.3 濾波
高通濾波器由一個小電容 (1 μf)和大電阻 (1 MΩ)組成一個RC濾波電路來實現,主要用于濾除工頻干擾和低頻噪聲。
低通濾波采用二階壓控型低通濾波器,單位增益,主要用于降低高頻干擾,根據特征信號頻率選擇截止頻率。整個電路除了有關電阻電容外,選取高性能運放lm358,完成電路設計。
與一般的數據采集卡不同,聲卡A/D任務通常都是連續(xù)狀態(tài)的。為了節(jié)省CPU資源,計算機的CPU并不是在每次聲卡A/D結束后都要響應一次中斷,而是采用了緩沖區(qū)的工作方式[2]。
待測信號源源不斷地送入聲卡,創(chuàng)建3個音頻緩沖區(qū),采樣數據保存在音頻緩沖區(qū)中。當一個緩沖區(qū)滿的時候,該緩沖區(qū)置滿標志位,發(fā)送MM_WIM_DATA消息,將該緩沖區(qū)控制權歸還給程序,自動將采樣數據存入下一個緩存區(qū),并執(zhí)行waveInOpen函數指定的回調函數。在回調函數中,將緩沖區(qū)數據移入內存采樣數據緩沖區(qū),通知異步線程進行處理,并再次調用waveInAddBuffer將緩存區(qū)重新填入音頻數據緩存隊列,以實現循環(huán)采樣,從而保證采樣不間斷,采樣數據不丟失。
處理流程如圖3所示,表1列出來用到的Windows音頻 API函數[2]。

圖3 聲卡采集流程圖

表1 Windows音頻API函數
需要注意的是,調用waveInPrepareHeader函數準備緩沖區(qū),是采用堆分配的方式,為其分配的內存區(qū)域被鎖定了,無法通過delete或者free來釋放了,必須調用waveInUnprepareHeader函數才能解鎖定,然后才能釋放。同時在退出系統(tǒng)停止采集時,需要首先調用waveInReset函數將內存從waveInAddBuffer函數的限定中釋放,然后再使用waveInUnprepareHeader釋放,最后調用delete或者free釋放內存空間。
通過對現場提取的信號分析,可分為3類:噪聲、近似信號、裂錘信號。噪聲,是指工頻干擾等引入的雜音背景聲,能量小;近似信號,是指環(huán)境噪聲等裂錘信號,能量較大。
圖4為采集到的信號,分析發(fā)現信號具有短時性特點,事件長度在40~150 ms。在某些短時段呈現隨機噪聲特點,在某些短時段由呈現出周期性信號特性,其他時段為兩者混合。只有在短時間內,信號才較平穩(wěn)。因此對信號的分析識別,必須建立在短時性的前提下,分為兩部分來實現。

圖4 采集得到的信號
預處理操作,主要進行時域分析,主要任務是端點檢測,獲取近似信號和裂錘信號的起點和終點,從而截取信號,通知信號分析異步線程對其進行分析。有效的端點檢測能夠更有效地對信號進行分析訓練和識別,大大減少識別的運算復雜度,提高程序運行效率,保證實時性。這里采用改進的短時能量和短時平均過零率雙門限方法實現,采用動態(tài)閾值確定門限值,運算小、易于實現并且魯棒性較好,有較好的識別效果。圖5為短點檢測算法MATLAB仿真效果圖。另外一方面,針對裂錘信號短時相關函數、短時頻譜等時域特征不同進行信號初步篩選。

圖5 MATLAB斷點檢測算法測試
對截取出來的信號進行分析,通過時域及頻域特征提取,完成信號識別。分析發(fā)現,特征段頻譜分布明顯不同。利用FFT進行頻譜分析時,為保證頻域分辨率,需要足夠的時域數據序列,在44.1 kHz的采樣率下,取4 096點 FFT,得到大約44.1 kHz/4 096=10.77 Hz的頻率分辨率。同時為了減輕譜泄漏影響,需要加窗。但要注意應用窗函數的時候,頻率分辨率本質上會降低,高能量的譜分量還會遮蔽低能量的譜分量,特別當原始時間數據的平均值為非零時更加明顯,這與直流分量DC飄逸有關。通過計算時間序列的平均值并從原始序列的每一個樣點中減掉這個平均值可以消除這個問題 (注意平均和減的過程必須在加窗前進行)[5]。對截取出來的信號分析算法是采用MATLAB語言編寫的,將其封裝成COM組件以供調用[3]。
圖6為聲卡數據采集及調用COM組件多線程處理的程序效果圖,設定緩沖區(qū)大小為4 096,采樣頻率為44.1 kHz,CPU為雙核1.8 GHz。這樣92.9 ms完成一次采樣,開啟線程調用COM組件完成數據分析 (4 096點FFT及端點檢測)。測試發(fā)現第一次調用COM組件用時較長,包含初始化COM庫、創(chuàng)建COM接口實例以及調用COM方法,這一部分可以放到程序初始化過程中進行。初始化完成之后,調用COM組件封裝的函數進行信號分析時,最長用時在20 ms左右,浮動變化,這是由于Windows并非為實時操作系統(tǒng),系統(tǒng)為線程按照優(yōu)先級分配時間片,執(zhí)行相應任務。因此可以創(chuàng)建相應的循環(huán)隊列數據結構類,將預處理截取的數據送入循環(huán)隊列,順序處理,從而提高時間容錯能力[6]。

圖6 信號采集與調用COM組件測試
結合金剛石六面頂壓機頂錘工作場合及特性,提出一種基于聲卡的頂錘破裂檢測方案,利用聲卡采集頂錘工作過程中的振動信號,采用C++和MATLAB混合編程的方式完成信號實時采集分析。該方案大大降低了軟硬件成本,可擴展性強,并已得到工程應用,處于測試階段,可行性得到了驗證。但是在為提高信號識別的準確度而采用較復雜的信號分析算法時,實時性有待提高,需要進行算法優(yōu)化以及進行實時操作系統(tǒng)移植予以解決。
[1]魏勇,孫士平.基于LabView與USB的虛擬儀器接口設計[J].現代電子技術,2009,31(8):163.
[2]田敏,李江全,鄧江濤,等.案例解說MATLAB典型控制應用[M].北京:電子工業(yè)出版社,2010.
[3]蔣程鵬,呂建敏.基于LABVIEW的脈搏測試儀[J].醫(yī)療裝備,2009(10):13-15.
[4]張亮,王繼陽.MATLAB與 C/C++混合編程[M].北京:人民郵電出版社,2008:113-139.
[5]LYONS Richard G.數字信號處理[M].朱光明,程建遠,劉保童,等,譯.北京:機械工業(yè)出版社,2006.
[6]CHILDS Jeffrey S.C++類和數據結構[M].張杰良,譯.北京:清華大學出版社,2009.