数据来自厂家详情页和 TI 数据手册。标注冲突的条目以实物为准。
小排针负责给芯片供电和通信;VIN/VOUT 负责让被测电流经过板载分流电阻。
| INA226 VCC | ESP32 3V3 |
| INA226 GND | ESP32 GND |
| INA226 SDA | GPIO 27 |
| INA226 SCL | GPIO 22 |
| ALERT | 不用接 |
背面从左到右:VIN · GND · GND · VOUT
接线动画用于认清每根线的去向;实拍视频记录可调电源、ESP32 屏幕和负载电流随电压变化的过程。
包含 ESP32 的 3V3、GND、GPIO27、GPIO22,以及外部电源、VIN、VOUT、100Ω 负载和公共地。
观察电压、电流和功率同步变化。实测前仍要空载归零。
LED 电流受正向压降影响,电机启动和转动电流会变化。100Ω 电阻更适合判断模块是否正常。
ESP32 和 INA226 保持通信,VOUT 暂不接负载。
按钮变色并显示 ZERO OK,表示零点已经记录。
VOUT → 电阻 → GND,再接通外部电源。
用 I = V ÷ R 计算,显示值应接近理论值。
| 电阻两端电压 | 理论电流 | 功耗 |
|---|---|---|
| 3.58 V | 35.8 mA | 0.128 W |
| 5.00 V | 50.0 mA | 0.250 W |
| 6.00 V | 60.0 mA | 0.360 W |
| 7.42 V | 74.2 mA | 0.551 W |
红表笔插 10A 孔,黑表笔插 COM,选择直流电流 10A 档。
VOUT → 红表笔 → 万用表 → 黑表笔 → 100Ω → GND
INA226 测得的 VOUT 母线电压。
取样压降换算后的负载电流。
实时电压乘以实时电流。
电量、能量、峰值和运行时间。
只在空载时操作,用于消除约 ±1mA 的零漂。可触摸屏幕 ZERO,或短按 BOOT。
长按 BOOT 约 1.5 秒,清除累计 mAh、mWh、峰值和计时。不用于校准实时电流。
不是芯片真假问题,也不是 ESP32 不会计算,而是板上分流取样线路开路。
外部电压变化时,ESP32 电压读数同步变化,I²C 通信和母线电压通道正常。
负载电流变化时,shunt_mV 仍约 0.020 ~ 0.025mV,程序只能算出约 3mA。
更换原装 INA226 仍无改善;补通取样线路后,电流立即开始随负载变化。
修复后使用 3.58V 和 7.42V 两点复核,校准为 0.00807Ω。
INA226 芯片的母线共模范围为 0 ~ 36V,逻辑供电为 2.7 ~ 5.5V。实际使用范围还受端子、PCB 和分流电阻功耗限制。
INA228 使用不同的寄存器和换算方式,支持温度、能量和电荷累计。可以复用 ESP32 屏幕和 I²C 接线框架,但传感器驱动必须单独编写。
以下为 ESP32 + INA226 的关键代码片段,完整源码可在下载区获取。
constexpr uint8_t I2C_SDA = 27;
constexpr uint8_t I2C_SCL = 22;
constexpr uint8_t INA_ADDR = 0x44;
constexpr float SHUNT_OHMS = 0.00807f; // 本样板校准值
static bool initIna226() {
uint16_t manufacturer = 0, dieId = 0;
if (!readRegister(REG_MANUFACTURER, manufacturer)) return false;
if (!readRegister(REG_DIE_ID, dieId)) return false;
if (manufacturer != 0x5449 || (dieId & 0xFFF0) != 0x2260) return false;
// AVG=16, bus/shunt 1.1ms, continuous mode
return writeRegister(REG_CONFIG, 0x0527);
}
static bool sampleIna226(Reading &out) {
uint16_t rawBus = 0, rawShunt = 0;
if (!readRegister(REG_BUS_V, rawBus)) return false;
if (!readRegister(REG_SHUNT_V, rawShunt)) return false;
out.busV = rawBus * 0.00125f;
out.shuntMv = (int16_t)rawShunt * 0.0025f;
out.currentA = ((out.shuntMv - zeroOffsetMv) / 1000.0f) / SHUNT_OHMS;
out.powerW = out.busV * out.currentA;
return true;
}
下载的是副本,项目中的原始照片、程序和 Fritzing 文件均保持原位。