概要
電流・電圧センサーは、電気回路中の電流値や電圧値を計測するセンサー・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-05B | ACS712-20A | ACS712-30A |
|---|---|---|---|
| 電流レンジ | ±5A | ±20A | ±30A |
| 感度 | 185mV/A | 100mV/A | 66mV/A |
| オフセット電圧 | VCC/2(ゼロ電流時) | VCC/2 | VCC/2 |
| 帯域幅 | 80kHz | 80kHz | 80kHz |
| 絶縁耐圧 | 2.1kV(基本絶縁) | 2.1kV | 2.1kV |
| インターフェース | アナログ電圧出力 | アナログ電圧出力 | アナログ電圧出力 |
| 電源 | 5V | 5V | 5V |
主要な電流センサーICの比較
| センサー | 方式 | 電流範囲 | インターフェース | 電気的絶縁 | 価格 |
|---|---|---|---|---|---|
| INA226 | シャント抵抗 | ±81.92mV/シャント | I2C | なし | 安価 |
| INA3221 | シャント抵抗 × 3ch | 3チャンネル同時 | I2C | なし | 中 |
| ACS712 | ホール効果 | 5A/20A/30A | アナログ | あり(2.1kV) | 安価 |
| ACS758 | ホール効果 | 50A〜200A | アナログ | あり | 中 |
| TMCS1100 | ホール効果 | ±25A〜±50A | アナログ | あり(3kV) | 中 |
| MAX40080 | シャント抵抗 | ±10A | I2C | なし | 中 |
電圧測定の回路設計
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でクラウドにデータを送り、エネルギー管理システムと連携します。
工業用電力モニタリング(スマートファクトリー)
工場の各機械・設備の消費電力をModbus・CAN 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まで) | INA3221 | 3ch同時・低コスト |