INA226使用说明
简介
INA226是一个16位精度的电压、电流检测器,通过I2C连接
引脚
| 引脚 | 名称 | 说明 |
|---|---|---|
| 1 | A1 | 配置I2C地址 |
| 2 | A0 | 配置I2C地址 |
| 3 | Alert | 警报功能输出引脚,开漏 |
| 4 | SDA | I2C数据线 |
| 5 | SCL | I2C时钟线 |
| 6 | VS | 供电 2.7-5.5V |
| 7 | GND | 地 |
| 8 | VBUS | 电压测量引脚,测量GND到VBUS之间的电压,最大36V |
| 9 | IN- | 电流测量反相输入端 |
| 10 | IN+ | 电流测量同相输入端,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 |
配置寄存器
| 位 | 名称 | 说明 | 默认值 |
|---|---|---|---|
| D15 | RST | 复位,写1复位,可自动恢复为0 | 0 |
| D14-D12 | -- | 未知 | 100 |
| D11-D9 | AVG | 平均次数,多次采样后输出平均结果 | 000 |
| D8-D6 | Vbus CT | Vbus采样时间 | 100 |
| D5-D3 | Vshunt CT | Vshunt采样时间 | 100 |
| D2-D0 | MODE | 工作模式, 连续/触发/休眠 | 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;
}