センサー・アクチュエータ

電流・電圧センサー

電力を計測するセンサー。

概要

電流・電圧センサーは、電気回路中の電流値や電圧値を計測するセンサー・ICです。電力(P = V × I)の計算にも使われるため「電力モニタリングIC」と呼ばれることもあります。

組み込みシステムにおける電流・電圧計測の主な目的は以下の通りです。

  • バッテリー残量推定(Coulomb Counting): 電流積分で消費電荷量を計算
  • モーター制御・保護: 過電流・ストール検知
  • 電源監視・過負荷保護: システム異常の早期検知
  • スマートメーター・エネルギー管理: 電力消費の記録・分析

代表的な電流センサーの種類は2つです。①シャント抵抗方式:回路に直列に挿入した低抵抗に生じる電圧降下を差動増幅し電流を計算(INA226等のシャントモニタICAが一般的)。②ホール効果センサー:磁界を利用して電流を非接触計測(ACS712等)。

電圧計測はADCで直接行いますが、マイコンのADC入力電圧範囲を超える高電圧には抵抗分圧器や差動増幅回路が必要です。

歴史・背景

電流計測の基本はオームの法則(1827年、ゲオルク・オーム)とアンペールの法則(1820年代)に遡ります。電流計(ガルバノメーター)は19世紀から使われており、針の振れ角で電流を読む形式でした。

ホール効果は1879年にエドウィン・ホールが発見しましたが、半導体でのホール電圧が大きくなることが判明し、センサーとして実用化されたのは1950〜60年代以降です。ホールセンサーICが普及したのは1970〜80年代で、自動車のクランク位置センサー、ブラシレスDCモーターの回転子位置検出に広く使われました。

シャント抵抗方式の電流モニタICAは、1990〜2000年代にテキサス・インスツルメンツのINA1xxシリーズが登場し、I2Cインターフェースと高精度差動増幅を低コストで提供したことで組み込み機器への普及が進みました。現在はINA226(16bit、I2C)が標準的なデバイスとして広く使われています。

技術仕様

シャント抵抗方式電流センサー(INA226)

パラメータ
インターフェースI2C(最大2.94MHz)
分解能16bit
シャント電圧レンジ±81.92mV
シャント電圧分解能2.5μV/LSB
バス電圧レンジ0〜36V
バス電圧分解能1.25mV/LSB
電力計算ハードウェア自動計算(電流×電圧)
変換時間140μs〜8.244ms(プログラマブル)
精度±0.1% (通常温度)
アラート機能過電流・過電圧アラート出力
電源電圧2.7〜5.5V
消費電流330μA(動作時)/ 2μA(パワーダウン)

ホール効果電流センサー(ACS712)

パラメータACS712-05BACS712-20AACS712-30A
電流レンジ±5A±20A±30A
感度185mV/A100mV/A66mV/A
オフセット電圧VCC/2(ゼロ電流時)VCC/2VCC/2
帯域幅80kHz80kHz80kHz
絶縁耐圧2.1kV(基本絶縁)2.1kV2.1kV
インターフェースアナログ電圧出力アナログ電圧出力アナログ電圧出力
電源5V5V5V

主要な電流センサーICの比較

センサー方式電流範囲インターフェース電気的絶縁価格
INA226シャント抵抗±81.92mV/シャントI2Cなし安価
INA3221シャント抵抗 × 3ch3チャンネル同時I2Cなし
ACS712ホール効果5A/20A/30Aアナログあり(2.1kV)安価
ACS758ホール効果50A〜200Aアナログあり
TMCS1100ホール効果±25A〜±50Aアナログあり(3kV)
MAX40080シャント抵抗±10AI2Cなし

電圧測定の回路設計

ADCでマイコンの電源電圧(3.3V/5V)を超える電圧を計測するには抵抗分圧が必要です。

分圧回路:
        V_in ─[R1]─┬─[R2]─ GND

                V_adc(ADC入力)

