1. 程式人生 > >感測器系列之4.1振動感測實驗

感測器系列之4.1振動感測實驗

4.1 振動感測實驗

一、實驗目的
  1. 掌握LPC2378晶片的程式設計方法
  2. 掌握震動感測器的使用方法
  3. 掌握震動感測器在實際中的應用。
二、實驗材料
  1. 具有串列埠通訊的電腦一臺
  2. ADS1.2 開發環境
  3. J-Link-ARM模擬器一個
  4. LPC2378節點板一個
三、實驗原理

  振動感測器實驗環境由PC機(安裝有Windows XP作業系統、ADS1.2整合開發環境和J-Link-ARM-V410i模擬器)、J-Link-ARM模擬器、NXP LPC2378實驗節點板、振動感測器採用振動開關SW-460、實驗模組和LCD顯示實驗模組組成,如圖4.1.1所示。

這裡寫圖片描述
圖4.1.1 感測器實驗環境

1.電路原理圖
  如圖4.1.2所示,為本次試驗所用振動感測器(振動開關)SW-460的晶片控制引腳圖;圖4.1.3為簡化的振動感測器(振動開關)SW-460示意圖;圖4.1.4給出振動感測器(振動開關)SW-460的實物模型圖,方便同學們理解振動開關(振動開關)SW-460的內部組成以及各個部分的功能;表4.1.1為振動感測器(振動開關)SW-460的組成原件的規格資訊。
這裡寫圖片描述
圖 4.1.2振動感測器引腳接線圖

圖 4.1.3振動感測器簡化電路圖

這裡寫圖片描述
圖 4.1.4振動感測器內部構造圖

表4.1.1振動感測器原件規格
專案名 品名 規格、材質 外表處理
A 珠子 青銅或不鏽鋼 底層鍍鎳表面鍍金或銀
B 銅管 青銅 底層鍍鎳表面鍍金或銀或鎳
C 基座 ABS或者PC 透明或者白色
D 套管 熱縮套管 黑色或其他
E 導針 硬青銅導針 底層鍍鎳表層鍍金
F 導針 硬青銅導針 底層鍍鎳表層鍍錫


  如表4.1.1所示所示,為振動開關SW-460構造部件的規格。Sw-460的效能詳細引數如下所述:
(1) 本開關使用金屬材質製造電氣特性與水銀開關近似,但沒有水銀開關的危險性及環保問題,而有晃動時單向導通之相同特性。裝配使用更為方便安全。

(2) 工作特性:金色–端為(ON)導通觸發端,銀色一端為(OFF)開路端,當受到外力搖晃而達到適當晃動力時或金色一端設定角度低於水平適當角度時,導通電氣特性要恢復開路狀熊(OFF)時,開關設定環境必須為靜止,且金色一端設定角度需低於水平10度。

(3) 當開關以水平設定,晃動時可輕易觸發;而當銀色一端設定向下時,晃動則極不易觸發。

(4) 本開關適用於觸發小電流電路不適用於當電源開關。

(5) 開關外觀以熱縮套管封閉可防塵–防潮。

(6) SW-460型開關比SW-200型有較長的導通時間駐較大電流。

(7) SW-460D 加長型雙珠開關有更好的導通效果。


這裡寫圖片描述
圖 4.1.5感測器應用例項

2.物理原理
  振動感測器的基本工作原理是:當檢測到機械振動訊號後,它在電路的配合下,將機械振動訊號轉換為電訊號的輸出。根據檢測振動的方法不同,出現了不同轉換方式的振動感測器。常用的振動感測器有下列幾種形式:
  
(1) 壓電片諧振式振動感測器,壓電片諧振式振動感測器使用壓電片直接將振動訊號轉換為電訊號輸出。

(2) 機械式振動感測器,機械式振動感測器採用最基礎的振動檢測方式,其結構是在一個金屬的圓筒內放置一個由彈簧連線的振動金屬球(兩者不接觸),分別從兩個部分引線作為訊號輸出的兩個電極。當彈簧金屬球受到振動以後,與外界的振動訊號發生諧振,金屬球與圓筒內壁相碰撞,在連線點上便可輸出一個電訊號。

(3) 全方位微型振動感測器,微型振動感測器結構仍然採用了機械式振動感測器的結構形式,不同的是將金屬圓筒改用耐氧化的金屬材料並作成單端封閉的管狀結構,兩個單端封閉的管狀體由中間的管狀絕緣體連線成一體,其空間密封一根質量很輕的碳棒,兩個半封閉的金屬圓筒上引出兩個電極。感測器受到振動後,碳棒振動忽而接通兩個電極,忽而斷開兩個電極。在電路的配合下,振動訊號轉換為電訊號輸出。

(4) 電磁感應式振動感測器,電磁感應式振動感測器是利用電磁感應的原理設計的一種振動感測器,其結構由永久磁鐵和一個線圈組成,根據磁鐵固定和位移又分為靜磁結構和動磁結構兩種形式。動磁結構的線圈同定不動.當振動出現後.永久磁鐵振動位移,從而引起線圈中的磁通量發生變化,線上圈中產生感生電動勢;靜磁結構的線圈固定在一塊永久磁鐵上,受到振動位移後,與磁鐵組成的磁路磁阻發生變化,從而引起線圈中磁通量的變化,線圈中產生感生電動勢。圖7所示的電磁感應式振動感測器是一種動磁結構的感測器,感應線圈使用了鐵氧體磁芯的一個大電感線圈。

