简介

INA226是一个16位精度的电压、电流检测器,通过I2C连接

引脚

引脚名称说明
1A1配置I2C地址
2A0配置I2C地址
3Alert警报功能输出引脚,开漏
4SDAI2C数据线
5SCLI2C时钟线
6VS供电 2.7-5.5V
7GND
8VBUS电压测量引脚,测量GND到VBUS之间的电压,最大36V
9IN-电流测量反相输入端
10IN+电流测量同相输入端,IN-和IN+的电压差不超过±81.92mV,相对GND为-0.3 - 40V

I2C设备地址

通过A0和A1配置,如果A0和A1接GND,则地址为0x80/0x81

寄存器列表

几个寄存器都是16位的,高字节在前

地址名称说明
00H配置寄存器配置参数
01H分流电压寄存器测量IN-和IN+之间的电压
02H总线电压寄存器测量GND和VBUS之间的电压
03H功率寄存器基于电压、电流计算出的功率,需要先配置校准寄存器
04H电流寄存器基于分流电压,计算电流,需要选配置校准寄存器
05H校准寄存器设置已经校准值用于计算电流、功率,与采样电阻R相关
06H警报配置寄存器配置Alert引脚功能
07H警报数值寄存器与警报参数相关的配置阈值
FEH制造商ID寄存器固定位0x5449
FFH芯片JD寄存器固定位0x2260

配置寄存器

名称说明默认值
D15RST复位,写1复位,可自动恢复为00
D14-D12--未知100
D11-D9AVG平均次数,多次采样后输出平均结果000
D8-D6Vbus CTVbus采样时间100
D5-D3Vshunt CTVshunt采样时间100
D2-D0MODE工作模式, 连续/触发/休眠111

一般情况下只需要读出分流电压、总线电压的ADC数值,然后使用CPU自行计算即可,不用考虑其他寄存器

用法

计算电压
电压寄存器的分辨率为1.25mV,电流寄存器的分辨率为2.5uV,均为16位补码格式,即int16_t类型

#define INA226_ADDR 0x80

#define INA226_CONFIG_REG 0x00
#define INA226_SHUNT_REG 0x01
#define INA226_VBUS_REG 0x02

#define R_SHUNT 0.005f  // 采样电阻阻值

float INA226_read_voltage(void) {
    uint8_t buf[2];
    i2c_read_mem(INA226_ADDR, INA226_VBUS_REG, buf, 2);
    int16_t vol_raw = (int16_t)(buf[0] << 8 | buf[1]);
    return vol_raw * 0.00125f;
}

float INA226_read_current(void) {
    uint8_t buf[2];
    i2c_read_mem(INA226_ADDR, INA226_SHUNT_REG, buf, 2);
    int16_t curr_raw = (int16_t)(buf[0] << 8 | buf[1]);
    return curr_raw * 0.0000025f / R_SHUNT;  // I = U / R;
}

create database typecho_db;
create user 'typecho_user'@'localhost' identified by 'xxxxxxxxx';
grant all on typecho_db to 'typecho_user'@'localhost';
flush privileges;