打印
[STM32F1]

INA219读取不到电流值,请大家帮忙看下!

[复制链接]
1016|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

应用电路如图,VIN+是开关电源+12V,VIN-接负载正极。
I2C部分代码使用正点原子老师的代码。
关于INA219部分代码如下:
void INA219_WriteReg(unsigned char reg, unsigned int data) //写寄存器
{
        unsigned char data_temp[2];
        data_temp[0] = (unsigned char)(data>>8);
        data_temp[1] = (unsigned char)(data & 0xff);
        IIC_Start();
        IIC_Send_Byte(0x80);
        //IIC_Wait_Ack();
        Test_ack();
        IIC_Send_Byte(reg);
        //IIC_Wait_Ack();
        Test_ack();
        IIC_Send_Byte(data_temp[0]);
        //IIC_Wait_Ack();
        Test_ack();
        //data++;
        IIC_Send_Byte(data_temp[1]);
        //IIC_Wait_Ack();
        Test_ack();
        IIC_Stop();
        //delay_ms(10);
}


u8 INA219_ReadReg(unsigned char reg)
{
        unsigned int dat;
        IIC_Start();
        IIC_Send_Byte(0x80);
        Test_ack();
        //IIC_Wait_Ack();
        IIC_Send_Byte(reg);
        //IIC_Wait_Ack();
        Test_ack();
       
        IIC_Start();
        IIC_Send_Byte(0x81);
        //IIC_Wait_Ack();
        Test_ack();
        dat = INA_IIC_Read_Byte();
        INA_IIC_ACK_Send(0);
        dat<<=8;
       
        dat += INA_IIC_Read_Byte();
        INA_IIC_ACK_Send(1);
        IIC_Stop();
        return dat;
}


unsigned int INA_GET_Current_MA(void)                //获取电流(单位:mA)
{
        unsigned int dat;
        dat=INA219_ReadReg(0x04);
        return (int)(dat*0.1);                //得到寄存器的值在乘以每位对应的值(IAN_I_LSB)得到实际的电流
}


读取回来的电流值,总是6553

使用特权

评论回复
沙发
ligao0302|  楼主 | 2025-3-3 09:26 | 只看该作者
请高手帮忙指点,读取回来的值是全FF

使用特权

评论回复
评论
stardust111 2025-4-19 19:52 回复TA
你好,你解决了吗?我现在也是碰到这个问题 00 05寄存器都配置好了 但读取的回来的值全是0xFFFD (-3) 
板凳
回复就哭哭| | 2025-4-30 23:47 | 只看该作者
在读取电流前必须先正确写入校准值,否则返回的电流数据是无效的、固定的或饱和的(如你看到的 6553)。
在初始化时,写入寄存器 0x05(Calibration Register)一个合理的值。

例如,假设你配置的电阻是 0.1Ω,最大电流 3.2A,推荐校准值:INA219_WriteReg(0x05, 4096); // 示例:写入校准寄存器,值依据你的分流电阻和预期量程计算


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:电子村庄论坛 www.5project.com

51

主题

159

帖子

1

粉丝