V_adc = V_in × R2 / (R1 + R2)

例: V_in最大=24V, V_adc最大=3.3V の場合
R2/(R1+R2) = 3.3/24 ≈ 0.138
R1=100kΩ, R2=15kΩ → V_adc = 24 × 15/(100+15) = 3.13V (OK)

精度:
- 抵抗の誤差に直接影響 → 1%精度抵抗を使用
- 入力インピーダンスが高いためADCのサンプルホールドへの影響に注意
- 並列コンデンサ(例:100nF)でノイズを低減

動作原理

シャント抵抗方式の原理

シャント抵抗方式は、オームの法則(V=I×R)を応用します。計測対象回路に直列に低抵抗(シャント抵抗、典型値0.01〜0.1Ω)を挿入し、その両端の微小電圧差(例:電流10A×シャント0.01Ω=100mV)を高精度差動増幅器で計測します。

電流計算:
I = V_shunt / R_shunt

シャント抵抗の選定:
- 大きすぎると電力損失が増加: P = I² × R
- 小さすぎると差動電圧が小さくノイズに埋もれる
- 典型的なシャント抵抗の電力損失: 10A × (10A × 0.01Ω) = 1W

INA226の場合:
V_shunt最大 = ±81.92mV
10A計測: R_shunt = 81.92mV / 10A = 8.2mΩ
→ 電力損失 = 10² × 0.0082 = 0.82W (放熱注意)

最小検出電流:
V_shunt分解能 = 2.5μV(INA226)
I_min = 2.5μV / 8.2mΩ ≈ 0.3mA

ホール効果の原理

電流が流れている導体に垂直に磁界を印加すると、電流と磁界の両方に垂直な方向にホール電圧が発生します(ホール効果)。電流センサーICはシリコン内部に電流路を設け、その周囲の磁界をホール素子で検出します。

ホール電圧:
V_H = (1/n×q) × (I × B) / t = R_H × I × B / t

R_H: ホール係数(材料固有)
I: 電流
B: 磁束密度(電流に比例)
n: キャリア密度, q: 電子電荷, t: 厚さ

ACS712の場合:
ゼロ電流時: V_out = VCC/2 = 2.5V(VCC=5V時)
感度: 185mV/A(5Aレンジ)
電流10A(最大)時: V_out = 2.5 + 185×10×10⁻³ = 4.35V

ADC変換:
I[A] = (V_out - VCC/2) / 感度[V/A]

電力計算(INA226内蔵演算)

INA226はハードウェアで電力計算を行います。

Power Register = Current Register × Bus Voltage Register / 5000
(5000はスケーリング係数)

実電力[W] = Power Register × Current_LSB × 25

電流積分による電荷計算(クーロンカウンティング)

// バッテリー残量推定のためのクーロンカウンティング
typedef struct {
    float capacity_mah;     // バッテリー容量 [mAh]
    float remaining_mah;    // 残容量 [mAh]
    uint32_t last_time_ms;  // 前回計測時刻
} BatteryMonitor;

void battery_update(BatteryMonitor *bm, float current_ma) {
    uint32_t now = get_tick_ms();
    float dt_h = (now - bm->last_time_ms) / 3600000.0f;  // ms → 時間
    
    // 積算(充電: +, 放電: -)
    bm->remaining_mah -= current_ma * dt_h;
    
    // 上下限クリッピング
    if (bm->remaining_mah < 0)               bm->remaining_mah = 0;
    if (bm->remaining_mah > bm->capacity_mah) bm->remaining_mah = bm->capacity_mah;
    
    bm->last_time_ms = now;
}

float battery_soc_percent(BatteryMonitor *bm) {
    return 100.0f * bm->remaining_mah / bm->capacity_mah;
}

用途・ユースケース

バッテリー管理システム(BMS)

