RM新时代网站-首页

您好,歡迎來(lái)電子發(fā)燒友網(wǎng)! ,新用戶(hù)?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>電子元器件>傳感器>

淺析磁場(chǎng)傳感器和方位及應(yīng)用原理

2018年10月07日 11:47 網(wǎng)絡(luò)整理 作者:工程師譚軍 用戶(hù)評(píng)論(0
  磁傳感器
?
  磁傳感器是把磁場(chǎng)、電流、應(yīng)力應(yīng)變、溫度、光等外界因素引起敏感元件磁性能變化轉(zhuǎn)換成電信號(hào),以這種方式來(lái)檢測(cè)相應(yīng)物理量的器件。
?
  磁傳感器廣泛用于現(xiàn)代工業(yè)電子產(chǎn)品中以感應(yīng)磁場(chǎng)強(qiáng)度來(lái)測(cè)量電流、位置、方向等物理參數(shù)。在現(xiàn)有技術(shù)中,有許多不同類(lèi)型的傳感器用于測(cè)量磁場(chǎng)和其他參數(shù)。
?
  磁傳感器是把磁場(chǎng)、電流、應(yīng)力應(yīng)變、溫度、光等外界因素引起敏感元件磁性能變化轉(zhuǎn)換成電信號(hào),以這種方式來(lái)檢測(cè)相應(yīng)物理量的器件。磁傳感器分為三類(lèi):指南針、磁場(chǎng)感應(yīng)器、位置傳感器。指南針:地球會(huì)產(chǎn)生磁場(chǎng),如果你能測(cè)地球表面磁場(chǎng)就可以做指南針。電流傳感器:電流傳感器也是磁場(chǎng)傳感器。電流傳感器可以用在家用電器、智能電網(wǎng)、電動(dòng)車(chē)、風(fēng)力發(fā)電等等。位置傳感器: 如果一個(gè)磁體和磁傳感器相互之間有位置變化,這個(gè)位置變化是線性的就是線性傳感器,如果轉(zhuǎn)動(dòng)的就是轉(zhuǎn)動(dòng)傳感器。
?
  大生活中用到很多磁傳感器,比如說(shuō)指南針,電腦硬盤(pán)、家用電器等等。
?
  在傳統(tǒng)產(chǎn)業(yè)改造中的應(yīng)用及市場(chǎng)
?
  據(jù)報(bào)道,1995年僅工業(yè)過(guò)程控制傳感器的全球市場(chǎng)已達(dá)到260億美元;2001年計(jì)算機(jī)HDD用SV-GMR磁頭的市場(chǎng)超過(guò)了4000億日元(約合34億美元)。若采用新型微型磁傳感器,既使操作更簡(jiǎn)便,又提高了可靠性,增長(zhǎng)了器件壽命,降低了成本。
?
  使用新型磁傳感器可以顯著提高測(cè)量和控制精度,如使用GMI(巨磁阻抗)磁場(chǎng)傳感器,檢測(cè)分辨率和常用磁通門(mén)磁強(qiáng)計(jì)一樣,而響應(yīng)速度卻快了一倍,消耗功率僅為后者的1%;若用霍爾器件,其分辨率僅4A/m,而所需外場(chǎng)比前者高300余倍;在應(yīng)力檢測(cè)中,SI 傳感器的靈敏度是常用電阻絲的2000倍高,是半導(dǎo)體應(yīng)變規(guī)的20~40倍。工業(yè)機(jī)床的油壓或氣壓汽缸活塞位置檢測(cè),廣泛采用套在活塞桿上的永磁環(huán)和AMR元件組成的磁傳感器,檢測(cè)精度達(dá)0.1mm,檢測(cè)速度可在0~500mm/s內(nèi)以高低速度變換;改用GMI或SV-GMR傳感器后,測(cè)量精度至少可以提高1個(gè)數(shù)量級(jí)。在機(jī)床數(shù)控化時(shí)代,數(shù)字磁尺幫助設(shè)計(jì)師們實(shí)現(xiàn)了閉環(huán)控制。使用絕對(duì)信號(hào)輸出的磁尺,則不受噪聲、電源電壓波動(dòng)等干擾,也不必原點(diǎn)復(fù)位。使用工作狀態(tài)磁敏開(kāi)關(guān),還可以完成手動(dòng)與數(shù)控之間的轉(zhuǎn)換。
?
  旋轉(zhuǎn)磁編碼器在旋轉(zhuǎn)量的檢測(cè)控制中起關(guān)鍵作用,它在數(shù)控機(jī)床、機(jī)器人、工廠自動(dòng)化設(shè)備的位置檢測(cè)、傳輸速度控制,磁盤(pán)、打印機(jī)之類(lèi)的自動(dòng)化設(shè)備通訊設(shè)備的旋轉(zhuǎn)量檢測(cè)中都是不可缺少的重要部件。其檢測(cè)對(duì)象是光磁圖形,不受油霧粉塵的影響,因此比目前最先進(jìn)的光編碼器的可靠性高壽命長(zhǎng),尤其適合于自動(dòng)焊接、油漆機(jī)器人和與鋼鐵有關(guān)的位置檢測(cè)以及各種金屬、木材、塑料等加工行業(yè)的應(yīng)用。而仍大量使用光編碼器,由于這種器件易受粉塵、油污和煙霧的影響,用在自動(dòng)焊接、油漆機(jī)器人、紡織和鋼鐵、木料、塑料等的加工中,可靠性極差。應(yīng)用AMR、GMR 、GMI敏感元件構(gòu)成的旋轉(zhuǎn)磁編碼器,就不存在上述缺點(diǎn),因此,它們的市場(chǎng)需求年增長(zhǎng)率在30%以上。在家用電器和節(jié)能產(chǎn)品中也也有其廣泛的應(yīng)用潛力,在節(jié)能環(huán)保產(chǎn)品中也大有用武之地。若使用微型磁編碼器和控制微機(jī)一體化,更有利于簡(jiǎn)化控制系統(tǒng)結(jié)構(gòu),減少元件數(shù)和占空體積,這在精密制造和加工業(yè)中意義十分重大。
?
  在環(huán)境監(jiān)測(cè)中的應(yīng)用
?
  環(huán)境保護(hù)的前提是對(duì)各個(gè)環(huán)境參數(shù)(溫度、氣壓、大氣成份、噪聲。..。..。)的監(jiān)測(cè),這里需要使用多種大量的傳感器。采用強(qiáng)磁致伸縮非晶磁彈微型磁傳感器,可以同時(shí)測(cè)量真空或密閉空間的溫度和氣壓,而且不用接插件,可以遙測(cè)和遠(yuǎn)距離訪問(wèn)。在食品包裝、環(huán)境科學(xué)實(shí)驗(yàn)等方面,應(yīng)用前景廣闊。
?
  在交通管制中的應(yīng)用
?
  交通事故和交通阻塞是城市中和城市間交通存在的一個(gè)大問(wèn)題。國(guó)內(nèi)外都在加強(qiáng)高速公路行車(chē)支持道路系統(tǒng)(AHS)、智能運(yùn)輸系統(tǒng)(ITS)和道路交通信息系統(tǒng)(VICS)等的開(kāi)發(fā)與建設(shè)。在這些新系統(tǒng)中,高靈敏度、高速響應(yīng)微型磁傳感器大有用武之地。例如,用分辨率可達(dá)1nT的GMI和SI傳感器,可構(gòu)成ITS傳感器(作高速路上的道路標(biāo)志,測(cè)車(chē)輪角度,貨車(chē)近接距離),汽車(chē)通過(guò)記錄儀(測(cè)通行方向、速度、車(chē)身長(zhǎng)度、車(chē)種識(shí)別),停車(chē)場(chǎng)成批車(chē)輛傳感器,加速度傳感器(測(cè)車(chē)輛通過(guò)時(shí)路橋的振動(dòng)等)。
?
  磁傳感器在電子羅盤(pán)中的應(yīng)用
?
  幾個(gè)世紀(jì)以來(lái),人們?cè)趯?dǎo)航中一直使用磁羅盤(pán)。有資料顯示早在二千多年前中國(guó)人就開(kāi)始使用天然磁石-一種磁鐵礦來(lái)指示水平方向。電子羅盤(pán)(數(shù)字羅盤(pán),電子指南針,數(shù)字指南針)是測(cè)量方位角(航向角)比較經(jīng)濟(jì)的一種電子儀器。如今電子指南針廣泛應(yīng)用于汽車(chē)和手持電子羅盤(pán),手表,手機(jī),對(duì)講機(jī),雷達(dá)探測(cè)器,望遠(yuǎn)鏡,探星儀,穆斯林麥加探測(cè)器(穆斯林鐘),手持 GPS 系統(tǒng),尋路器,武器/導(dǎo)彈導(dǎo)航( 航位推測(cè) ),位置/方位系統(tǒng),安全/定位設(shè)備,汽車(chē)、航海和航空的高性能導(dǎo)航設(shè)備,電子游戲機(jī)設(shè)備等需要方向或姿態(tài)顯示的設(shè)備。
