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.

BQ27220: hello

Part Number: BQ27220
Other Parts Discussed in Thread: BQSTUDIO

hello

  • Hello, we have received your case and the investigation will take some time. Thank you for your patience.

  • 这个是BQ27220的设计原理图;
    硬件:850ma,3.7v三元锂电池,设备无线充,实测满电最高4.15v,最低放电电压3.0v。
    目前出现的问题、电量充放电循环后、电量显示百分之100的时候充电电压4.17左右、停止充电实际电压4.0v左右,实际上不是百分之百电量、但显示的百分之百 ;
    另一种情况、循环后、电池完全放空、上电显示百分之40多。实际3.8v就显示电量百分之百,这种情况的设备不多、但是存在。
    寄存器配置尝试过的情况:
    1、只配置设计和满电容量,
    2、增加配置测量寄存器,禁止休眠寄存器,以及百分之3和7阈值寄存器,
    3、也尝试过增加,修改最高和最低电压寄存器。
    效果都和上面描述的一样、电量显示不准。
    请问是什么情况?
    /**
     * @brief BQ27220初始化函数
     * @return 初始化是否成功
     */
    bool BQ27220_Init(void)
    {
        uint8_t tx_buf[3];
        uint8_t rx_buf_[2] = {0};
        uint16_t voltage = 0;
        
        // 初始化I2C总线
        if(!qx_driver_i2c_common_is_init())
        {
            qx_driver_i2c_common_init();
        }
        
        // 读取电压判断是否已初始化(保留原有逻辑,也可替换为设备ID判断)
        qx_driver_i2c_common_reg_read(BQ27220_ADDRESS, 0x3C, rx_buf_, 2);
        nrf_delay_ms(10);
        voltage = rx_buf_[1];
        voltage = (voltage << 8) | rx_buf_[0];
        
        // 如果电压为850,认为已初始化完成
        if(voltage == 850)  
        {
            return true;
        }
        
        // 进入配置模式
        tx_buf[0] = 0X00;
        tx_buf[1] = 0x14;
        tx_buf[2] = 0x04;
        qx_driver_i2c_common_reg_write(BQ27220_ADDRESS, tx_buf, 3);
        nrf_delay_ms(50);
        
        tx_buf[1] = 0x72;
        tx_buf[2] = 0x36;
        qx_driver_i2c_common_reg_write(BQ27220_ADDRESS, tx_buf, 3);
        nrf_delay_ms(50);
        
        tx_buf[1] = 0xFF;
        tx_buf[2] = 0xFF;
        qx_driver_i2c_common_reg_write(BQ27220_ADDRESS, tx_buf, 3);
        nrf_delay_ms(50);
        
        tx_buf[1] = 0xFF;
        tx_buf[2] = 0xFF;
        qx_driver_i2c_common_reg_write(BQ27220_ADDRESS, tx_buf, 3);
        nrf_delay_ms(50);
        
        tx_buf[1] = 0x90;
        tx_buf[2] = 0x00;
        qx_driver_i2c_common_reg_write(BQ27220_ADDRESS, tx_buf, 3);
        nrf_delay_ms(50);
        
        // 配置各个寄存器(使用16位参数格式)
        BQ27220_WriteConfigWithChecksum(0x929B, 0x0021);  // 测量配置寄存器
        BQ27220_WriteConfigWithChecksum(0x929D, 0x0352);  // 满电容量寄存器(850mAh)
        BQ27220_WriteConfigWithChecksum(0x929F, 0x0352);  // 设计产能寄存器(850mAh)
        BQ27220_WriteConfigWithChecksum(0x9206, 0x0084);  // 禁止休眠寄存器
        
        BQ27220_WriteConfigWithChecksum(0x9271, 0x0F0E);  // 平滑处理寄存器
        
        // 3%电量对应2950mV,7%电量对应3050mV(匹配3000mV放电截止)
        BQ27220_WriteConfigWithChecksum(0x92B7, BQ27220_ConvertVoltageToData(2950));  // 3%低电量阈值
        BQ27220_WriteConfigWithChecksum(0x92BA, BQ27220_ConvertVoltageToData(3050));  // 7%低电量阈值
        
    //    // CEDV Profile 1 电压配置(匹配实际电池:4150mV满电、3000mV截止)
    //    BQ27220_WriteConfigWithChecksum(0x92BD, BQ27220_ConvertVoltageToData(4150));  // 0% DOD - 满电4150mV
    //    BQ27220_WriteConfigWithChecksum(0x92BF, BQ27220_ConvertVoltageToData(4043));  // 10% DOD - 保持原值
    //    BQ27220_WriteConfigWithChecksum(0x92C1, BQ27220_ConvertVoltageToData(3925));  // 20% DOD - 保持原值
    //    BQ27220_WriteConfigWithChecksum(0x92C3, BQ27220_ConvertVoltageToData(3821));  // 30% DOD - 保持原值
    //    BQ27220_WriteConfigWithChecksum(0x92C5, BQ27220_ConvertVoltageToData(3725));  // 40% DOD - 保持原值
    //    BQ27220_WriteConfigWithChecksum(0x92C7, BQ27220_ConvertVoltageToData(3656));  // 50% DOD - 保持原值
    //    BQ27220_WriteConfigWithChecksum(0x92C9, BQ27220_ConvertVoltageToData(3619));  // 60% DOD - 保持原值
    //    BQ27220_WriteConfigWithChecksum(0x92CB, BQ27220_ConvertVoltageToData(3582));  // 70% DOD - 保持原值
    //    BQ27220_WriteConfigWithChecksum(0x92CD, BQ27220_ConvertVoltageToData(3515));  // 80% DOD - 保持原值
    //    BQ27220_WriteConfigWithChecksum(0x92CF, BQ27220_ConvertVoltageToData(3439));  // 90% DOD - 保持原值
    //    BQ27220_WriteConfigWithChecksum(0x92D1, BQ27220_ConvertVoltageToData(3000));  // 100% DOD - 放电截止3000mV
        
        // 退出配置模式
        tx_buf[0] = 0x00;
        tx_buf[1] = 0x91;
        tx_buf[2] = 0x00;
        qx_driver_i2c_common_reg_write(BQ27220_ADDRESS, tx_buf, 3);
        nrf_delay_ms(50);
        
        tx_buf[0] = 0x00;
        tx_buf[1] = 0x30;
        tx_buf[2] = 0x00;
        qx_driver_i2c_common_reg_write(BQ27220_ADDRESS, tx_buf, 3);
        nrf_delay_ms(50);
        
        return true;
    }

  • 这意味着FCC值过小,或者基于电池电压的初始电阻值估算过高。

    请确保您为电池设置的FCC值正确(将其设为全新电池从满充到完全放电的典型mAh值),并确保至少完成一个完整充放电周期,以补偿因电压查表导致的初始电阻值误差。

  • FCC值实际硬件测量的出只有810ma。

    通过更改0x929D寄存器满电容量来修改FCC。

    BQ27220_WriteConfigWithChecksum(0x929D, 0x032A);  // 满电容量寄存器(810mAh)

    对应的电压查表,重新配置最高最低电压,需要增加上嘛?

    //    BQ27220_WriteConfigWithChecksum(0x92BD, BQ27220_ConvertVoltageToData(4150));  // 0% DOD - 满电4150mV

    //    BQ27220_WriteConfigWithChecksum(0x92D1, BQ27220_ConvertVoltageToData(3000));  // 100% DOD - 放电截止3000mV

    电压对比中间10-90的寄存器要不要对应修改?

    对应的、还需要修改哪些寄存器才能解决我目前问题?

  • 请勿更改X% DOD电压表。这些表仅作为编写配置时的起始点。

    您需要正确配置充电终止检测功能,以便仪表能够识别充电停止的时刻。仪表将利用此信息作为自动FCC更新的基准点,该更新基于合格放电数据进行。请查阅第4.9.47节和第4.9.48节。

    www.ti.com/.../sluubd4a.pdf

  • 你好、这个更改4.9.47和48后也还是没有解决显示百分之百的时候充电测电压4.16实际只有4.08v。寄存器配置如下。请问改如何解决?

    BQ27220_WriteConfigWithChecksum(0x929B, 0x0121); // 测量配置寄存器

    BQ27220_WriteConfigWithChecksum(0x9206, 0x0084); // 禁止休眠寄存器

    BQ27220_WriteConfigWithChecksum(0x9271, 0x0F0E); // 平滑处理寄存器

    // 设计容量 Design Capacity(mAh):850 mAh → 0x0352,地址 0x929F
    BQ27220_WriteConfigWithChecksum(0x929F, 0x0352);

    // 满电容量初值 Full Charge Capacity(mAh):850 mAh → 0x0352,地址 0x929D
    // 初期将其与设计容量一致,有助于早期 SOC 稳定
    BQ27220_WriteConfigWithChecksum(0x929D, 0x0352);

    // Taper 电流(mA):约 0.05C(50 mA)→ 0x002D,地址 0x9201
    // 用于满充判定,配合充电电压阈值避免误判
    BQ27220_WriteConfigWithChecksum(0x9201, 0x0032);

    // 充电终止电压 Charge Termination Voltage(mV):4200mv - 30mv
    BQ27220_WriteConfigWithChecksum(0x92A5, 0x001E);

  • The voltage error is unusual. Please measure the voltage on the gauge's BAT pin and compare it with the measurement results. It will not be off by 80mV. Is there a voltage drop between the cell and the gauge? Please show exactly how you measured the 4160mV.

    If this is indeed a measurement error by the gauge, and it is a constant offset error (e.g. always 80mV, regardless of battery voltage), then you can program this constant offset to Calibration->Pack V Offset, which is at address 0x91B7. The gauge will then remove this offset from the voltage measurement.

  • 设备充电状态下、电量刚刚显示百分之百的时候,测量带电电池电压为4.16v。然后停止充电,等待一分钟、再次测量电池电压为4.08v左右。如果刚刚显示百分之百的时候不停止充电、再冲一段时间、停止充电测量电池电压为4.15v。

  • 还有一个情况就是设备电池完全放空后、设备开始充电直接显示百分之10几

  • 电池充电期间电压高于充电结束后是正常现象。

    若电池已充满仍继续充电,最终会导致电池电压升高,同时SOC值卡在100%。此时电池将处于过充状态,与原先设定的充电终止条件及历史测得的FCC值不符。此时需进行合格放电测试,使FCC更新至新满电状态方能适应。

    关于另一现象——SOC从0%突然跳至十几百分比:请详细描述具体发生情况(附带显示该跳变的寄存器日志文件)。

  • 关于soc从0到10几的跳变现象:设备完全放空、电池进入保护、电量计掉电。然后进行充电、刚充上电、电量计就直接显示百分之十几。我们这个设备里的BQ27220没有留对接的调试口所以没法连接BQStudio等软件进行调试输出日志。

  • Oh, this explains it. The CEDV algorithm uses an approximation of cell state if the gauge is reset. This is purely voltage driven and not accurate, if the cell isn't relaxed or temperature isn't 25 deg.C. There is no way to "fix" this other than don't power cycle or reset the gauge.