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.

[参考译文] BQ25703A:电池未按所需值充电

Guru**** 2538960 points
Other Parts Discussed in Thread: BQ25703A

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/755024/bq25703a-battery-is-not-charging-with-desired-value

器件型号:BQ25703A

我使用2S-2P (5200mAh)电池、壁式充电器为10W (5V、2A)。 充电 IC BQ25703A 已使用8.4V 的 MaxChargeVoltage 和1536mA 的 ChargeCurrent (I2C 地址= 02h/03h)进行编程。 充电选项0具有0E02H 值。

当系统和电池处于电路中且电源来自10W 壁式充电器时、充电电流为430mA、系统电流为230mA、VSYS 为8.06V。

当系统与电路物理断开连接时、充电电流增加至560mA。  

问题:

1) 1)为什么系统断开后充电电流不会增加。?

2) 2)我们要求电池必须在6-8小时内充电、以便如何增加充电电流?  

3) 3)上述配置的预期效率必须是多少?

我已附上充电器 IC 和代码的原理图。

代码:

Int BatteryChargerInit (bool *pbIsLaptopConnected)
{
int iI2cFd =-1;
unsigned char ucRegisterValue=0;
unsigned char ucCurrentRegisterValue = 0;
int iRetVal =-1;
*pbIsLaptopConnected = false;
#if 0
//!打开 I2C 器件。
iI2cFd = I2COpen (I2C_DEV_4);
if (零> iI2cFd)
{
printf ("打开 I2C 设备失败\n");
//!关闭文件描述符。
I2CClose (iI2cFd);
返回-1;
}

//! 启用 OTG 复位
SetOutputStatusOfGpioEx (eGPIO_EXPANDER_ONE、een_OTG、Eoff);

//! 写入充电选项寄存器 LSB
ucRegisterValue = 0x0E;
if (zero =I2CWriteRegisterVal (iI2cFd、BQ25703A_CHARGE_OPT_0_REG、&ucRegisterValue、
1、BQ25703A_I2C_SLAVE_ADDRESS))
{
//! 写入充电选项寄存器 MSB
ucRegisterValue = 0x02;
1、BQ25703A_I2C_SLAVE_ADDRESS))
{
//! 写入最大电压寄存器 LSB
ucRegisterValue = 0xD0;
if (zero =I2CWriteRegisterVal (iI2cFd、BQ25703A_MAX_CHARGE_VTG、&ucRegisterValue、
1、BQ25703A_I2C_SLAVE_ADDRESS))
{
//! 写入最大电压寄存器 MSB
ucRegisterValue = 0x20;
if (零=I2CWriteRegisterVal (iI2cFd、0x05、&ucRegisterValue、
1、BQ25703A_I2C_SLAVE_ADDRESS))
{
// WriteGpio (0x20c81b0、19、Eoff);
// WriteGpio (0x20c81b0、20、Eoff);

//if (BatteryChargerSelectPin ())
//{

//BatteryChargerDetection (&ucCurrentRegisterValue、
// &ucRegisterValue);

qDebug ()< <"Charging through Charger";
                        ucRegisterValue = 00;
                        ucCurrentRegisterValue = 06;
                   // }
                    //else
                    //{
                        //qDebug()<<"Charging through Laptop";
                        //ucRegisterValue = 40;
                        //ucCurrentRegisterValue = 01;
                        //*pbIsLaptopConnected = true;
                    //}
                    //!Write to  Charge current LSB
                    //ucRegisterValue = 0x00;
                    if(ZERO == I2CWriteRegisterVal( iI2cFd, 0x02, &ucRegisterValue,
                                                    1, BQ25703A_I2C_SLAVE_ADDRESS))
                    {
                        //!Write to  Charge current MSB
                        //ucRegisterValue = 0x06;
                        if(ZERO == I2CWriteRegisterVal( iI2cFd, 0x03,&ucCurrentRegisterValue,
                                                        1, BQ25703A_I2C_SLAVE_ADDRESS))
                        {
                            qDebug() << "BatteryChargerInit Successful";
                            iRetVal = ZERO;
                        }
                    }
                }
            }
        }
    }
    //!Close file descriptor.
    I2CClose(iI2cFd);

请尽快答复。  