?
  地球本身是一個(gè)大磁鐵,地球表面的磁場(chǎng)大約為0.5Oe,地磁場(chǎng)平行地球表面并始終指向北方。利用GMR薄膜可做成用來(lái)探測(cè)地磁場(chǎng)的傳感器。圖5顯示這種傳感器的具體工作原理。我們可以制出能夠探測(cè)磁場(chǎng)X和Y方向分量的集成GMR傳感器。此傳感器可作為羅盤(pán)并應(yīng)用在各種交通工具上作為導(dǎo)航裝置。美國(guó)的NVE公司已經(jīng)把GMR傳感器用在車(chē)輛的交通控制系統(tǒng)上。例如,放置在高速公路邊的GMR傳感器可以計(jì)算和區(qū)別通過(guò)傳感器的車(chē)輛。如果同時(shí)分開(kāi)放置兩個(gè)GMR傳感器,還可以探測(cè)出通過(guò)車(chē)輛的速度和車(chē)輛的長(zhǎng)度,當(dāng)然GMR也可用在公路的收費(fèi)亭,從而實(shí)現(xiàn)收費(fèi)的自動(dòng)控制。另外高靈敏度和低磁場(chǎng)的傳感器可以用在航空、航天及衛(wèi)星通信技術(shù)上。大家知道,在軍事工業(yè)中隨著吸波技術(shù)的發(fā)展,軍事物件可以通過(guò)覆蓋一層吸波材料而隱蔽,但是它們無(wú)論如何都會(huì)產(chǎn)生磁場(chǎng),因此通過(guò)GMR磁場(chǎng)傳感器可以把隱蔽的物體找出來(lái)。當(dāng)然,GMR磁場(chǎng)傳感器可以應(yīng)用在衛(wèi)星上,用來(lái)探測(cè)地球表面上的物體和底下的礦藏分布。
