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

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

淺析STM32之霍爾傳感器模塊

2018年10月07日 15:41 作者:工程師譚軍 用戶評(píng)論(0
  霍爾傳感器
?
  霍爾傳感器是根據(jù)霍爾效應(yīng)制作的一種磁場(chǎng)傳感器。霍爾效應(yīng)是磁電效應(yīng)的一種,這一現(xiàn)象是霍爾(A.H.Hall,1855—1938)于1879年在研究金屬的導(dǎo)電機(jī)構(gòu)時(shí)發(fā)現(xiàn)的。后來發(fā)現(xiàn)半導(dǎo)體、導(dǎo)電流體等也有這種效應(yīng),而半導(dǎo)體的霍爾效應(yīng)比金屬強(qiáng)得多,利用這現(xiàn)象制成的各種霍爾元件,廣泛地應(yīng)用于工業(yè)自動(dòng)化技術(shù)、檢測(cè)技術(shù)及信息處理等方面。霍爾效應(yīng)是研究半導(dǎo)體材料性能的基本方法。通過霍爾效應(yīng)實(shí)驗(yàn)測(cè)定的霍爾系數(shù),能夠判斷半導(dǎo)體材料的導(dǎo)電類型、載流子濃度及載流子遷移率等重要參數(shù)。
?
?
  磁場(chǎng)中有一個(gè)霍爾半導(dǎo)體片,恒定電流I從A到B通過該片。在洛侖茲力的作用下,I的電子流在通過霍爾半導(dǎo)體時(shí)向一側(cè)偏移,使該片在CD方向上產(chǎn)生電位差,這就是所謂的霍爾電壓。
?
  霍爾電壓隨磁場(chǎng)強(qiáng)度的變化而變化,磁場(chǎng)越強(qiáng),電壓越高,磁場(chǎng)越弱,電壓越低,霍爾電壓值很小,通常只有幾個(gè)毫伏,但經(jīng)集成電路中的放大器放大,就能使該電壓放大到足以輸出較強(qiáng)的信號(hào)。若使霍爾集成電路起傳感作用,需要用機(jī)械的方法來改變磁感應(yīng)強(qiáng)度。下圖所示的方法是用一個(gè)轉(zhuǎn)動(dòng)的葉輪作為控制磁通量的開關(guān),當(dāng)葉輪葉片處于磁鐵和霍爾集成電路之間的氣隙中時(shí),磁場(chǎng)偏離集成片,霍爾電壓消失。這樣,霍爾集成電路的輸出電壓的變化,就能表示出葉輪驅(qū)動(dòng)軸的某一位置,利用這一工作原理,可將霍爾集成電路片用作用點(diǎn)火正時(shí)傳感器?;魻栃?yīng)傳感器屬于被動(dòng)型傳感器,它要有外加電源才能工作,這一特點(diǎn)使它能檢測(cè)轉(zhuǎn)速低的運(yùn)轉(zhuǎn)情況。
?
  霍爾效應(yīng)
?
  霍爾效應(yīng)從本質(zhì)上講是運(yùn)動(dòng)的帶電粒子在磁場(chǎng)中受洛侖茲力作用引起的偏轉(zhuǎn)。當(dāng)帶電粒子(電子或空穴)被約束在固體材料中,這種偏轉(zhuǎn)就導(dǎo)致在垂直電流和磁場(chǎng)的方向上產(chǎn)生正負(fù)電荷的聚積,從而形成附加的橫向電場(chǎng)。對(duì)于圖一所示的半導(dǎo)體試樣,若在X方向通以電流Is,在Z方向加磁場(chǎng)B,則在Y方向即試樣A,A′電極兩側(cè)就開始聚積異號(hào)電荷而產(chǎn)生相應(yīng)的附加電場(chǎng)。電場(chǎng)的指向取決定于測(cè)試樣品的電類型。顯然,該電場(chǎng)是阻止載流子繼續(xù)向側(cè)面偏移,
?
  當(dāng)載流子所受的橫向電場(chǎng)力eEH與洛侖茲力相等時(shí),樣品兩側(cè)電荷的積累就達(dá)到平衡,故有
?
 ?、?/div>
?
  其中EH為霍爾電場(chǎng),V是載流子在電流方向上的平均漂移速度。設(shè)試樣的寬為b,厚度為d,載流子濃度為n,則
