#STM32學習#6D加速度傳感器測量風機震動

1、背景:

需要監測風機的啓動與停止,希望通過測量其振動頻率來輔助判定。

2、傳感器:

傳統的振動傳感器如下圖,其有兩個缺點:一是測量精度低,對於微小的振動不敏感;二是無法測出分頻信號。

選擇使用LSM6DSL加速度/角速度傳感器。傳感器所在的板子爲X-NUCLEO-IKSO1A2。如下圖所示。

 LSM6DSL可以測量出三軸方向的加速度和角速度,而我們監測振動只需要加速度信息。

3、建工程:

首先使用的開發底板是ST官方的MB1136。所有相關的資料會在下方給出鏈接。

習慣使用Stm32cubeMX快速建立工程。根據選用開發板的主芯片型號以及傳感器鏈接的引腳,佔用的資源進行配置。最終一鍵生成工程。(關於如何使用stm32MX,可自行度娘,也可在下方討論)

值得一提的是:

(1)配置I2C時,需要使用“快速模式”,速度設置爲最大(400000Hz),這樣可以加快和加速度傳感器之間的通信。加速度傳感器的輸出頻率也就可以儘可能提升。實際在測試時發現,在最快的IIC通信速度下,傳感器最大可以設置的輸出頻率爲3.33KHz。

(2)配置一箇中斷輸入引腳,接收傳感器數據準備好時發來的中斷。(也可以自行去讀取某狀態位)

(3)ST下載口自帶的串口,波特率爲固定的9600.如果想要更高,需要單獨接線。(我就是單獨接線,設置爲115200)

 

接下來是去工程裏編寫代碼,相信大家都可以編出屬於自己邏輯的代碼。我的邏輯思路如下:

(1)初始化設備和傳感器

(2)傳感器啓動,準備好一組加速度數據(3個數據,X,Y,Z),產生引腳中斷。

(3)F401RE接收到中斷,讀取6個字節(3個加速度的值)。(直接讀取的是補碼的形式,而加速度值有正負,需要我們定義變量時使用int16)

(4)將一組數據(3方向加速度)進行矢量計算,求得其模長ACC。將ACC存入數組直到存滿。(考慮到單片機存儲空間有限,因而採用模長的數組,1024個double數據)

(5)存滿後,不再存儲,置爲標誌位,進行FFT快速傅里葉變換。相關知識參考自:https://blog.csdn.net/yga_airspace/article/details/86688278  。

該鏈接裏面有C語言代碼,可以直接運行。在使用時需要注意輸入參數關係:

FFT需要定義多個與模長數組同樣大小的數組,比較費空間。

double pr[NUM],pi[NUM],fr[NUM],fi[NUM];

 

(6)變換得到的結果被存在pr[1024]中,如果需要觀察變換得到的結果,可以將這個數組裏的double數據 打印到窗口助手中,再用excel觀察變換結果。(打印時,單個數據接換行(\n\r),串口助手中打印的一列數據,直接複製到excel中)。得到的數據列表中第一個爲直流分量,可以刪除。另外因爲某種原因,剩餘數據構成的圖像呈現左右對稱的情況,我們在顯示時只取一半就好。如下圖所示,傳感器放在電腦主機上,測量主機風扇的振動。共計1024個採樣點。輸出頻率爲833Hz。(提高採樣點個數,橫座標會向右移動。提高輸出頻率,橫座標會向左移動)(同樣是1024個採樣點,833Hz輸出頻率對應145,1.66KHz輸出頻率對應72,     3.33KHz輸出頻率對應35)。

(7)橫座標與振動頻率有着直接的關係。我通過模擬輸入數據觀察發現,採樣點數爲1024時,傅里葉變換後得到的峯峯極大值的很座標與實際的頻率一致(略有偏移,可以理解)。

 模擬輸入pr[1024],包括10Hz,20Hz,30Hz,40Hz,50Hz,60Hz,70Hz,80Hz,90Hz。(參考頻率和角速度之間的關係)

for(i=0;i<1024;i++) {
pr[i]=cos(2*PI*0.001*i*10)+cos(2*PI*0.001*i*20)+cos(2*PI*0.001*i*30)+cos(2*PI*0.001*i*40)+cos(2*PI*0.001*i*50)+cos(2*PI*0.001*i*60)+cos(2*PI*0.001*i*70)+cos(2*PI*0.001*i*80)+cos(2*PI*0.001*i*90);
}

下圖只使用了其中的第1~128個點做圖(採樣點數還是1024)

4、編寫上位機

上述顯示的過程有點繁瑣,因而考慮編寫一個上位機用於實時調試。

下位機設備在進行轉換之後,直接通過串口,將數據發送到電腦。(每個double數字都先被轉換爲字符串,以字符串的形式發送。每個數據發送之後,追加發送一個換行符\n,發送完所有數據之後,發送一個'#')

 

上位機編寫,使用的是Qt和C++。具體的實現和源代碼感興趣的童鞋可以問我要一下。

我最方案是,1024個採樣點數組,傳感器3.33KHz輸出頻率。電腦主機的頻率被測爲35Hz(2100轉每分鐘)。

 

純屬個人經驗總結,如有錯誤,歡迎討論!

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章