NOBのArduino日記!

NOBのArduino日記!

趣味は車・バイク・自転車・ラジコン・電子工作です。

ホール素子の使い方(UH277G SIP-4)

イメージ 1
ホールIC(UH277G-SIP-4)
 
 先日の記事でプロペラの回転数を測りたかったのですが、ホール素子が使えないかと言うことで試しに使ってみました!自転車の速度計等にも使われています!

1. ホール素子とは

 ホール素子はホール効果※1を利用した磁気センサです。
※以下「UH277G」のSDSより引用させて頂きました
 

※1:ホール効果とは、固体(半導体薄膜)に電流を流し固体表面に対し垂直に磁界を加えたとき、電流方向及び磁界方向それぞれに垂直な方向に電圧が発生するという原理に基づくもの。

 
1.1 ホールIC(UH277G-SIP-4)の概要
 今回使用したUTC UH277は、相補出力ドライバを内蔵したラッチ型ホール効果センサです。
 3~20Vの広い電源範囲で使用する事が出来、オープンコレクタ出力は最大300mAのシンク能力を備えています。
 内蔵の温度補償回路と保護ダイオードを使用した設計がされているため、逆電源障害を防止できます。
 
1.2 ホールIC(UH277G-SIP-4)内ホールセンサーの位置
 ホールICの中には図1に示す位置にホール素子が内蔵されています。
 またICの寸法及びピンアウト仕様を表1に示します。
イメージ 2
図1:UH277G-SIP-4の寸法及びホール素子の位置 (1) (2) (3) (4)    
 
表1:UH277G-SIP-4の仕様
ピンNo. ピン名称 内容
1 Vcc 正電圧
2 DO アウトプットピン
3 DOB アウトプットピン
4 Vss グランド
 
1.3 ホールIC(UH277G-SIP-4)の等価回路図
 ホールIC(UH277G-SIP-4)の等価回路図を図2に示します。
 逆保護ダイオードを内蔵しており、スイッチング時のピーク出力電圧を低減します。
イメージ 3
図2:ブロック図及びホールICサンプル回路
 
1.4 ホールIC(UH277G-SIP-4)のヒステリシス特性
  ホールIC(UH277G-SIP-4)は優れたヒステリシス特性※2を備えたオンチップホールセンサーです。
 ホールICからの出力は、図3に示すヒステリシス特性で動作します。
 閾値BOPよりも大きい磁束密度またはBRPよりも低い磁束密度のいずれかが交互に出力されます。
イメージ 4
図3:ヒステリシス特性図  ※横軸:磁束密度(G※3)
 

※2:ヒステリシスとは、加える力を最初の状態のときと同じに戻しても、状態が完全には戻らない事の意味。
※3:G(ガウス)とは、磁束の方向に垂直な面の1cm^2につき1Mxの磁束密度の事。
G=Mx/cm^2 = dyn1/2·cm^(-1)

2. 実験!

 実際にホールIC(UH277G-SIP-4)を使った実験をしてみました!
 
2.1 接続
 回路接続図をFritzingを使って図4の様に書いてみました。
 また図4の通り実際に繋げた状態を図5に示します。
イメージ 5
図4:ブレッドボード回路図(ホールICの3ピンに、UNOの2、A0ピンを接続)
イメージ 6
図5:実際に作ったもの
 
2.2 プログラム
 図5Arduino UNOに書き込むプログラムを図6の通り書いてみました
 内容としては、ホールICの近くを磁石が通ると、Arduino UNOの2番ピンでプルアップされたホールICの3番ピンがLOWとなり、それをArduino UNOの2番ピン割り込み機能で感知しArduino UNOの13番ピンに接続されたオンボードLEDをトグルします。
 
volatile int TOGGLE = LOW;//並行して動作するコード用変数にLEDをトグルする値を格納

void blink(void) {             //割り込み番号0(2番ピン)の電圧に変化があった時のみ実行される
   if (digitalRead(2) == LOW) {       //もし2番ピンがLOWなら{}内を実行する
       TOGGLE = LOW;                                     //LEDトグル変数をLOWにする
   } else {                             //もし2番ピンがLOWでなかったら(HIGHなら)以下の{}内を実行する
       TOGGLE = HIGH;
   }
}                               //LEDトグル変数をHIGHにする

void setup() {                                                 //一回だけ実行
   pinMode(13, OUTPUT);                     //LEDが接続された13番ピンを出力に設定
   pinMode(2, INPUT_PULLUP);   //外部割込みを監視する2番ピンをプルアップし入力に設定
   attachInterrupt(digitalPinToInterrupt(2), blink, CHANGE);//2番ピン(割り込み番号0)の状態が変わったときblink関数を実行
   Serial.begin(9600);                         //9600bpsでシリアルポートを開く
}

void loop() {                                             //{}内を無限ループで実行
   int A = 0 ;                                                 //Aをint型の変数として宣言(毎回0にリセット)
   A = A + analogRead(0);
   Serial.println(A);                             //Aの値をシリアル出力します
   digitalWrite(13, TOGGLE);   //LEDが接続された13番ピンをトグルする
   delay(100);                                             //100ms(1秒)待ちます
}
イメージ 1
図1:プログラム例
 プログラムではArduino UNOA0番ピンでホールICの3番ピンをリアルタイムに電圧を測定しており、測定結果を図7に示します。
 磁気変化をホールICが感知すると、ホールICのヒステリシス特性によりプルアップされたホールICの3番ピンの電圧がHIGH(1023)・LOW(0)繰り返します。
イメージ 8
図7:Arduino IDE シリアルモニター
 
2.3 実験!
 図7の実験風景を図8に示します。
 磁石(私の自転車ホイールに付いていた速度計用の物)をホールICの前を通過させたタイミングで、Arduino UNOオンボードLED(写真左上オレンジの点)が点灯・消灯しました
イメージ 7
図8:充電とLED点灯!

3. まとめ

 ホールIC(UH277G-SIP-4)はホール素子をパッケージ化されており、3~20Vの広い電圧で使用出来てお手軽でした!が、磁石が大きく小型のプロペラには取付け出来そうに無いですね
 
イメージ 1 イメージ 3
励みになりますのでよければクリック下さい(^o^)/

↩【NOBのArduino日記!】目次に戻る