(5) 靈敏度可調整的振動感測模組,振動感測模組實質上就是振動感測器與一個微控制器的組合,本文的感測模組使用了兩個全方位微型振動感測器,線上路板上垂直分佈,兩個振動感測訊號分別送到一片PHILIPS微控制器的兩個輸入埠上,由另兩個埠輸出經過處理的數字訊號。振動訊號出現後,振動訊號的強度不同,振動感測器輸出的振動訊號的脈衝寬度和振動持續時間不同,微控制器將檢測到的訊號脈寬和振動訊號的持續時間,通過一定的演算法並與靈敏度等級比較,輸出振動訊號。振動靈敏度通過PCB板上的按鍵開關設定,設定後的靈敏度級別資料儲存到微控制器內部的EEPROM中。靈敏度設定資料具有記憶功能,直到再次設定來修改。

四、實驗內容

1.試驗器材連線
本實驗所使用的振動感測器模組實物圖如圖4.1.6所示。

這裡寫圖片描述
圖4.1.6振動感測器模組

將震動感測模組安裝到開發板上,然後用AK100或者JLINK模擬器的一端用USB介面與電腦相連,一端的20Pin的JTAG引腳與NXP LPC2378節點板的J2相連,並給NXP LPC2378節點板上電,如下圖所示:
這裡寫圖片描述
圖4.1.7震動感測器模組電路介面

2.振動感測器執行測試
務必要注意LPC2378的GPIO管腳的配置,管腳功能選擇暫存器PINSEL要設定為00,選擇第一功能,即作為GPIO口使用,管腳模式選擇暫存器PINMODE要選擇00,即管腳具有一個使能的上拉電阻,通過GPIO埠管腳值暫存器IOPIN讀取採集來的訊號,進而通過LPC2378進行判斷處理,最後將結果顯示在LCD上面。
(1) 開啟工程DCMotor.mcp,編輯主程式檔案Main.c。
//感測板IO控制引腳設定
if((IO1PIN&(1<<16))==(1<<16))
  {
   //   FIO3DIR|=1<<3  ; 
   //ARM控制,針對視訊模組的引腳設定 P3.3輸出,低電平視訊頭加電,高電平視訊頭無電(S1開關未接通)
   FIO3DIR &=~(1<<1);   
   //振動感測器,IO2引腳輸入
} 
else
  {//如果ZIGBEE控制,ARM引腳設定為輸入
   FIO3DIR =0;
} 
//感測板型別識別CODE0~CODE3,作為輸入端
FIO2DIR &=~(1<<5);
FIO2DIR &=~(1<<6);
FIO2DIR &=~(1<<7);
FIO2DIR &=~(1<<8);

//設定LCD螢幕引腳   
PINSEL3=PINSEL3 & 0x00000000;
IO1DIR=IO1DIR|0x05700000;

//螢幕初始化    
  RESET0;     //復位                           
  delay(50);
  RESET1;                     
  delay(100); 
  lcd_init();
  delay(20);
  LCD_Frame();
  DispAscStr(0,12," shake",6,&xpos,&ypos);
  DispChnStr(xpos,ypos,"模組測試自定義",4,&xpos,&ypos);


//振感測器檢測
  count=FIO3PIN&(1<<1);
  if(count==(1<<1)) 
  {
    ClearRect(2);
        DispAscStr(0,40,"Haha,Shake Switch is On !",20,&xpos,&ypos);  //振動
}
return 0;

(2) 顯示震動感測器的工作

    ClearRect(3);
    DispAscStr(0,100,"Module Code:",12,&xpos,&ypos);
    if((FIO2PIN&(1<<5))>>5)  
    {
        DispAscStr(xpos,ypos,"1",1,&xpos,&ypos);
    }
    else
    {
        DispAscStr(xpos,ypos,"0",1,&xpos,&ypos);
    }
    if((FIO2PIN&(1<<6))>>6)  
    {
        DispAscStr(xpos,ypos,"1",1,&xpos,&ypos);
    }
    else
    {
        DispAscStr(xpos,ypos,"0",1,&xpos,&ypos);
    }
    if((FIO2PIN&(1<<7))>>7)  
    {
        DispAscStr(xpos,ypos,"1",1,&xpos,&ypos);
    }
    else
    {
        DispAscStr(xpos,ypos,"0",1,&xpos,&ypos);
    }
    if((FIO2PIN&(1<<8))>>8)  
    {
        DispAscStr(xpos,ypos,"1",1,&xpos,&ypos);
    }
    else
    {
        DispAscStr(xpos,ypos,"0",1,&xpos,&ypos);
    }

(3) 迴圈檢測振動感測器的狀態

count=FIO3PIN&(1<<1);
idx=0;
while(1)
    {
        count=FIO3PIN&(1<<1);
        //如果count=1,振動開關狀態為“開”
        if((count==(1<<1)) && (idx==0))
        {
            ClearRect(2);
            DispAscStr(0,40,"Shake Switch is On !",20,&xpos,&ypos);  //振動
            idx=1;
        }
        //如果count=0,振動開關狀態為“關”
        else if((count==0) && (idx==1))
        {
            ClearRect(2);
            DispAscStr(0,40,"Shake Switch is Off !",21,&xpos,&ypos);  //振動
            idx=0;
        }
    }