リチウムイオン電池のSOC(State of Charge:残容量)推定に電流積算を使います。INA226等で充放電電流を高精度計測し、Coulomb Counting法とバッテリーモデル(OCV特性)を組み合わせることで±1〜2%精度のSOC推定が可能です。

モーター保護・制御

DCモーターやサーボモーターの電流を監視し、過負荷(過電流)時に即座にOFF(保護動作)します。ストール電流(停止時の突入電流)は定格の数倍〜10倍になるため、ハードウェアレベルの保護が重要です。

// モーター過電流保護(INA226使用)
#define OVERCURRENT_MA  5000  // 5A閾値

void check_overcurrent(void) {
    float current_ma = ina226_read_current_ma();
    if (current_ma > OVERCURRENT_MA) {
        motor_emergency_stop();  // 即座に停止
        log_fault("OVERCURRENT", current_ma);
    }
}

太陽光発電システム・MPPT

ソーラーパネルの発電電流・電圧をリアルタイム計測し、MPPT(Maximum Power Point Tracking:最大電力点追従)制御を行います。DC-DCコンバーターのデューティ比を調整して常に最大電力を取り出します。

スマートプラグ・電力計

家庭用コンセントに接続してAC電流・電力を計測するスマートプラグ。AC電流計測には変流器(CT: Current Transformer)またはホールセンサー、AC電圧計測には変圧器(トランス)または抵抗分圧を使います。MQTTでクラウドにデータを送り、エネルギー管理システムと連携します。

工業用電力モニタリング(スマートファクトリー)

工場の各機械・設備の消費電力をModbusCAN bus経由で収集し、稼働状況・エネルギー効率を分析。異常な電流パターンから設備の劣化予兆を検知する予知保全に活用します。

EV・HEV(電気自動車)

高電圧バス(400V/800V)の電流計測に高絶縁型のホールセンサーまたはシャント抵抗が使われます。電流計測精度がEVの航続距離推定精度に直結します。

実装・開発のポイント

INA226 の I2C 読み取り(C言語)

#include "i2c_hal.h"
#include <stdint.h>
#include <math.h>

#define INA226_ADDR    0x40   // A0=A1=GND の場合
#define INA226_CONFIG  0x00
#define INA226_SHUNT   0x01
#define INA226_BUS    0x02
#define INA226_POWER   0x03
#define INA226_CURRENT 0x04
#define INA226_CAL     0x05

// Current LSB: 最小電流分解能 [A]
// Cal = 0.00512 / (Current_LSB × R_shunt)
#define SHUNT_OHM      0.01f   // シャント抵抗値 [Ω]
#define CURRENT_LSB    0.001f  // 1mA/LSB に設定

void ina226_init(void) {
    // キャリブレーションレジスタ設定
    // Cal = 0.00512 / (CURRENT_LSB × SHUNT_OHM)
    uint16_t cal = (uint16_t)(0.00512f / (CURRENT_LSB * SHUNT_OHM));
    uint8_t buf[2] = {(cal >> 8) & 0xFF, cal & 0xFF};
    i2c_write_reg_16(INA226_ADDR, INA226_CAL, buf);
    
    // 設定: 平均4回, 変換時間1.1ms, 連続計測モード
    uint16_t cfg = 0x4127;  // AVG=4, VBUSCT=1.1ms, VSHCT=1.1ms, Mode=Continuous
    buf[0] = (cfg >> 8) & 0xFF;
    buf[1] = cfg & 0xFF;
    i2c_write_reg_16(INA226_ADDR, INA226_CONFIG, buf);
}

float ina226_read_current_ma(void) {
    uint8_t buf[2];
    i2c_read_reg_16(INA226_ADDR, INA226_CURRENT, buf);
    int16_t raw = (int16_t)((buf[0] << 8) | buf[1]);
    return raw * CURRENT_LSB * 1000.0f;  // [mA]
}