?
 ?、?/div>
?
  由⑴、⑵兩式可得
?
 ?、?/div>
?
  即霍爾電壓VH(A、A′電極之間的電壓)與ISB乘積正比與試樣厚度d成反比。比例系數(shù) 稱為霍爾系數(shù),它是反映材料霍爾效應(yīng)強(qiáng)弱的重要參數(shù),只要測(cè)出 VH(伏)以及知道IIs(安)、B(高斯)和d(厘 米)可按下式計(jì)算RH(厘米3/庫侖)
?
  分類
?
  霍爾傳感器分為線型霍爾傳感器和開關(guān)型霍爾傳感器兩種。
?
  (一)開關(guān)型霍爾傳感器由穩(wěn)壓器、霍爾元件、差分放大器,斯密特觸發(fā)器和輸出級(jí)組成,它輸出數(shù)字量。開關(guān)型霍爾傳感器還有一種特殊的形式,稱為鎖鍵型霍爾傳感器。
?
 ?。ǘ┚€性型霍爾傳感器由霍爾元件、線性放大器和射極跟隨器組成,它輸出模擬量。
?
  線性霍爾傳感器又可分為開環(huán)式和閉環(huán)式。閉環(huán)式霍爾傳感器又稱零磁通霍爾傳感器。線性霍爾傳感器主要用于交直流電流和電壓測(cè)量。。
?
  開關(guān)型
?
  如圖4所示,其中Bnp為工作點(diǎn)“開”的磁感應(yīng)強(qiáng)度,BRP為釋放點(diǎn)“關(guān)”的磁感應(yīng)強(qiáng)度。當(dāng)外加的磁感應(yīng)強(qiáng)度超過動(dòng)作點(diǎn)Bnp時(shí),傳感器輸出低電平,當(dāng)磁感應(yīng)強(qiáng)度降到動(dòng)作點(diǎn)Bnp以下時(shí),傳感器輸出電平不變,一直要降到釋放點(diǎn)BRP時(shí),傳感器才由低電平躍變?yōu)楦唠娖健np與BRP之間的滯后使開關(guān)動(dòng)作更為可靠。
?
  鎖鍵型
?
  如圖5所示,當(dāng)磁感應(yīng)強(qiáng)度超過動(dòng)作點(diǎn)Bnp時(shí),傳感器輸出由高電平躍變?yōu)榈碗娖剑谕獯艌?chǎng)撤消后,其輸出狀態(tài)保持不變(即鎖存狀態(tài)),必須施加反向磁感應(yīng)強(qiáng)度達(dá)到BRP時(shí),才能使電平產(chǎn)生變化。
?
  線性型
?
  輸出電壓與外加磁場(chǎng)強(qiáng)度呈線性關(guān)系,如圖3所示,可見,在B1~B2的磁感應(yīng)強(qiáng)度范圍內(nèi)有較好的線性度,磁感應(yīng)強(qiáng)度超出此范圍時(shí)則呈現(xiàn)飽和狀態(tài)。
?
  開環(huán)式電流傳感器
?
  由于通電螺線管內(nèi)部存在磁場(chǎng),其大小與導(dǎo)線中的電流成正比,故可以利用霍爾傳感器測(cè)量出磁場(chǎng),從而確定導(dǎo)線中電流的大小。利用這一原理可以設(shè)計(jì)制成霍爾電流傳感器。其優(yōu)點(diǎn)是不與被測(cè)電路發(fā)生電接觸,不影響被測(cè)電路,不消耗被測(cè)電源的功率,特別適合于大電流傳感。
?
  霍爾電流傳感器工作原理如圖6所示,標(biāo)準(zhǔn)圓環(huán)鐵芯有一個(gè)缺口,將霍爾傳感器插入缺口中,圓環(huán)上繞有線圈,當(dāng)電流通過線圈時(shí)產(chǎn)生磁場(chǎng),則霍爾傳感器有信號(hào)輸出。
?
  閉環(huán)式電流傳感器
?
  磁平衡式電流傳感器也叫霍爾閉環(huán)電流傳感器,也稱補(bǔ)償式傳感器,即主回路被測(cè)電流Ip在聚磁環(huán)處所產(chǎn)生的磁場(chǎng)通過一個(gè)次級(jí)線圈,電流所產(chǎn)生的磁場(chǎng)進(jìn)行補(bǔ)償, 從而使霍爾器件處于檢測(cè)零磁通的工作狀態(tài)。
