在 Arduino 中使用 INA219 测量电路中电压、电流和功率

前段时间在做一个 DIY 产品的时候,会需要测量电路中电压、电流和功率等数据,在找了一些芯片对比后最终选择了德州仪器的 INA219 芯片,刚好之前也使用过 INA219 模块做了一个简单的功率计,相对还算熟悉。

INA219 的官方介绍如下:

INA219 是一款具备 I2C 或 SMBUS 兼容接口的分流器 和功率监测计。该器件监测分流器电压降和总线电源电 压,转换次数和滤波选项可通过编程设定。可编程校准 值与内部乘法器相结合,支持直接读取电流值(单位: 安培)。通过附加乘法寄存器可计算功率(单位: 瓦)。I2C 或 SMBUS 兼容接口 具有 16 个可编程地 址。

INA219 的使用还是比较简单的,直接通过 I2C 总线即可读取数据,并且支持最大 26V 测量电压,12 位精度,在大多数场合都满足需求了。在立创开源平台,也能看到很多 USB 功率计也是使用的这款芯片。

原理图

using-ina219-in-arduino-schematic

INA219 只需要很少的外围元件即可工作,给电源添加一个旁路电容,再加上一个采样电阻,即可完成。

A0、A1 用于指定通过 I2C 与 INA219 通信时,INA219 的地址,如果电路中只有一个 INA219 芯片,可以直接将这两个引脚接地即可。

通常 INA219 用于高端采集,因此在电路中,会将 INA219 的 VIN+ 连接到被测量电源的正极,VIN- 连接到使用电源的电路的输入端。

默认情况下,INA219 使用大小为 0.1ohm 的采样电阻,当然在实际使用中,可以根据要测量工况的电流大小,更换为其他大小的采样电阻。

在 Arduino 中使用

在 Arduino 中,已经有多个库支持 INA219 的设置和数据读取,在对比几个库之后,最终选择了 INA219_WE 这个库,可以通过 PlatformIO 直接安装,也可以在 GitHub 克隆后放在源代码中使用。

// 0x40 为 A0、A1 均接地时,与 INA219 通信使用的地址
INA219_WE ina219 = INA219_WE(0x40);

void readINA219() {
    // 采样电阻压降
    float shuntVoltage_mV = ina219.getShuntVoltage_mV();
    // 电源输入电压
    float busVoltage_V = ina219.getBusVoltage_V();
    // 采样电流大小
    float current_mA = ina219.getCurrent_mA();
    // 电路中功率大小
    float power_mW = ina219.getBusPower();
}

设置增益

默认情况下,INA219 使用了 PG_320 增益设置,采样电阻最大电压为 320mV,这时在使用 0.1ohm 采样电阻时,电流采样最大值为 3.2A,最小分辨率为 780uA。

如果需要更高精度,可以根据实际测量电路情况来设置 INA219 的增益,例如测量电流不超过 800mA 时,可以使用 PG_80 增益设置,这样就可以得到最小分辨率为 20uA 左右的结果。

设置增益可以直接使用 setPGain 方法:

ina219.setPGain(PG_80);

使用软件模拟 I2C

一般情况下,使用 MCU 自带 I2C 总线时,与 INA219 通信基本没有兼容问题,但是如果在 MCU 的 I2C 总线不够用时,可能需要使用软件模拟 I2C。

在使用软件模拟 I2C 的时候,在 PlatformIO 平台上找了一些库,但是在与 ESP32 配合使用过程中,会出现通信出现错误的情况。最终通过测试,发现使用 AceWire 软件模拟 I2C 可以与 INA219 正常通信。

如果有使用软件模拟 I2C 与 INA219 通信的需求,可以尝试使用 AceWire

采样电阻发热

如果采样电阻比较大,并且测量的电流比较大,可能会出现采样电阻发热比较严重的情况,之前在测试过程中,使用 2512 0.05ohm 采样电阻,持续电流为 3A 左右时,采样电阻会升温到 66 摄氏度。

using-ina219-in-arduino-heating

在没有散热条件的情况下,这个温度不太可接受,因此如果有持续大电流采样需求,建议放弃一些采样精度,使用更小的采样电阻,这样可以有效避免采样电阻升温太高。

增加电流范围

默认情况下,INA219 配合 0.1ohm 采样电阻时,最大测量电流为 3.2A,如果使用在 USB PD 充电最大 100W 的情况下,会超出量程。

这个时候可以采用更小的采样电阻,虽然采样精度下降,但是 1mA 左右的精度在大多数场景也足够使用了。

总结

INA219 作为一款流行的功率监测芯片,在 DIY 制作中,还是相当易用的,并且提供 SOP-8 封装,便于手工焊接,配合 Arudino 使用,拥有强大的开源库,可以做到开箱即用。

参考资料

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>