float ina226_read_voltage_mv(void) {
    uint8_t buf[2];
    i2c_read_reg_16(INA226_ADDR, INA226_BUS, buf);
    uint16_t raw = (uint16_t)((buf[0] << 8) | buf[1]);
    return raw * 1.25f;  // 1.25mV/LSB → [mV]
}

float ina226_read_power_mw(void) {
    return ina226_read_current_ma() * ina226_read_voltage_mv() / 1000.0f;
}

ACS712 のアナログ読み取り(Python/MicroPython)

from machine import ADC, Pin

class ACS712:
    """ACS712 ホール電流センサードライバ"""
    
    def __init__(self, adc_pin, vcc=3.3, sensitivity_mv_per_a=185,
                 adc_bits=12, n_samples=50):
        self.adc = ADC(Pin(adc_pin))
        self.vcc = vcc
        self.sensitivity = sensitivity_mv_per_a / 1000  # V/A
        self.adc_max = (1 << adc_bits) - 1
        self.n = n_samples
        
        # ゼロオフセット(VCC/2)をキャリブレーション
        self.zero_offset = self._measure_average()
    
    def _measure_average(self):
        """n回計測の平均(ノイズ低減)"""
        return sum(self.adc.read_u16() >> 4 for _ in range(self.n)) / self.n
    
    def read_current_a(self):
        """電流値 [A] を返す"""
        raw_avg = self._measure_average()
        v = raw_avg / self.adc_max * self.vcc
        v_zero = self.zero_offset / self.adc_max * self.vcc
        return (v - v_zero) / self.sensitivity

# 使用例
sensor = ACS712(adc_pin=26, sensitivity_mv_per_a=185)  # 5Aモデル
current = sensor.read_current_a()
print(f"電流: {current:.3f} A")

ノイズ対策と設計上の注意

シャント抵抗方式の注意点:
1. シャント抵抗は配線インダクタンスを最小化するため
   4端子(ケルビン接続)タイプを使用
2. 差動増幅入力ピン付近にコモンモードフィルタ(100nF等)
3. 高側(High-Side)計測 vs 低側(Low-Side)計測:
   高側: GNDの電位変動の影響なし(推奨)
   低側: 計測回路が単純、MCUのGNDと共通
4. DC電源のインラクタンスによるリンギングに注意

ホール効果センサーの注意点:
1. センサー周囲の磁気環境(近傍に永久磁石・大電流配線がある場合)
2. 温度によるオフセット変動を温度補償する
3. アナログ出力はADCの変換速度・分解能に電流精度が依存
4. 絶縁型は高電圧計測に必須(AC/DC電源など)

他技術との比較

シャント抵抗方式 vs ホール効果方式

比較項目シャント抵抗方式ホール効果方式
電気的絶縁なしあり(非接触計測)
精度非常に高い(±0.1%)中程度(±1〜3%)
電力損失あり(I²R)ほぼなし
対応電流範囲数mA〜数十A(シャント設計次第)数A〜数百A
帯域幅高い(MHz)中(〜80kHz)
コスト安い(INA226: 数十〜百円)中(ACS712: 数百円)
温度依存性シャント抵抗温度係数が影響ホール素子温度特性が影響
適用電圧低電圧回路(〜36V等)高電圧回路も計測可能
主な用途MCU電源監視・バッテリー計測AC電力計測・大電流回路・EV

INA226 vs ACS712 の選定指針

用途推奨センサー理由
マイコンシステムの消費電流計測INA226高精度・I2Cデジタル出力
リチウム電池SOC推定INA226高精度クーロンカウンティング
モーター電流(AC電源あり)ACS712/TMCS1100絶縁・大電流対応
スマートプラグ(AC 100V)CT(変流器)+ ADC高電圧絶縁必須
太陽電池パネル(高電圧)ホール効果型絶縁・広電圧範囲
多ch電力監視(3chまで)INA32213ch同時・低コスト

関連用語

参考リンク