uint16_t INA3221_GetShuntVoltage(uint8_t channel)
{
uint32_t temp = 0;
switch (channel)
{
case 1:
temp = INA3221_ReadData(INA3221_ADDR, INA3221_CH1SHUNT_REG);
break;
case 2:
temp = INA3221_ReadData(INA3221_ADDR, INA3221_CH2SHUNT_REG);
break;
case 3:
temp = INA3221_ReadData(INA3221_ADDR, INA3221_CH3SHUNT_REG);
break;
default:
break;
}
if (temp & 0x8000)
temp = ~(temp - 1);
// // 1 LSB = 40uV
return (uint16_t)(temp>>3)*40;
}
参考:https://www.ti.com/lit/ds/symlink/ina3221.pdf
注意 1lsb是40uv,需要乘以40uv,得到的单位是是uV,除以取样电阻就是电流
((float)INA3221_GetShuntVoltage(i+1))/1000/1000/0.005; //current_A
uint16_t INA3221_GetVoltage(uint8_t channel)
{
uint32_t temp = 0;
switch (channel)
{
case 1:
temp = INA3221_ReadData(INA3221_ADDR, INA3221_CH1BUS_REG);
break;
case 2:
temp = INA3221_ReadData(INA3221_ADDR, INA3221_CH2BUS_REG);
break;
case 3:
temp = INA3221_ReadData(INA3221_ADDR, INA3221_CH3BUS_REG);
break;
default:
break;
}
if (temp & 0x8000)
temp = ~(temp - 1);
return (uint16_t)(temp>>3)*8;
}
电压同理 1lsb 8mV,右移三位再乘8 其实就是寄存器值
(float)INA3221_GetVoltage(i+1)/1000; //voltage_V