?
  門(mén)磁傳感器在智能家居中的應(yīng)用
?
  在智能家居門(mén)禁系統(tǒng)中門(mén)磁開(kāi)關(guān)的作用是負(fù)責(zé)門(mén)磁通電否,通電帶磁(閉門(mén)),斷電消磁(開(kāi)門(mén)),門(mén)磁安裝于門(mén)與門(mén)套上,開(kāi)關(guān)安裝于屋內(nèi),配合自動(dòng)閉門(mén)器使用,一般可承受150公斤的拉力。
?
  有線門(mén)磁為嵌入式安裝更加隱蔽,感應(yīng)門(mén)窗的開(kāi)合,適用于木質(zhì)或鋁合金門(mén)窗發(fā)出有線常閉/常開(kāi)開(kāi)關(guān)信號(hào)。門(mén)磁是用來(lái)探測(cè)門(mén)、窗、抽屜等是否被非法打開(kāi)或移動(dòng)。它由無(wú)線發(fā)射器和磁塊兩部分組成。門(mén)磁系統(tǒng)其實(shí)和床磁等原理相同。

  磁場(chǎng)傳感器(Magnetic Field Sensors)

  磁場(chǎng)傳感器可以用來(lái)檢測(cè)磁場(chǎng)大小,和加速度傳感器一樣,有x、y、z軸三個(gè)方向,單位為uT(microteslas)。磁場(chǎng)傳感器也稱(chēng)為compass(指南針),在uses-feature中使用android.hardware.sensor.compass作為其名字。說(shuō)實(shí)在的,單看磁場(chǎng)數(shù)值也看不出所以然。

  說(shuō)個(gè)故事,單位部門(mén)調(diào)整,一撥同事到10樓,這是上下移動(dòng)實(shí)驗(yàn)室的夾層,下面是移動(dòng)網(wǎng)絡(luò)(有4G小基站)實(shí)驗(yàn)室。一聽(tīng)要挪過(guò)去,各個(gè)憂心忡忡,這輻射如何辦?按秘書(shū)的說(shuō)法,怎么辦,涼拌。正好玩磁場(chǎng)傳感器,雖然magnetic不是electromagnetic,電場(chǎng)、磁場(chǎng)相互作用,在具體的都還給老師了。手頭上也沒(méi)有什么能夠進(jìn)行測(cè)試的,就用磁場(chǎng)傳感器測(cè)一測(cè)。這種事情多半都是自己嚇自己,智能手機(jī)將成為摸金校尉的必備工具。

  下面是小例子代碼片段:

  public class MagneticFieldSensorActivity extends Activity implements SensorEventListener{

  。..。..

  @Override

  protected void onCreate(Bundle savedInstanceState) {

  。..。..

  sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);

  sensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);

  }

  。..。.. //注冊(cè)和注銷(xiāo)磁場(chǎng)傳感器監(jiān)聽(tīng)器

  private int count = 1;

  @Override

  public void onSensorChanged(SensorEvent event) {

  if( count++ == 20){ //磁場(chǎng)傳感器很敏感,每20個(gè)變化,顯示一次數(shù)值

  double value = Math.sqrt(event.values[0]*event.values[0] + event.values[1]*event.values[1]

  +event.values[2]*event.values[2]);

  String str = String.format(“X:%8.4f , Y:%8.4f , Z:%8.4f 總值為:%8.4f”,

  event.values[0],event.values[1],event.values[2],value);

  count = 1;

  tv.setText(str);

  }

  }

  @Override

  public void onAccuracyChanged(Sensor sensor, int accuracy) {

  // Nothing here

  }

  }

  方位傳感器(Orientation Sensors)

  磁場(chǎng)傳感器和加速度傳感器結(jié)合可或者設(shè)備擺放角度,兩者結(jié)合可以獲取方位。這些計(jì)算由Android代勞了,SensorManager提供getRotationMatrix(),獲得轉(zhuǎn)動(dòng)的矩陣,并進(jìn)一步通過(guò)getOrientation()獲得方位矩陣。Android還有方位傳感器(orientation Sensors),不是物理實(shí)體,而是通過(guò)acceleration傳感器和磁場(chǎng)感應(yīng)器來(lái)獲取方位,而在Android2.2開(kāi)始方位傳感器就被deprecated了。

  設(shè)備擺放情況通過(guò)azimuth、pitch和roll來(lái)表示。

  azimuth即方位角,就是手機(jī)方向和正北的夾角,百度百科這樣描述方位角:是從某點(diǎn)的指北方向線起,依順時(shí)針?lè)较虻侥繕?biāo)方向線之間的水平夾角。pitch和roll可能是引用了航天的術(shù)語(yǔ)。azimuth,pitch和roll分別是z軸、X軸和Y軸的旋轉(zhuǎn)角度。

  老方法采用orientation傳感器,azimuth從0~360。pitch是在x軸方向的轉(zhuǎn)動(dòng)角度,其實(shí)就是Y軸和水平面的仰角,范圍為-180~180,正的為朝下(手機(jī)頭低于水平面),負(fù)的為朝上,pitch的方向逆時(shí)針為正。roll是Y軸防線的轉(zhuǎn)動(dòng)角度,實(shí)際就是X軸和水平面的角度,范圍在-90~90,同樣逆時(shí)針為正,右軸高于左軸時(shí)為正,右軸高于左軸時(shí)為負(fù)。

  新的方法,azimuth的范圍是-180~180,當(dāng)然我們可以進(jìn)行適當(dāng)?shù)奶幚?,如果小于零,則加360,這樣就可以和orientation的得到的值一樣。需要注意的是pitch的范圍是-90~90,機(jī)頭上翹為負(fù);roll的范圍是-180~180,和老方法相反,右軸高時(shí)為負(fù)。

  這兩種方式的數(shù)值可能會(huì)使人有些迷糊,我們?cè)谑褂弥跋炔槲臋n弄清楚就是了。我曾經(jīng)有個(gè)疑惑為何有兩個(gè)數(shù)值的范圍是360度,其中一個(gè)數(shù)值只有180度。想想球面就知道了,以地球儀為例,經(jīng)度范圍是360°,維度范圍是180°,就可以確定球面上的任何一點(diǎn),以球心到該點(diǎn)假設(shè)是手機(jī)中軸線,還有一個(gè)圍繞Y軸360°轉(zhuǎn)的角度的第三維,這就可以確定所有的排放方式。

  小例子

  下面小例子我們將同時(shí)展現(xiàn)新舊兩種方式。

  public class VirtualJax extends Activity implements SensorEventListener{

  。.. 。.. //注冊(cè)和注銷(xiāo)傳感器監(jiān)聽(tīng)器,本例涉及三個(gè)傳感器(加速度傳感器、地磁傳感器和方位傳感器),可以用sensorManager.unregister(this)注銷(xiāo)監(jiān)聽(tīng)器所涉及的全部傳感器。

  private Sensor accelSensor = null, compassSensor = null, orientSensor = null;

  private float[] accelValues = new float[3], compassValues = new float[3],orientValues = new float[3];

  private boolean ready = false; //檢查傳感器是否正常工作,即是否同時(shí)具有加速傳感器和磁場(chǎng)傳感器。

  private float[] inR = new float[9];

  private float[] inclineMatrix = new float[9];

  private float[] prefValues = new float[3];

  private double mInclination;

  private int count = 1;

  @SuppressWarnings(“deprecation”) //因?yàn)閛rientaion已經(jīng)不再使用,為了不要顯示warning,加上此標(biāo)識(shí)

  @Override

  public void onSensorChanged(SensorEvent event) {

  //【1】將相關(guān)傳感器的數(shù)值分別讀入accelValues,compassValues(磁力感應(yīng)器的數(shù)值)和orientValues數(shù)組中

  switch(event.sensor.getType()){

  case Sensor.TYPE_ACCELEROMETER:

  for(int i = 0 ; i 《 3 ; i ++){

  accelValues[i] = event.values[i];

  }

  if(compassValues[0] != 0) //如果accelerator和magnetic傳感器都有數(shù)值,設(shè)置為真

  ready = true;

  break;

  case Sensor.TYPE_MAGNETIC_FIELD:

  for(int i = 0 ; i 《 3 ; i ++){

  compassValues[i] = event.values[i];

  }

  if(accelValues[2] != 0) //檢查accelerator和magnetic傳感器都有數(shù)值,只是換一個(gè)軸向檢查

  ready = true;

  break;

  case Sensor.TYPE_ORIENTATION:

  for(int i = 0 ; i 《 3 ; i ++){

  orientValues[i] = event.values[i];

  }

  break;

  }

  if(!ready)

  return;

  //【2】根據(jù)加速傳感器的數(shù)值accelValues[3]和磁力感應(yīng)器的數(shù)值compassValues[3],進(jìn)行矩陣計(jì)算,獲得方位

  //【2.1】計(jì)算rotation matrix R(inR)和inclination matrix I(inclineMatrix)

  if(SensorManager.getRotationMatrix(inR, inclineMatrix, accelValues, compassValues)){

  /* 【2.2】根據(jù)rotation matrix計(jì)算設(shè)備的方位。,范圍數(shù)組:

  values[0]: azimuth, rotation around the Z axis.

  values[1]: pitch, rotation around the X axis.

  values[2]: roll, rotation around the Y axis.*/

  SensorManager.getOrientation(inR, prefValues);

  //【2.2】根據(jù)inclination matrix計(jì)算磁仰角,地球表面任一點(diǎn)的地磁場(chǎng)總強(qiáng)度的矢量方向與水平面的夾角。

  mInclination = SensorManager.getInclination(inclineMatrix);

  //【3】顯示測(cè)量值

  if(count++ % 100 == 0){

  doUpdate(null);

  count = 1;

  }

  }else{

  Toast.makeText(this, “無(wú)法獲得矩陣(SensorManager.getRotationMatrix)”, Toast.LENGTH_LONG);

  finish();

  }

  }

  //【3】顯示測(cè)量值

  public void doUpdate(View v){

  if(!ready)

  return;

  //preValues[0]是方位角,單位是弧度,范圍是-pi到pi,通過(guò)Math.toDegrees()轉(zhuǎn)換為角度

  float mAzimuth = (float)Math.toDegrees(prefValues[0]);

  /*//糾正為orientation的數(shù)值。

  * if(mAzimuth 《 0)

  mAzimuth += 360.0;*/

  String msg = String.format(“推薦方式: 方位角:%7.3f pitch: %7.3f roll: %7.3f 地磁仰角:%7.3f ”,

  mAzimuth,Math.toDegrees(prefValues[1]),Math.toDegrees(prefValues[2]),

  Math.toDegrees(mInclination));

  nowOne.setText(msg);

  msg = String.format(“老方式: 方位角:%7.3f pitch: %7.3f roll: %7.3f”,

  orientValues[0],orientValues[1],orientValues[2]);

  oldOne.setText(msg);

  }

  }

非常好我支持^.^

(0) 0%

不好我反對(duì)

(0) 0%

( 發(fā)表人:金巧 )

      發(fā)表評(píng)論

      用戶(hù)評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?
      RM新时代网站-首页