谢谢:-)

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

    在移除 SYS 负载前后、充电器的 VBUS 引脚上的电压是多少?

    您能否测量输入感应电阻器上的差分电压?

    我想您处于 DPM 状态、电流受到限制。 虽然您有一个10W 适配器、但外部 ILIM_HIZ 引脚电阻分压器强制电流限制低至1.55A、这意味着您只能提供7.77W 的输入功率。 由于电缆中的电阻损耗可能会更小、因为输入会在到达充电器输入端和电流消耗时下降。

    检查这一点的一种简单方法是在充电器运行时为我们提供所有充电器设置的寄存器转储。

    让我们从那里开始、我们可以进一步讨论。


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

     您好、Joel、

    我们仅配置了几个寄存器、 我附加了一张寄存器转储图片。

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

    这对我来说是不正确的。

    MaxChargeVoltage 值设置为0xD0? 这相当于208mV。 我看到上面的代码显示了0x20的 MSB 和0xD0的 LSB。
    IIN_DPM 值0x100建议输入电流限制为50mA、有效地将输入功率限制为250mW。
    并且 ChargerStatus 显示延迟、OTG OCP 和 OTG OVP 条件。

    同样、您能否重新验证该寄存器从充电器转储数据?


    此致、
    Joel H
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    #define BQ25703A_DEVICE_Manufacturer_ID 0x2E/*
    
    ! \def BQ25703A_DEVICE_Manufacturer_VAL
    简要说明制造商 ID 寄存器值
    */
    #define BQ25703A_DEVICE_Manufacturer_VAL 0x40
    
    /*! \def BQ25703A_CHARGE_OPT_0_REG
    \brief 充电选项0寄存器 LSB 地址
    */
    #define BQ25703A_CHARGE_OPT_0_REG 0x00
    
    /*! \def BQ25703A_MAX_CHARGE_VTG
    简要介绍最大充电电压寄存器 LSB 地址
    */
    #define BQ25703A_MAX_CHARGE_VTG 0x04
    
    /*! \def BQ25703A_OTG_VTG_REG_LSB
    简要介绍 OTG 电压寄存器 LSB 地址
    */
    #define BQ25703A_OTG_VTG_REG_LSB 0x06
    
    /*! \def BQ25703A_OTG_VTG_REG_MSB
    简要介绍 OTG 电压寄存器 MSB 地址
    */
    #define BQ25703A_OTG_VTG_REG_MSB 0x07
    
    /*! \def BQ25703A_OTG_CUR_REG_MSB
    简要介绍 OTG 电流寄存器 MSB 地址
    */
    #define BQ25703A_OTG_CUR_REG_MSB 0x09
    
    /*! \def BQ25703A_OTG_CUR_REG_LSB
    简要介绍 OTG 电流寄存器 LSB 地址
    */
    #define BQ25703A_OTG_CUR_REG_LSB 0x08
    
    /*! \def BQ25703A_MAX_CHARGE_VTG
    简要介绍最大充电电压寄存器 LSB 地址
    */
    #define BQ25703A_MAX_CHARGE_VTG 0x04
    
    /*! BQ25703A_CHARGE_OPN3
    \brief 充电选项3寄存器 LSB 地址
    */
    #define BQ25703A_CHARGE_OPN3 0x34
    
    /*! \def BQ25703A_CHARGE_OPN0
    \brief 充电选项0寄存器 LSB 地址
    */
    #define BQ25703A_CHARGE_OPN0 0x00
    
    /*! \def BQ25703A_DEVICE_Manufacturer_VAL
    简要说明制造商 ID 寄存器值
    */
    #define BQ25703A_DEVICE_Manufacturer_VAL 0x40
    
    /*! \def BQ25703A_CHARGE_STATUS
    \brief 充电器状态寄存器值
    */
    #define BQ25703A_CHARGE_STATUS 0x20
    #define bq25703A_DEVICE_ID 0xFF
    
    #define ZERO
    
    0 void bq25703A_ENABLE_Dedicated (void)
    {
    u8 u8RegisterValue = 0;
    u8 u8CurrentRegisterValue = 0;
    
    u8 u8ReadRegLSBVal = 0;
    u8 u8ReadRegMSBVal = 0;
    U16 u16Register= 0xFF;
    //! 写入充电选项寄存器 LSB
    u8RegisterValue = 0x0E;
    if (zero = bq25703A_write (BQ25703A_CHARGE_OPT_0_REG、u8RegisterValue)
    ){
    //! 写入充电选项寄存器 MSB
    u8RegisterValue = 0x02;
    if (zero =bq25703A_write (0x01、u8RegisterValue))
    {
    //! 写入最大电压寄存器 LSB
    u8RegisterValue = 0xD0;
    if (zero = bq25703A_write (BQ25703A_MAX_CHARGE_VTG、u8RegisterValue))
    {
    //! 写入最大电压寄存器 MSB
    u8RegisterValue = 0x20;
    if (zero =bq25703A_write (0x05、u8RegisterValue))
    {
    u8RegisterValue = 0x40;//0x00;
    u8CurrentRegisterValue = 0x07;//0x06;
    
    //!写入到充电电流 LSB
    if (zero =bq25703A_write (0x02、u8RegisterValue))
    {
    //!写入到充电电流 MSB
    if (zero =bq25703A_write (0x03、u8CurrentRegisterValue))
    {
    printk (Kern_Emerg "充电器集:专用\n");
    }
    }
    
    }
    
    }
    否则
    printk (Kern_Emerg "充电器设置失败:专用\n");
    
    //! 读取寄存器01/00
    bq25703A_READ (BQ25703A_CHARGE_OPT_0_REG、\u8ReadRegLSBVal、1);
    
    bq25703A_READ (0x01、\u8ReadRegMSBVal、1);
    
    u16RegisterValue =((u8ReadRegMSBVal & u16RegisterValue)<<8)| u8ReadRegLSBVal;
    
    printk (Kern_Emerg "******* ChargeOption0值= 0x%x\n"、u16RegisterValue);
    
    
    //! 读取寄存器03/02
    bq25703A_read (0x02、\u8ReadRegLSBVal、1);
    
    bq25703A_read (0x03、\u8ReadRegMSBVal、1);
    
    u16RegisterValue =((u8ReadRegMSBVal & u16RegisterValue)<<8)| u8ReadRegLSBVal;
    
    printk (Kern_Emerg "******* ChargeCurrent 值= 0x%x\n"、u16RegisterValue);
    
    
    //! 读取寄存器05/04
    bq25703A_read (0x04、\u8ReadRegLSBVal、1);
    
    bq25703A_read (0x05、\u8ReadRegMSBVal、1);
    
    u16RegisterValue =((u8ReadRegMSBVal & u16RegisterValue)<<8)| u8ReadRegLSBVal;
    
    printk (Kern_Emerg "******* MaxChargeVoltage 值= 0x%x\n"、u16RegisterValue);
    
    //! 读取寄存器21/20
    bq25703A_READ (0x20、\u8ReadRegLSBVal、1);
    
    bq25703A_READ (0x21、\u8ReadRegMSBVal、1);
    
    u16RegisterValue =((u8ReadRegMSBVal & u16RegisterValue)<<8)| u8ReadRegLSBVal;
    
    printk (Kern_Emerg "******* ChargerStatus 值= 0x%x\n"、u16RegisterValue);
    
    //! 读取寄存器25/24
    bq25703A_read (0x24、\u8ReadRegLSBVal、1);
    
    bq25703A_read (0x25、\u8ReadRegMSBVal、1);
    
    u16RegisterValue =((u8ReadRegMSBVal & u16RegisterValue)<<8)| u8ReadRegLSBVal;
    
    printk (Kern_Emerg "******* IIN_DPM 值= 0x%x\n"、u16RegisterValue);
    
    //! 读取寄存器0B/0A
    bq25703A_READ (0x0A、\u8ReadRegLSBVal、1);
    
    bq25703A_READ (0x0B、\u8ReadRegMSBVal、1);
    
    u16RegisterValue =((u8ReadRegMSBVal & u16RegisterValue)<<8)| u8ReadRegLSBVal;
    
    printk (Kern_Emerg "******* InputVoltage 值= 0x%x\n"、u16RegisterValue);
    
    //! 读取寄存器0F/0E
    bq25703A_READ (0x0E、&u8ReadRegLSBVal、1);
    
    bq25703A_READ (0x0F、&u8ReadRegMSBVal、1);
    
    u16RegisterValue =((u8ReadRegMSBVal & u16RegisterValue)<<8)| u8ReadRegLSBVal;
    
    printk (Kern_Emerg "******* IIN_host 值= 0x%x\n",u16RegisterValue);
    
    
    }
    
    void bq25703a_enable_downstream _charging (void)
    {
    U8 u8RegisterValue = 0;
    U8 u8CurrentRegisterValue = 0;
    //! 写入充电选项寄存器 LSB
    u8RegisterValue = 0x0E;
    if (zero = bq25703A_write (BQ25703A_CHARGE_OPT_0_REG、u8RegisterValue))
    {
    //! 写入充电选项寄存器 MSB
    u8RegisterValue = 0x02;
    if (zero =bq25703A_write (0x01、u8RegisterValue))
    {
    //! 写入最大电压寄存器 LSB
    u8RegisterValue = 0xD0;
    if (zero = bq25703A_write (BQ25703A_MAX_CHARGE_VTG、u8RegisterValue))
    {
    //! 写入最大电压寄存器 MSB
    u8RegisterValue = 0x20;
    if (zero =bq25703A_write (0x05、u8RegisterValue))
    {
    u8RegisterValue = 40;
    u8CurrentRegisterValue= 1;
    
    //!写入到充电电流 LSB
    if (zero =bq25703A_write (0x02、u8RegisterValue))
    {
    //!写入到充电电流 MSB
    if (zero =bq25703A_write (0x03、u8CurrentRegisterValue))
    {
    printk (Kern_Emerg "充电器设置:下行\n");
    }
    }
    
    }
    
    }
    其他
    printk (Kern_Emerg "充电器设置失败:下行\n");
    }
    
    空电池充电器禁用(void)
    {
    U8 u8RegisterValue = 0;
    
    //! 写入充电选项寄存器 LSB
    u8RegisterValue =零;
    if (zero = bq25703A_write (BQ25703A_CHARGE_OPT_0_REG、u8RegisterValue))
    {
    //! 写入充电选项寄存器 MSB
    u8RegisterValue = 0x01;
    if (zero = bq25703A_write (0x01、u8RegisterValue))
    {
    //! 写入最大电压寄存器 LSB
    u8RegisterValue =零;
    if (zero = bq25703A_write (BQ25703A_MAX_CHARGE_VTG、u8RegisterValue))
    {
    //! 写入最大电压寄存器 MSB
    u8RegisterValue =零;
    if (zero = bq25703A_write (0x05、u8RegisterValue))
    {
    //!写入到充电电流 LSB
    u8RegisterValue =零;
    if (zero = bq25703A_write (0x02、u8RegisterValue))
    {
    //!写入到充电电流 MSB
    u8RegisterValue =零;
    if (zero =bq25703A_write (0x03、u8RegisterValue))
    {
    printk (Kern_Emerg "充电器已禁用\n");
    }
    }
    
    }
    
    }
    其他
    printk (Kern_Emerg "未禁用充电器\n");
    }
    
    

    您好、Joel、

    我要附上我们仅设置特定寄存器的代码。 是的、正确的是、打印的值错误、并且器件未充电、因为已设置"禁止充电"位。

    我们所附的代码是驱动程序代码、我们不确定器件打印错误值的原因。 为什么在我们尚未对其进行编程的情况下 IIN_DPM 寄存器具有值。

    我还看到了另一个问题、即器件从电源(壁式充电器)获取1.53A 电流、某些部分~430mA 进入系统、~330mA 进入电池。 现在、当系统关闭时、系统获取的电流变为0A、电池充电电流为700-750mA。 为什么电池充电电流不会至少达到1A、因为我们已通过编程将最大充电电流设置为1.8A。

    是否由于充电器的功率为10W 而发生此问题?

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

    如果遇到任何动态电源管理状态、此充电器将从编程值动态降低充电电流。 这是输入电流电源管理或输入电压电源管理。 当输入这些状态时、将调节相应的参数。

    在您的情况下、需要考虑几个因素。
    1) 1)充电器的输入电流限制设置为多少。 有一个外部 ILIM 引脚和一个内部寄存器位可对此进行编程。
    2) 2)转换器上的输出功率是多少(测量的 PSYS + PBAT)? 以及在额定电压下、它与10W x 效率的比较情况。
    3) 3)应用10W 适配器时、在充电器输入端(VBUS 引脚)测得的电压是多少、与寄存器中编程的 VINDPM 阈值相比、该电压是多少。 这就是为什么需要正确的寄存器转储来确定充电器处于何种状态。


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

    我们没有听到您的反馈。 我们假设您能够解决该问题。 如果不是、只需在下面发布回复或在该线程由于超时而锁定时创建新线程。