INA226 高精度 I²C 电流/电压/功率监测芯片 —— 完整介绍与使用指南

制造商:Texas Instruments (TI)
器件型号:INA226
数据手册:TI 官方 SBOS547 / Rev. B


一、芯片概述

INA226 是 TI 推出的一款带有 I²C / SMBus 兼容接口的高精度电流分流器和功率监测器。它通过测量分流电阻(Shunt Resistor)两端的微小压降来计算电流,同时直接测量总线电压(Bus Voltage),并在芯片内部通过乘法器自动计算出功率值。

简单来说:你给它一个采样电阻的值,它帮你把电流、电压、功率都算好,吐出来给你。


二、关键特性一览

  • 总线电压测量范围:0V ~ 36V(共模)
  • 分流电压输入范围:±81.92 mV(差分)
  • ADC 分辨率:16-bit Δ-Σ ADC(LSB = 2.5 μV / 1.25 mV)
  • 供电电压 (VS):2.7V ~ 5.5V
  • 接口:I²C / SMBus 兼容(100kHz / 400kHz)
  • I²C 地址:最多 16 个可编程地址(通过 A0、A1 引脚配置)
  • Alert 功能:可编程过流/过压/过功率报警(开漏输出)
  • 平均功能:可选 1 / 4 / 16 / … / 1024 次均值
  • 封装:10-Pin VSSOP

三、引脚定义(10-Pin VSSOP)

    ┌─────────────┐
A1 ─┤ 1        10 ├─ IN+
A0 ─┤ 2         9 ├─ IN−

ALERT ─┤ 3 8 ├─ VBUS
SDA ─┤ 4 7 ├─ GND
SCL ─┤ 5 6 ├─ VS
└─────────────┘

Pin 名称 类型 说明
1 A1 输入 I²C 地址选择位 1
2 A0 输入 I²C 地址选择位 0
3 ALERT 输出 报警输出(开漏)
4 SDA I/O I²C 数据线
5 SCL 输入 I²C 时钟线
6 VS 电源 芯片供电 (2.7-5.5V)
7 GND 电源地
8 VBUS 输入 总线电压 (0-36V)
9 IN− 输入 分流电阻负载侧
10 IN+ 输入 分流电阻电源侧

四、测量原理

4.1 核心公式

  1. 分流电压:V_shunt = I_load × R_shunt
  2. 电流计算:I = V_shunt / R_shunt
  3. 功率计算:P = V_bus × I

4.2 校准寄存器 (Calibration Register)

为了让芯片直接输出工程单位(安培/瓦特),需要配置校准寄存器 (05h):
Cal = 0.00512 / (R_shunt × Current_LSB)


五、内部寄存器速查

地址 名称 读写 说明
00h Configuration R/W 配置模式、ADC时间、平均次数
01h Shunt Voltage RO 分流电压 (LSB = 2.5 μV)
02h Bus Voltage RO 总线电压 (LSB = 1.25 mV)
03h Power RO 功率值
04h Current RO 电流值
05h Calibration R/W 校准值
06h Mask/Enable R/W 报警使能
07h Alert Limit R/W 报警阈值

六、典型应用电路

推荐高侧检测(High-Side Sensing):
V_SUPPLY (+) ────┬────[IN+] INA226
[R_shunt]

Load ──────────────┴────[IN−]
VBUS ──→ V_SUPPLY(+)
VS ────→ 3.3V
GND ───→ GND
SCL ───→ MCU SCL (加上拉)
SDA ───→ MCU SDA (加上拉)


七、分流电阻选型

公式:R_shunt ≤ 0.08192 / I_max

最大电流 推荐阻值 备注
≤ 3A 0.02 Ω (20mΩ) 常用
≤ 10A 0.005 Ω (5mΩ) 大电流
≤ 20A 0.002 Ω (2mΩ) 需考虑散热

八、Arduino 示例代码

include <Wire.h>
define INA226_ADDR 0x40
define REG_CONFIG 0x00
define REG_SHUNT_V 0x01
define REG_BUS_V 0x02
define SHUNT_OHM 0.02
void writeReg(uint8_t reg, uint16_t val) {
Wire.beginTransmission(INA226_ADDR);
Wire.write(reg);
Wire.write(val >> 8);
Wire.write(val & 0xFF);
Wire.endTransmission();
}
uint16_t readReg(uint8_t reg) {
Wire.beginTransmission(INA226_ADDR);
Wire.write(reg);
Wire.endTransmission();
Wire.requestFrom(INA226_ADDR, 2);
return (Wire.read() << 8) | Wire.read();
}
void setup() {
Wire.begin();
Serial.begin(115200);
writeReg(REG_CONFIG, 0x4127); // 连续测量模式
}
void loop() {
int16_t rawShunt = (int16_t)readReg(REG_SHUNT_V);
float vShunt_mV = rawShunt * 2.5 / 1000.0;
float current_A = vShunt_mV / 1000.0 / SHUNT_OHM;
uint16_t rawBus = readReg(REG_BUS_V);
float vBus_V = (rawBus >> 3) * 1.25 / 1000.0;
Serial.print("Vbus="); Serial.print(vBus_V, 3);
Serial.print("V I="); Serial.print(current_A * 1000.0, 2);
Serial.println("mA");
delay(1000);
}

九、注意事项

  1. IN+ 和 IN− 必须采用开尔文连接(Kelvin Connection)。
  2. 确保分流电压不超过 ±81.92mV。
  3. 总线电压 VBUS 不要超过 36V。
  4. 芯片供电 VS 旁务必放置 0.1μF 退耦电容。

十、总结

INA226 是一款高精度、工业级的电流/功率监测芯片,相比 INA219 具有更高的分辨率和更多的功能,非常适合用于电池管理系统、服务器电源监控及精密能耗测试。

Logo

免费领 150 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