TI论坛
直播中

吕钢格

7年用户 967经验值
私信 关注
[问答]

用INA226做个电流电压测量的工具监视铅酸电池充放电状态遇到的疑问求解


  • 最近想用INA226做个电流电压测量的工具监视铅酸电池充放电状态,遇到点问题,情况是这样的在主函数体中只是先运行 INA226_WriteReg(INA226_CONFIG,0x4127);
    然后
    tmp=INA226_ReadReg(INA226_BUS);
    使用串口输出tmp变量时候一直显示输出为零,搞不清是什么情况,恳请各位老师帮帮忙指导一下,不胜感激
    以下是INA226.c 文件代码:#define INA226_W        0x80#define INA226_R        0x81#define INA226_CONFIG        0x00#define INA226_SHUNT        0x01#define INA226_BUS                0x02#define INA226_POWEER        0x03#define INA226_CURRENT        0x04#define INA226_CAL                0x05#define INA226_MAEN                0x06#define INA226_AIERT        0x07#define INA226_DIEID        0xFFsbit SCL=P0^0;sbit SDA=P0^1;void Delay1us();void INA226_Start();void INA226_Stop();void INA226_GetACK();void INA226_WriteByte(unsigned char tmp);void INA226_SendACK();unsigned char INA226_ReadByte();void INA226_SetPoint(unsigned char addr);void INA226_WriteReg(unsigned char addr,unsigned int dat);unsigned int INA226_ReadReg(unsigned char addr);void Delay1us()                //@33.1776MHz{        unsigned char i;        _nop_();        _nop_();        _nop_();        i = 5;        while (--i);}void INA226_Start(){        SDA=1;        Delay1us();        SCL=1;        Delay1us();        SDA=0;        Delay1us();}void INA226_Stop(){        Delay1us();Delay1us();        SCL=1;        Delay1us();        SDA=0;        Delay1us();        SDA=1;        Delay1us();} void INA226_GetACK(){        Delay1us();        SCL=0;        SDA=1;        Delay1us();Delay1us();        SCL=1;        while(SDA==1);        Delay1us();        SCL=0;}void INA226_WriteByte(unsigned char tmp){        unsigned char i;        for(i=0;i<8;i++){                Delay1us();                SCL=0;                SDA=(tmp<>8);        INA226_WriteByte(dat&0x00ff);        INA226_Stop();                }unsigned int INA226_ReadReg(unsigned char addr){        unsigned int tmp;        INA226_SetPoint(addr);        INA226_Stop();        INA226_Start();        INA226_WriteByte(INA226_R);        tmp=INA226_ReadByte();        tmp<<=8;        tmp|=INA226_ReadByte();        INA226_Stop();        return tmp;}


回帖(1)

杨秀英

2024-9-10 15:57:18
根据您提供的信息,您正在尝试使用INA226模块来监视铅酸电池的充放电状态。您在主函数中调用了 `INA226_WriteReg(INA226_CONFIG, 0x4127)` 和 `tmp = INA226_ReadReg(INA226_BUS)`,但是串口输出的 `tmp` 变量始终为零。为了解决这个问题,我们可以按照以下步骤进行排查:

1. 确认硬件连接:首先,请确保您的INA226模块与铅酸电池、微控制器等硬件正确连接。检查电源、地线、通信线路等是否连接正确。

2. 检查初始化代码:确保您已经正确初始化了INA226模块。通常,我们需要先设置配置寄存器,然后设置校准寄存器。请参考INA226的数据手册,确保您的初始化代码正确。

3. 检查寄存器地址:在您的代码中,`INA226_CONFIG` 和 `INA226_BUS` 是寄存器地址。请确保这些地址与INA226的数据手册中的地址一致。

4. 检查写入和读取函数:请确保您的 `INA226_WriteReg` 和 `INA226_ReadReg` 函数能够正确地写入和读取寄存器。您可以在这些函数中添加调试信息,以检查它们是否正常工作。

5. 检查串口输出:请确保您的串口输出代码能够正确地将 `tmp` 变量的值发送出去。您可以在串口输出之前添加一些调试信息,以检查 `tmp` 变量的值是否正确。

6. 检查电源和地线:请确保INA226模块的电源和地线连接正确。如果电源或地线连接不正确,可能会导致模块无法正常工作。

7. 检查数据手册:请仔细阅读INA226的数据手册,确保您了解如何正确使用该模块。数据手册中通常会提供详细的寄存器配置和使用方法。

通过以上步骤,您应该能够找到问题所在并解决它。如果问题仍然存在,请提供更多详细信息,以便我们能够更好地帮助您。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分