?
  磁平衡式電流傳感器的具體工作過程為:當(dāng)主回路有一電流通過時(shí),在導(dǎo)線上產(chǎn)生的磁場(chǎng)被聚磁環(huán)聚集并感應(yīng)到霍爾器件上, 所產(chǎn)生的信號(hào)輸出用于驅(qū)動(dòng)相應(yīng)的功率管并使其導(dǎo)通,從而獲得一個(gè)補(bǔ)償電流Is。 這一電流再通過多匝繞組產(chǎn)生磁場(chǎng) ,該磁場(chǎng)與被測(cè)電流產(chǎn)生的磁場(chǎng)正好相反,因而補(bǔ)償了原來的磁場(chǎng), 使霍爾器件的輸出逐漸減小。當(dāng)與Ip與匝數(shù)相乘 所產(chǎn)生的磁場(chǎng)相等時(shí),Is不再增加,這時(shí)的霍爾器件起指示零磁通的作用 ,此時(shí)可以通過Is來平衡。被測(cè)電流的任何變化都會(huì)破壞這一平衡。 一旦磁場(chǎng)失去平衡,霍爾器件就有信號(hào)輸出。經(jīng)功率放大后,立即就有相應(yīng)的電流流過次級(jí)繞組以對(duì)失衡的磁場(chǎng)進(jìn)行補(bǔ)償。從磁場(chǎng)失衡到再次平衡,所需的時(shí)間理論上不到1μs,這是一個(gè)動(dòng)態(tài)平衡的過程。

  實(shí)驗(yàn)前提

  1、在進(jìn)行本文步驟前,請(qǐng)先閱讀以下博文:

  暫無

  2、在進(jìn)行本文步驟前,請(qǐng)先實(shí)現(xiàn)以下博文:

  暫無

  五、基礎(chǔ)知識(shí)

  1、霍爾傳感器是什么?

  答:霍爾傳感器是根據(jù)霍爾效應(yīng)制作的一種磁場(chǎng)傳感器。

  用磁鐵去靠近霍爾傳感器時(shí),霍爾傳感器的引腳電平會(huì)產(chǎn)生變化。

  2、霍爾傳感器主要用在什么地方?

  答:霍爾傳感器可測(cè)速、計(jì)數(shù)、限位上。

  舉例限位功能:兩個(gè)霍爾傳感器形成45°的夾角,電機(jī)邊緣粘著一個(gè)磁鐵,一旦電機(jī)轉(zhuǎn)動(dòng)導(dǎo)致磁鐵觸發(fā)任意其中一個(gè)霍爾傳感器,則STM32檢測(cè)到觸發(fā)后立刻停止電機(jī),不能再繼續(xù)往此方向轉(zhuǎn)動(dòng)。以此達(dá)到限制電機(jī)轉(zhuǎn)動(dòng)角度的作用。

  3、本文使用的是什么霍爾傳感器模塊?

  答:

  香瓜買的霍爾傳感器模塊一共有四個(gè)引腳,GND、VCC、D0、A0。

  其中只需要用到三根線,GND、VCC、D0。(A0不知做啥用的,計(jì)數(shù)?)

  使用方法:

  1)5V供電

  2)用跳線連接D0和STM32的IO口(本文連接的是PA11)。

  3)D0默認(rèn)是高電平,但磁鐵的特定一面(磁鐵另一面無用)去靠近霍爾傳感器模塊時(shí),D0會(huì)被拉低。

  4、霍爾傳感器與限位開關(guān)有什么區(qū)別?

  答:

  1)限位開關(guān)

  ①優(yōu)點(diǎn):無功耗。

  ②缺點(diǎn):易損壞。

  2)霍爾傳感器

 ?、賰?yōu)點(diǎn):不易損壞。

  ②缺點(diǎn):有功耗。

  六、實(shí)驗(yàn)步驟

  1、編寫并添加霍爾傳感器驅(qū)動(dòng)

  1)編寫驅(qū)動(dòng)GUA_Hall_Sensor.c(存放在“……\HARDWARE”)

  //******************************************************************************

  //name: GUA_Hall_Sensor.c

  //introduce: 霍爾傳感器驅(qū)動(dòng)

  //author: 甜甜的大香瓜

  //email: 897503845@qq.com

  //QQ group 香瓜單片機(jī)STM8/STM32(164311667)

  //changetime: 2017.03.06

  //******************************************************************************

  #include “stm32f10x.h”

  #include “GUA_Hall_Sensor.h”

  /*********************宏定義************************/

  //霍爾傳感器引腳

  #define GUA_HALL_SENSOR_PORT GPIOA

  #define GUA_HALL_SENSOR_PIN GPIO_Pin_11

  //消抖總次數(shù)

  #define GUA_HALL_SENSOR_DISAPPERAS_SHAKS_COUNT 500000

  /*********************內(nèi)部變量************************/

  static GUA_U32 sGUA_Hall_Sensor_DisapperasShakes_IdleCount = 0; //消抖時(shí)的空閑狀態(tài)計(jì)數(shù)值

  static GUA_U32 sGUA_Hall_Sensor_DisapperasShakes_TriggerCount = 0; //消抖時(shí)的觸發(fā)狀態(tài)計(jì)數(shù)值

  /*********************內(nèi)部函數(shù)************************/

  static void GUA_Hall_Sensor_IO_Init(void);

  //******************************************************************************

  //name: GUA_Hall_Sensor_IO_Init

  //introduce: 霍爾傳感器的IO初始化

  //parameter: none

  //return: none

  //author: 甜甜的大香瓜

  //email: 897503845@qq.com

  //QQ group 香瓜單片機(jī)之STM8/STM32(164311667)

  //changetime: 2017.03.06

  //******************************************************************************

  static void GUA_Hall_Sensor_IO_Init(void)

  {

  //IO結(jié)構(gòu)體

  GPIO_InitTypeDef GPIO_InitStructure;

  //時(shí)鐘使能

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

  //霍爾IO配置

  GPIO_InitStructure.GPIO_Pin = GUA_HALL_SENSOR_PIN;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

  GPIO_Init(GUA_HALL_SENSOR_PORT, &GPIO_InitStructure);

  }

  //******************************************************************************

  //name: GUA_Hall_Sensor_Check_Pin

  //introduce: 霍爾傳感器檢測(cè)觸發(fā)狀態(tài)

  //parameter: none

  //return: GUA_HALL_SENSOR_STATUS_IDLE or GUA_HALL_SENSOR_STATUS_TRIGGER

  //author: 甜甜的大香瓜

  //email: 897503845@qq.com

  //QQ group 香瓜單片機(jī)之STM8/STM32(164311667)

  //changetime: 2017.03.06

  //******************************************************************************

  GUA_U8 GUA_Hall_Sensor_Check_Pin(void)

  {

  //沒觸發(fā)

  if(GPIO_ReadInputDataBit(GUA_HALL_SENSOR_PORT, GUA_HALL_SENSOR_PIN) == SET)

  {

  //計(jì)數(shù)

  sGUA_Hall_Sensor_DisapperasShakes_IdleCount++;

  sGUA_Hall_Sensor_DisapperasShakes_TriggerCount = 0;

  //判斷計(jì)數(shù)是否足夠

  if(sGUA_Hall_Sensor_DisapperasShakes_IdleCount 》= GUA_HALL_SENSOR_DISAPPERAS_SHAKS_COUNT)

  {

  return GUA_HALL_SENSOR_STATUS_IDLE;

  }

  }

  //觸發(fā)

  else

  {

  //計(jì)數(shù)

  sGUA_Hall_Sensor_DisapperasShakes_IdleCount = 0;

  sGUA_Hall_Sensor_DisapperasShakes_TriggerCount++;

  //判斷計(jì)數(shù)是否足夠

  if(sGUA_Hall_Sensor_DisapperasShakes_TriggerCount 》= GUA_HALL_SENSOR_DISAPPERAS_SHAKS_COUNT)

  {

  return GUA_HALL_SENSOR_STATUS_TRIGGER;

  }

  }

  return GUA_HALL_SENSOR_STATUS_DISAPPERAS_SHAKS;

  }

  //******************************************************************************

  //name: GUA_Limit_Switch_Init

  //introduce: 霍爾傳感器初始化

  //parameter: none

  //return: none

  //author: 甜甜的大香瓜

  //email: 897503845@qq.com

  //QQ group 香瓜單片機(jī)之STM8/STM32(164311667)

  //changetime: 2017.03.06

  //******************************************************************************

  void GUA_Hall_Sensor_Init(void)

  {

  //初始化IO

  GUA_Hall_Sensor_IO_Init();

  }

  2)編寫驅(qū)動(dòng)頭文件GUA_Hall_Sensor.h(存放在“……\HARDWARE”)

  //******************************************************************************

  //name: GUA_Hall_Sensor.h

  //introduce: 霍爾傳感器驅(qū)動(dòng)的頭文件

  //author: 甜甜的大香瓜

  //email: 897503845@qq.com

  //QQ group 香瓜單片機(jī)之STM8/STM32(164311667)

  //changetime: 2017.03.06

  //******************************************************************************

  #ifndef _GUA_HALL_SENSOR_H_

  #define _GUA_HALL_SENSOR_H_

  /*********************宏定義************************/

  //類型宏

  #ifndef GUA_U8

  typedef unsigned char GUA_U8;

  #endif

  #ifndef GUA_8

  typedef signed char GUA_8;

  #endif

  #ifndef GUA_U16

  typedef unsigned short GUA_U16;

  #endif

  #ifndef GUA_16

  typedef signed short GUA_16;

  #endif

  #ifndef GUA_U32

  typedef unsigned long GUA_U32;

  #endif

  #ifndef GUA_32

  typedef signed long GUA_32;

  #endif

  #ifndef GUA_U64

  typedef unsigned long long GUA_U64;

  #endif

  #ifndef GUA_64

  typedef signed long long GUA_64;

  #endif

  //霍爾傳感器的觸發(fā)狀態(tài)

  #define GUA_HALL_SENSOR_STATUS_TRIGGER 0 //霍爾傳感器觸發(fā)

  #define GUA_HALL_SENSOR_STATUS_IDLE 1 //霍爾傳感器沒觸發(fā)

  #define GUA_HALL_SENSOR_STATUS_DISAPPERAS_SHAKS 2 //霍爾傳感器消抖中

  /*********************外部函數(shù)聲明************************/

  GUA_U8 GUA_Hall_Sensor_Check_Pin(void);

  void GUA_Hall_Sensor_Init(void);

  #endif

  3)工程中添加GUA_Hall_Sensor.c

  4)在MDK設(shè)置中添加串口驅(qū)動(dòng)源文件路徑

  2、在應(yīng)用層中調(diào)用

  1)添加驅(qū)動(dòng)頭文件(main.c中)

  #include “GUA_Hall_Sensor.h”

  2)添加驅(qū)動(dòng)初始化代碼(main.c的main函數(shù)中)

  //霍爾傳感器初始化

  GUA_Hall_Sensor_Init();

  3)添加測(cè)試代碼

 ?、賹憸y(cè)試代碼(main.c中)

  static void GUA_Test(void)

  {

  U8 nGUA_Ret = 0;

  U8 nGUA_Stop = 0;

  while(1)

  {

  //檢測(cè)霍爾當(dāng)前狀態(tài)

  nGUA_Ret = GUA_Hall_Sensor_Check_Pin();

  //檢測(cè)到霍爾被觸發(fā)

  if(nGUA_Ret == GUA_HALL_SENSOR_STATUS_TRIGGER)

  {

  nGUA_Stop = 1;

  }

  }

  ②調(diào)用測(cè)試代碼(main.c的main函數(shù)中)

  //測(cè)試代碼

  GUA_Test();

  七、注意事項(xiàng)

  暫無。

  八、實(shí)驗(yàn)結(jié)果

  仿真并設(shè)置斷點(diǎn)在測(cè)試代碼的“nGUA_Stop = 1;”中,全速運(yùn)行。

  用磁鐵去靠近模塊上的霍爾傳感器芯片,模塊上的led被點(diǎn)亮表示觸發(fā),同時(shí)工程中消抖之后會(huì)停止在斷點(diǎn)處,表示檢測(cè)到PA11處的霍爾傳感器觸發(fā)導(dǎo)致的低電平。


非常好我支持^.^

(0) 0%

不好我反對(duì)

(2) 100%

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

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

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

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

      ?