陳江波,黃建忠
(上海海事大學(xué) 物流工程學(xué)院,上海201306)
近年來(lái),智能手機(jī)已經(jīng)成為人們必不可少的一種手持設(shè)備。隨著科技的進(jìn)步,智能手機(jī)通過在手機(jī)中嵌入各種傳感器,如攝像頭、加速度傳感器、方向傳感器、磁力計(jì)、三軸陀螺儀、距離傳感器等,開始具備越來(lái)越多、越來(lái)越強(qiáng)大的功能。開發(fā)、利用手機(jī)中的這些傳感器已經(jīng)逐步形成了一種趨勢(shì)。
本文介紹了一種基于智能手機(jī)傳感器在工業(yè)領(lǐng)域中的應(yīng)用開發(fā)案例,在Android平臺(tái)下開發(fā)了基于加速度傳感器的應(yīng)用,即將手機(jī)做成測(cè)振儀。通過對(duì)檢測(cè)到的電機(jī)振動(dòng)信號(hào)的分析,可初步判斷電機(jī)的運(yùn)行狀況。另外,利用快速傅里葉變換(FFT)對(duì)振動(dòng)信號(hào)進(jìn)行處理,可為進(jìn)一步更加可靠的判斷電機(jī)的運(yùn)行狀況提供數(shù)據(jù)。
振動(dòng)是設(shè)備運(yùn)行過程中的普遍現(xiàn)象,特別是旋轉(zhuǎn)設(shè)備,無(wú)論是正常狀態(tài)還是故障狀態(tài),其運(yùn)行過程中均會(huì)產(chǎn)生振動(dòng)。例如,旋轉(zhuǎn)電機(jī)在運(yùn)轉(zhuǎn)時(shí)由于機(jī)械摩擦、轉(zhuǎn)子不平衡、電磁力等原因會(huì)使定轉(zhuǎn)子產(chǎn)生振動(dòng)。顯然,振動(dòng)是許多設(shè)備運(yùn)行時(shí)所固有的,其中包含設(shè)備運(yùn)行狀態(tài)的豐富信息。采集分析這些振動(dòng)信號(hào),提取有關(guān)信息,能夠有效地檢測(cè)電機(jī)的運(yùn)行狀態(tài)[1]。
傳統(tǒng)的振動(dòng)檢測(cè)方式,一般是在電機(jī)的檢測(cè)位置安裝傳感器,將采集到的數(shù)據(jù)實(shí)時(shí)傳送到上位機(jī),對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)分析、處理,判斷電機(jī)運(yùn)行是否正常。隨著科技的進(jìn)步,各大公司相繼開發(fā)出了便攜式的、用于檢測(cè)振動(dòng)參量的測(cè)振儀。測(cè)振儀可以將檢測(cè)到的加速度、速度、位移顯示出來(lái),通過將測(cè)振儀與外接濾波器相連,可對(duì)振動(dòng)信號(hào)進(jìn)行頻譜分析。
本案例中選擇以速度作為特征量,利用手機(jī)加速度傳感器,將采集到的加速度信號(hào)轉(zhuǎn)換為速度信號(hào),將速度信號(hào)數(shù)據(jù)存儲(chǔ)起來(lái),通過調(diào)用繪圖函數(shù),繪制速度的實(shí)時(shí)時(shí)域波形圖,再通過FFT對(duì)速度信號(hào)進(jìn)行快速傅里葉變換,繪制速度信號(hào)的實(shí)時(shí)頻譜圖。分析電機(jī)的振動(dòng)速度時(shí)域波形和頻譜圖,從而判斷電機(jī)的運(yùn)行狀態(tài)。
本案例在Eclipse軟件下,運(yùn)用Java語(yǔ)言進(jìn)行開發(fā),最終的測(cè)振儀應(yīng)用程序界面如圖1所示。當(dāng)點(diǎn)擊“Start”按鈕時(shí),應(yīng)用程序開始采集、處理數(shù)據(jù)以繪制速度的實(shí)時(shí)時(shí)域波形及頻譜圖,同時(shí),“Start”按鈕變?yōu)镾top狀態(tài),再點(diǎn)擊按鈕會(huì)恢復(fù)原來(lái)狀態(tài),應(yīng)用程序停止繪圖。點(diǎn)擊“Clear”按鈕會(huì)實(shí)現(xiàn)清屏,點(diǎn)擊“Exit”按鈕會(huì)進(jìn)入“是否選擇退出”應(yīng)用程序界面,進(jìn)而可退出應(yīng)用程序?,F(xiàn)簡(jiǎn)要介紹一下分步開發(fā)的過程。
圖1 測(cè)振儀應(yīng)用程序界面
開發(fā)過程中首先要進(jìn)行數(shù)據(jù)的采集,Android智能手機(jī)中的加速度傳感器類型為Sensor.TYPE_ACC ELEROMETER,可通過andr oid.har d ware.Sensor-Event返回加速度傳感器的值,其返回值為浮點(diǎn)類型,單位為 m/s2,有三個(gè)方向的值,分別是:val ues[0]:x軸方向加速度;values[1]:y軸方向加速度;values[2]:z軸方向加速度。加速度傳感器感應(yīng)加速度的方向大致如圖2所示,其中:x方向?yàn)槭謾C(jī)的水平方向,右為正;y方向?yàn)槭謾C(jī)的水平垂直方向,前為正;z方向?yàn)槭謾C(jī)的空間垂直方向,天空的方向?yàn)檎?,地球的方向?yàn)樨?fù)。
另外,需要注意的是,由于地球的重力加速度g(值為9.8 m/s2)的影響,當(dāng)手機(jī)水平朝上放置時(shí),z軸的返回值應(yīng)為9.8 m/s2,x軸和y軸沒有此限制。
圖2 PID控制器模型圖
要與傳感器進(jìn)行交互,應(yīng)用程序必須注冊(cè)以偵聽該傳感器相關(guān)的活動(dòng)。相關(guān)代碼如下:
//注冊(cè)加速度傳感器
protected void on Resu me(){
super.on Resu me();
sensor Mg.register Listener(mView,gravity Sensor,Sensor Manager.SENSOR_DELAY_UI);
}
//注銷加速度傳感器
protected void on Pause(){
super.on Pause();
sensor Mg.unregister Listener(mView);}
上述代碼中,在on Resu me()方法中使用對(duì)Sensor Manager類的引用通過register Listener方法注冊(cè)傳感器更新。當(dāng)應(yīng)用程序暫停時(shí),在on Pause()方法中使用對(duì)Sensor Manager類的引用通過unregister L-istener方法注銷偵聽器,這樣以后就不會(huì)再收到傳感器的更新。
加速度傳感器傳回三個(gè)方向上的值,本案例中,只使用y軸的返回值做電機(jī)振動(dòng)的檢測(cè)。
國(guó)家標(biāo)準(zhǔn)和國(guó)際標(biāo)準(zhǔn)規(guī)定以振動(dòng)速度作為電機(jī)振動(dòng)等級(jí)和規(guī)定振動(dòng)限值。因此,需要將采集到的加速度信號(hào)轉(zhuǎn)化為速度信號(hào),本案例中采用梯形法進(jìn)行加速度信號(hào)的轉(zhuǎn)換。
式中,Δt表采樣周期;x(i)表示i時(shí)刻采樣的加速度值;y(i)表示經(jīng)過梯形變換后得到的i時(shí)刻的振動(dòng)速度。
代碼的實(shí)現(xiàn)如下:
Long cur Ti me=System.current Ti me Millis();if(cur Ti me-last Update>1){
c1=gravity[1];
c=1*(c1+c2)/2;
c2=c1;
last Update=cur Ti me;
}
上述代碼中,先利用System.current Ti me Millis()取得當(dāng)前系統(tǒng)的時(shí)間cur Ti me,當(dāng)時(shí)間間隔為1 ms時(shí)(本案例選取采樣時(shí)間為1 ms),保留原來(lái)的數(shù)據(jù),同時(shí)接收新的數(shù)據(jù),按照公式(1)得到的振動(dòng)速度為c=1×(c1+c2)/2,如此循環(huán)下去。
將數(shù)據(jù)處理后以波形圖顯示,方能更好地觀測(cè)電機(jī)內(nèi)部的運(yùn)行狀況。本案例中選取采樣頻率為Fs=1 000 Hz,使用Android開發(fā)繪制中的View類進(jìn)行繪圖,將處理后的數(shù)據(jù)存儲(chǔ)在一個(gè)數(shù)組中,通過調(diào)用on-Draw()方法進(jìn)行實(shí)時(shí)繪圖。具體的實(shí)現(xiàn)代碼為:
if(mList.size()>=2){
f or(int i=0;i< mList.size()-1;i++){
canvas.drawLine(mList.get(i).x,OFFSET_TOP+CHAR/2-mList.get(i).y*CHARTH/10000,mList.get(i+1).x,OFFSET_TOP+CHARTH/2-mList.get(i+1).y*CHARTH/10000,paint);
}
}
上述代碼中,將處理好的數(shù)據(jù)存入對(duì)象mList中,當(dāng)mList中的數(shù)據(jù)大于等于2時(shí),使用on Draw()方法中的canvas.drawLine進(jìn)行繪圖。
另外,在主線程之外,又創(chuàng)建了一個(gè)線程,在其中通過調(diào)用Invalidate()方法,每隔0.01 ms重新刷新一下屏幕。其實(shí)現(xiàn)的代碼如下:
public void r un(){
mView.invalidate();
m Handler.post Delayed(t his,(l ong)0.01);
}
時(shí)域波形實(shí)際上綜合反映了振動(dòng)信號(hào)的振幅、頻率和相位。用時(shí)域波形來(lái)表示振動(dòng)情況最為簡(jiǎn)單、直觀,并且通過對(duì)時(shí)域波形的觀察,也可以判斷出一些常見的故障。但是時(shí)域波形圖也有其不足之處,即不太容易看出所包含信息與故障的聯(lián)系。這時(shí)需要將時(shí)域信號(hào)利用傅里葉變換變?yōu)轭l域信號(hào),以頻率為變量,對(duì)信號(hào)進(jìn)行頻譜分析。
在實(shí)際采樣中所采集的信號(hào)是離散的并且是有限的,對(duì)數(shù)字振動(dòng)信號(hào)進(jìn)行傅里葉變換時(shí)需要采用離散傅里葉變換(DFT)[2]。
N點(diǎn)序列x(n)的N點(diǎn)離散傅里葉變換可表示為
式中,WN=e-j2π/N;x(n)和X(k)可以是實(shí)數(shù)或復(fù)數(shù)。
快速傅里葉變換(FFT)是計(jì)算離散傅里葉變換的一種快速算法。本案例中采用按時(shí)間抽取的FFT算法。令信號(hào)序列的長(zhǎng)度為N=2 M,其中M是正整數(shù),可以將時(shí)域信號(hào)序列x(n)分解成兩部分,一是偶數(shù)部分x(2n),另一是奇數(shù)部分x(2n+1),其中n=0,1,2,...,-1。于是信號(hào)序列x(n)的離散傅里葉變換可以用兩個(gè)N/2抽樣點(diǎn)的離散傅里葉變換來(lái)表示和計(jì)算??紤]到W2N=WN/2以及離散傅里葉變換的周期性,式(2)可寫成
其中
由此可見,式(4)是兩個(gè)只含有N/2個(gè)點(diǎn)的離散傅里葉變換,G(k)僅包括原信號(hào)序列中的偶數(shù)點(diǎn)序列,H(k)則僅包括它的奇數(shù)點(diǎn)序列。雖然k=0,1,2,…,N-1,但是G(k)和 H(k)的周期都是 N/2,它們的數(shù)值以N/2周期重復(fù)。
因此,一個(gè)抽樣點(diǎn)數(shù)為N的信號(hào)序列x(n)的離散傅里葉變換,可以由兩個(gè)N/2抽樣點(diǎn)序列的離散傅里葉變換求出。依此類推,這種按時(shí)間抽取算法是將輸入信號(hào)序列分成越來(lái)越小的子序列進(jìn)行離散傅里葉變換計(jì)算,最后合成為N點(diǎn)的離散傅里葉變換。
本案例中選取當(dāng)數(shù)組中N=128時(shí),即進(jìn)行快速傅里葉變換。由于采樣頻率為Fs=1 000 Hz,故本案例中某點(diǎn)n所對(duì)應(yīng)的頻率為:Fn=(n-1)Fs/N,F(xiàn)n所能分辨到的頻率為Fs/N=7.81 Hz。具體的原始信號(hào)的幅值與經(jīng)過頻譜變換之后的幅值的關(guān)系如下:假設(shè)原始信號(hào)的峰值為A,那么FFT的結(jié)果的每個(gè)點(diǎn)(除了第一個(gè)點(diǎn)直流分量之外)的模值都是A的N/2倍。而第一個(gè)點(diǎn)就是直流分量,它的模值是直流分量的N倍。
以下舉例說(shuō)明時(shí)域信號(hào)與頻域信號(hào)兩者之間的關(guān)系。假設(shè)有一信號(hào),含有3 V的直流分量;頻率為50 Hz、相位為30°、幅度為1 V的交流信號(hào);以及一頻率為60 Hz、相位為60°、幅度為2.5 V的交流信號(hào)。其數(shù)學(xué)表達(dá)式如下:
以128 Hz的采樣頻率對(duì)這個(gè)信號(hào)進(jìn)行采樣,總共采樣128點(diǎn)。Fn=(n-1)Fs/N,即每?jī)蓚€(gè)點(diǎn)之間的間距為1 Hz,第n個(gè)點(diǎn)的頻率就是n-1。該信號(hào)有3個(gè)頻率:0 Hz、50 Hz、60 Hz,應(yīng)該分別在第1個(gè)點(diǎn)、第51個(gè)點(diǎn)、第61個(gè)點(diǎn)上出現(xiàn)峰值,其它各點(diǎn)應(yīng)該接近0。其峰值依次為3×128=384、1×128/2=64、2.5×128/2=160。
電機(jī)振動(dòng)的信號(hào)可以看成各個(gè)基波信號(hào)的疊加,經(jīng)FFT變換之后,就可以看出各頻率下信號(hào)的振動(dòng)情況,從而了解電機(jī)的運(yùn)行狀況。
為了驗(yàn)證測(cè)振儀的可靠性,選用淄博大元電機(jī)泵業(yè)有限公司生產(chǎn)的單相微型自吸泵在空載下進(jìn)行振動(dòng)檢測(cè),其額定功率為1.5 k W,額定轉(zhuǎn)速為2 850 r/min。測(cè)量點(diǎn)為電機(jī)本體的水平方向,為了消除誤差,進(jìn)行了多次測(cè)量。圖3為檢測(cè)到的時(shí)域波形及頻譜圖。
從時(shí)域波形圖上可以看出,檢測(cè)到的振速始終在-0.6~+1.0(單位為:mm/s)之間,按照ISO2374和VDI2056的標(biāo)準(zhǔn)及機(jī)器設(shè)備的價(jià)值中對(duì)小型機(jī)器的振動(dòng)標(biāo)準(zhǔn)的劃分,此電機(jī)處于“較好”狀態(tài)。分析頻域波形,提取信號(hào)的頻域特征,可為進(jìn)一步分析電機(jī)的故障提供數(shù)據(jù)。
圖3 檢測(cè)到的時(shí)域波形及對(duì)應(yīng)頻譜圖
本文介紹了一種基于Android平臺(tái)下對(duì)智能手機(jī)中的加速度傳感器在工業(yè)現(xiàn)場(chǎng)中對(duì)檢測(cè)電機(jī)振動(dòng)信號(hào)中的應(yīng)用。通過開發(fā),對(duì)Android平臺(tái)下開發(fā)傳感器的應(yīng)用流程有了一定的了解。總的來(lái)說(shuō),將手機(jī)中內(nèi)嵌的傳感器應(yīng)用于工業(yè)場(chǎng)合是完全可行的,相信在不久的將來(lái)智能手機(jī)及其內(nèi)嵌傳感器的工業(yè)應(yīng)用會(huì)大放異彩。
[1] 馬宏忠.電機(jī)狀態(tài)檢測(cè)與故障診斷[M].北京:機(jī)械工業(yè)出版社,2007.
[2] E.O.布里漢著,譯.快速傅里葉變換[M].西安:科學(xué)技術(shù)出版社,1979.
[3] 何振亞.數(shù)字信號(hào)處理的理論與應(yīng)用[M].北京:人民郵電出版社,1983.
[4] 程乾生.信號(hào)處理的數(shù)學(xué)原理[M].北京:北京大學(xué)出版社,2003.
[5] 王 濟(jì),胡 曉.MATLAB在振動(dòng)信號(hào)處理中的應(yīng)用[M].北京:中國(guó)水利水電出版社:知識(shí)產(chǎn)權(quán)出版社,2006.
[6] 高 凱,王俊社,仇 晶.Android智能手機(jī)軟件開發(fā)教程[M].北京:國(guó)防工業(yè)出版社,2012.
[7] 佘志龍,陳昱勛,鄭名杰,陳小風(fēng).Google Android SDK開發(fā)范例大全(第3版)[M].北京:人民郵電出版社,2011.
[8] 良葛格.Java JDK 5.0學(xué)習(xí)筆記[M].北京:清華大學(xué)出版社,2006.