This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] BQ28Z620:电流读数异常、读取数据为 0

Guru**** 2347070 points
Other Parts Discussed in Thread: BQ28Z620, BQ25798, BQSTUDIO
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1530245/bq28z620-abnormal-reading-of-current-reading-data-is-0

器件型号:BQ28Z620
主题中讨论的其他器件: BQ25798BQSTUDIO

工具/软件:

目前、我们已将贵公司的 BQ28Z620 芯片与 BQ25798 芯片配合用于实际工程。 但是、我们发现了一个问题、即电路板在开启时应该具有 70°–80mA 的电流、但我们使用 bq28z620 读回的数据为 0、并且我们 EE 同事在 BQStudio 上读回的数据是 80mA

一段时间后、电流如图所示
我想问、造成这种情况的可能原因是什么
逻辑分析仪读取的相关代码和数据如下

#define  BQ28Z620_CMD__CURRENT  0x0C

static int read_reg(const msdk_device_t *dev, uint8_t reg, uint8_t *value, uint8_t size)
{
    int ret = MSDK_STATUS__ERROR;

    const bq28z620_cfg_t *const dev_config = (const bq28z620_cfg_t *const)dev->config;

    ret = msdk_i2c_read_reg(dev_config->i2c_dev, dev_config->i2c_addr, reg, value, size);

    return ret;
}

static int read_current(const msdk_device_t *dev, int16_t *milli_ampere)
{
    uint8_t current_data[2] = {0};
    int res = MSDK_STATUS__ERROR;

    res = read_reg(dev, BQ28Z620_CMD__CURRENT, current_data, sizeof(current_data));

    if (MSDK_STATUS__OK == res) {
        uint16_t raw_value = (current_data[0] << 8) | current_data[1]; 
        
        if(!(raw_value & 0x8000)) {
            *milli_ampere = (int16_t)raw_value;  
        } else {
            *milli_ampere = -(int16_t)(raw_value & 0x7FFF); 
        }
    }

    return res;
}
msdk_status_t bq28z620_property_get(const msdk_device_t *dev,
    msdk_fuel_gauge_property_t prop,
    msdk_fuel_gauge_propval_t *val)
{
    MSDK_ASSERT(dev != NULL);
    MSDK_LOG_DBG("bq28z620_property_get: dev 0x%08x, prop %d", dev, prop);
    int res = MSDK_STATUS__ERROR;

    switch(prop) {

    case MSDK_FUEL_GAUGE_PROP_CURRENT: {
            int16_t mA = 0;
            res =read_current(dev, &mA);
            val->current = (int32_t)mA;
        }
        break;
    	
    default:
        res = MSDK_STATUS__NOT_SUPPORTED;
        break;
    }

    return res;
}

此致!

光圈

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请确保当前死区低于您要测量的值。 电量监测计会将任何小于该阈值的电流报告为 0mA。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Dominik、

    我们将其设置为小于 10mA、将显示为 0、一旦大于 10mA、就可以看到电流
    此外、我们在一段时间后检测到 32700mA 的电流值、该值不是很准确、也不是很高。 当我们的电路板导通时、电流将在 70 –80mA 之间
    您能帮助检查代码是否有任何问题、或者是否由其他问题引起?

    此致!

    光圈

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我没有审查代码的带宽。 电量监测计可能报告 0mA 的另一个原因是、电量监测计是否进入睡眠模式并启动自动校准过程。 请检查此行为是否与睡眠模式相关。