INA226参数计算方法

一、芯片简述

        众所周知,INA226是一款电流、电压、功率检测芯片,可通过IIC接口使用。这篇主要写如何计算数值,其他内容有所缩减,见谅。

二、芯片参数

        IIC地址:见A0、A1,一般是0x40、0x41。

        工作电压:2.7V~5.5V

        监测电压:0V~36V,分辨率为16bit。

        监测电流:±81.92mV,分辨率为15bit。

三、计算方法

(00H 配置寄存器)

D15D14D13D12D11D10D9D8D7D6D5D4D3D2D1D0
RST这个不动

平均模式

4的x次方

电压转换时间

1.1mS

分流电压转换时间

1.1mS

操作模式

连续测量电压电流

0100001100100111

这个可以看这位大佬的文章,写的比较详细。

// 配置参数:平均值16,总线电压转换时间1.1ms,分流电压转换时间1.1ms,连续测量模式
INA226_WriteReg(0x00, 0x4527);

(01H 分流电压寄存器)

最大81.92 mV,最小测量单位(LSB)为2.5 μV。

这个没用到,就不写了。

(02H 总线电压寄存器)

最高40.96V,最小测量单位(LSB)为1.25 mV。

公式:

        电压(V) = 电压寄存器值(02H) * 0.00125V

INA226_ReadBusVoltage = INA226_ReadReg(0x02) * 0.00125f;

(03H 功率寄存器)

公式:

        功率最小单位(LSB) = 最小电流测量单位(LSB) *   25倍

        功率(W) = 功率寄存器值(03H) *   功率最小单位(LSB)

官方公式:

Power_LSB = Current_LSB * 25.0f;
INA226_ReadPower = INA226_ReadReg(0x03) * Power_LSB;

(04H 电流寄存器)

公式:

        电流(A) = 电流寄存器值(04H) *    电流最小单位(LSB)

官方公式:

INA226_ReadCurrent = INA226_ReadReg(0x04) * Current_LSB;

(05H 校准寄存器)

预期电流:10A

电流检测电阻:0.005mΩ

公式:

        电流最小单位(LSB) = 预期电流(10A) /   2的15次方(32768)

        例如:10A / 32768 = 0.00030517578125,取近似值0.000305就行。

        电流校准值(CAL) = 0.00512 / ( 电流最小单位(LSB) * 电流检测电阻(0.005))

官方公式: 

uint16_t Cal = (uint16_t)(0.00512f / (Current_LSB * SHUNT_RESISTOR));
INA226_WriteReg(INA226_CAL_REG, Cal);

四、工程文件

ina226.c

#include "INA226.h"

// 写入INA226寄存器
void INA226_WriteReg(uint8_t reg, uint16_t value)
{
  uint8_t data[2] = {value >> 8, value & 0xFF};
  HAL_I2C_Mem_Write(&INA226_I2C, INA226_ADDR, reg, I2C_MEMADD_SIZE_8BIT, data, 2, 100);
}

// 读取INA226寄存器
uint16_t INA226_ReadReg(uint8_t reg)
{
  uint8_t data[2];
  HAL_I2C_Mem_Read(&INA226_I2C, INA226_ADDR, reg, I2C_MEMADD_SIZE_8BIT, data, 2, 100);
  return (data[0] << 8) | data[1];
}

// INA226初始化
void INA226_Init(void)
{
  // 配置参数:平均值128,总线电压转换时间0.14ms,分流电压转换时间0.14ms,连续测量模式
  INA226_WriteReg(INA226_CONFIG_REG, 0x4807);

  // 计算校准值(假设最大预期电流为10A)
	Current_LSB = 0.000305f;		// ≈ MAX_CURRENT / 2的15次方
  uint16_t Cal = (uint16_t)(0.00512f / (Current_LSB * SHUNT_RESISTOR));
  INA226_WriteReg(INA226_CAL_REG, Cal);
	
	Power_LSB = Current_LSB * 25.0f;		// 功率校准值 = 电流最小值 * 25倍
}

// 读取电流(单位:A)
float INA226_ReadCurrent(void)
{
  uint16_t raw = INA226_ReadReg(INA226_CURRENT_REG);
  return raw * Current_LSB;  // 根据实际LSB调整
}

// 读取总线电压(单位:V)
float INA226_ReadBusVoltage(void)
{
  uint16_t raw = INA226_ReadReg(INA226_BUS_V_REG);
  return raw * 0.00125f;  // 1.25mV/LSB
}

// 读取分流电压(单位:mV)
float INA226_ReadShuntVoltage(void)
{
  uint16_t raw = INA226_ReadReg(INA226_SHUNT_V_REG);
  return raw * 0.0025f * SHUNT_RESISTOR;  // 2.5μV/LSB
}

// 读取功率(单位:W)
float INA226_ReadPower(void)
{
    uint16_t raw = INA226_ReadReg(INA226_POWER_REG);
    return raw * Power_LSB;  // 25 * 电流最小值
}

ina226.h

#ifndef __INA226_H
#define __INA226_H

#include "main.h"

#define INA226_I2C						hi2c2
/********** 读写地址 **********/
#define INA226_ADDR           0x40 << 1	 //A0=GND,A1=GND // R=1, W=0
#define INA226_R_ADDR					0x80
#define INA226_W_ADDR					0x81
/********** 寄存器 **********/
#define INA226_CONFIG_REG   	0x00
#define INA226_SHUNT_V_REG  	0x01
#define INA226_BUS_V_REG    	0x02
#define INA226_POWER_REG    	0x03
#define INA226_CURRENT_REG  	0x04
#define INA226_CAL_REG      	0x05
#define Mask_En_Reg                0x06
#define Alert_Reg                  0x07
#define Man_ID_Reg                 0xFE  //0x5449
#define ID_Reg                     0xFF  //0x2260
/********** 硬件参数配置 **********/
#define SHUNT_RESISTOR    0.005f				// 分流电阻5毫欧
#define MAX_CURRENT				10.0f					// 最大电流
///********** 软件参数 **********/
static float Current_LSB;								// 电流分辨率
static float Power_LSB;     						// 功率校准值
/********** 功能函数 **********/
void INA226_WriteReg(uint8_t reg, uint16_t value);	// 写寄存器
uint16_t INA226_ReadReg(uint8_t reg);								// 读寄存器

void INA226_Init(void);									// INA226初始化
float INA226_ReadBusVoltage(void);			// 读取总线电压
float INA226_ReadShuntVoltage(void);		// 读取分流电压
float INA226_ReadCurrent(void);					// 读取电流值
float INA226_ReadPower(void);						// 读取功率值



#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值