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.

[参考译文] BQ25756E:尽管尝试 PGOOD = 1、CHARGE_STAT = 011、EN_CHG = 1、但仍然没有充电

Guru**** 2457760 points
Other Parts Discussed in Thread: BQ25756E

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1546250/bq25756e-still-no-charging-despite-attempted-pgood-1-charge_stat-011-en_chg-1

器件型号:BQ25756E


工具/软件:

您好:

看起来我之前的线程由于不活动而被锁定。 尽管多次硬件返修尝试和编辑 I2C 配置字节、但仍然无法让此电路为电池充电。 这些串行调试消息由主机微控制器在打开台式电源将 VAC 输入应用于此充电器时生成:

触发充电器中断!
BQ25756E 寄存器地址 0x2B — 写入值 0xE0
状态:CC 快速充电
电源正常= 1
启用充电= 1
EN_HIZ = 0
ADC 转换完成
器件进入了输入电压调节状态
充电状态转换
VBAT = 11110mV
VAC = 12054mV
IBat = 0uA
IAC = 0uA
VFB = 1395mV

这是我未经修改的原始原理图:

到目前为止、我尝试了以下修复:

  • 在 DRV_SUP 和每个 BTST 网络之间添加通孔 BAT41 肖特基二极管
  • 将我的原理图中的 R13 更改为 0 Ω、以消除对 DRV_SUP 电流的限制
  • 将开关电感器从 22uH 更改为 10uH
  • 在输入侧检测电阻的下游放置一个 470 μ F 电解电容器、以便更好地平衡电容
  • 焊接与 ICHG 和 ILIM_HIZ 电阻器并联的 RC 低通滤波器
  • 在我的原理图中意识到 STAT1、STAT2 和 PG 引脚直接接地后、我通过 I2C 写入禁用这些引脚。
  • 通过 I2C 写入禁用 ICHG 和 ILIM_HIZ 引脚、并将这些电阻器替换为 0 Ω、以实现完全固件控制
  • 由于我现在的电池没有热敏电阻、移除了 R15 并将 R19 替换为 0 欧姆、然后通过 I2C 写入禁用 TS 引脚

目前、我的固件按如下方式配置 IC:

#define VAC_INPUT_MAX_mV 34000 //for VAC_DPM register
#define VAC_INPUT_MIN_mV 4500 //for VAC_DPM register USB charger with some voltage drop
#define IAC_INPUT_MAX_mA  1000 //for IAC_DPM register. 1A input limit seems fine. Technically we could set the limit higher whenever VAC is lower
#define MAX_CHARGE_LIMIT_mV 12600 //4.2V/cell * 3 cells
#define MAX_CHARGE_CURRENT_mA 2000 //pack is 2600mAh, so this is equivalent to 0.77C charge rate
#define CHARGE_TERMINATION_CUURRENT_mA 200// (MAX_CHARGE_CRRENT_mA/10)//In host-controlled applications, the termination current can be programmed using the ITERM register bits; 
#define PRECHARGE_CURRENT_mA (MAX_CHARGE_CURRENT_mA/5) //charging current when battery voltage is above VBAT_SHORT but below VBAT_LOWV
#define VFB_REG_VOLTAGE_DESIRED_mV 1544 //set by hardware resistor configuration. Control loop tries to make voltage-divided charger output hit this target.
#define VFB_REG_OFFSET_mV 1504 //VFB when register is set to 0
#define VFB_REG_mV_PER_BIT 2
#define VFB_REG_VAL ((VFB_REG_VOLTAGE_DESIRED_mV - VFB_REG_OFFSET_mV)/VFB_REG_mV_PER_BIT)
#define VBAT_LOWV_LI_ION 0x3 //datasheet recommendation; 0x3 = 71.4% x VFB_REG; charger will only enter CC-fast-charge mode if battery is below 3V/cell; this is default value so we don't have to write
#define VRECHG_REG_VAL  0x3 //datasheet recommendation; 0x3 = 97.6% x VFB_REG; charger will top off battery once it drops below 4.1V/cell; this is default value so we don't have to write anything
#define ICHRG_REG_mA_PER_BIT 50
#define ICHRG_REG_VAL (MAX_CHARGE_CURRENT_mA / ICHRG_REG_mA_PER_BIT)
#define IAC_DPM_REG_mA_PER_BIT 50
#define IAC_DPM_REG_VAL (IAC_INPUT_MAX_mA / IAC_DPM_REG_mA_PER_BIT)
#define VAC_DPM_REG_mV_PER_BIT 20
#define VAC_DPM_REG_VAL (VAC_INPUT_MAX_mV / VAC_DPM_REG_mV_PER_BIT)
#define IPRECHG_REG_mA_PER_BIT 50
#define IPRECHG_REG_VAL (PRECHARGE_CURRENT_mA / IPRECHG_REG_mA_PER_BIT)
#define ITERM_REG_mA_PER_BIT 50
#define ITERM_REG_VAL (CHARGE_TERMINATION_CURRENT_mA / ITERM_REG_mA_PER_BIT)
#define BQ25756_TS_CHAG_BEHAVIOR_CTRL_DEFAULT 0x57 //power-on-reset value of the register
#define REG_TIMER_CTRL_DEFAULT 0x1D //power-on-reset value
#define DISABLE_ADC_DONE_INT (1<<7) //write to  REG0x28 
#define DISABLE_WDT_INT (1<<3) //write to REG0x28
#define DISABLE_NTC_INT (1<<4) // REG0x29
#define BQ25756_ADC_CTRL_RESETVAL 0x60
#define BQ25756_ADC_CTRL2_RESETVAL 0x0A

#define EN_ADC_BIT (1<<7)
#define PART_ID 0x32
#define CHG_CTRL_RESETVAL 0xC9
#define CHG_EN_BIT 1
#define VFB_ADC_EN_MASK 0xFD
#define REG0x19_RSTVAL 0x20
#define DIS_PFM_MASK 0xDF

...

BQ25756_WriteReg(BQ25756_ADD, BQ25756_CHRG_V_LIM_LSB, (VFB_REG_VAL & 0x1F)); //charge voltage, bits 4:0 of register
    BQ25756_WriteReg(BQ25756_ADD, BQ25756_CHRG_I_LIM_LSB, ((ICHRG_REG_VAL << 2) & 0xFC)); //charge current, shifted and masked to fill bits 7:2 of first register
    BQ25756_WriteReg(BQ25756_ADD, BQ25756_CHRG_I_LIM_MSB, ((ICHRG_REG_VAL >> 6) & 0x07)); //charge current, shifted and masked to fill bits 2:0 of next register
    BQ25756_WriteReg(BQ25756_ADD, BQ25756_INPUT_I_DPM_LIM_LSB, ((IAC_DPM_REG_VAL << 2) & 0xFC)); //input current, shifted and masked to fill bits 7:2 of first register
    BQ25756_WriteReg(BQ25756_ADD, BQ25756_INPUT_I_DPM_LIM_MSB, ((IAC_DPM_REG_VAL >> 6) & 0x07)); //input current, shifted and masked to fill bits 2:0 of next register
    BQ25756_WriteReg(BQ25756_ADD, BQ25756_INPUT_V_DPM_LIM_LSB, ((VAC_DPM_REG_VAL << 2) & 0xFC)); //input voltage, shifted and masked to fill bits 7:2 of first register
    BQ25756_WriteReg(BQ25756_ADD, BQ25756_INPUT_V_DPM_LIM_MSB, ((VAC_DPM_REG_VAL >> 6) & 0x3F)); //input voltage, shifted and masked to fill bits 5:0 of next register 
    BQ25756_WriteReg(BQ25756_ADD, BQ25756_PRECHRG_I_LIM_LSB, ((IPRECHG_REG_VAL << 2) & 0xFC)); //precharge current, shifted and masked to fill bits 7:2 of first register
    BQ25756_WriteReg(BQ25756_ADD, BQ25756_PRECHRG_I_LIM_MSB, ((IPRECHG_REG_VAL >> 6) & 0x03)); //precharge current, shifted and masked to fill bits 1:0 of next register    
    BQ25756_WriteReg(BQ25756_ADD, BQ25756_TERM_I_LIM_LSB, ((ITERM_REG_VAL << 2) & 0xFC)); //precharge current, shifted and masked to fill bits 7:2 of first register
    BQ25756_WriteReg(BQ25756_ADD, BQ25756_TERM_I_LIM_MSB, ((ITERM_REG_VAL >> 6) & 0x03)); //precharge current, shifted and masked to fill bits 1:0 of next register

    //until we have a better-characterized battery with a known thermistor, let's disable the TS pin and JEITA charging to make behavior more predictable
    BQ25756_WriteReg(BQ25756_ADD, BQ25756_TS_CHAG_BEHAVIOR_CTRL, (BQ25756_TS_CHAG_BEHAVIOR_CTRL_DEFAULT & 0xFC)); //clear bits 1:0 to disable TS pin and JEITA

    //disable watchdog timer. We want to only intervene upon interrupt, so there should be extended periods without I2C traffic
    BQ25756_WriteReg(BQ25756_ADD, BQ25756_TIMER_CTRL, (REG_TIMER_CTRL_DEFAULT & 0xCF)); //clear bits 4 and 5 to disable watchdog

    //we don't want activity on the interrupt pin for any of these events (right now at least)
    BQ25756_WriteReg(BQ25756_ADD, BQ25756_CHRG_MSK_1, (DISABLE_ADC_DONE_INT | DISABLE_WDT_INT));
    BQ25756_WriteReg(BQ25756_ADD, BQ25756_CHRG_MSK_2, DISABLE_NTC_INT);

    //test: disable ICHG, ILIM_HIZ, PG and STAT pins
    BQ25756_WriteReg(BQ25756_ADD, BQ25756_PIN_CTRL, 0x30);

    //enable the ADC for a single conversion
    BQ25756_WriteReg(BQ25756_ADD, BQ25756_ADC_CTRL, (BQ25756_ADC_CTRL_RESETVAL | EN_ADC_BIT)); 
    BQ25756_WriteReg(BQ25756_ADD, BQ25756_ADC_CHANNEL_CTRL, (BQ25756_ADC_CTRL2_RESETVAL & VFB_ADC_EN_MASK));

    //disable PFM
    BQ25756_WriteReg(BQ25756_ADD, BQ25756_POW_AND_REV_CTRL, (REG0x19_RSTVAL & DIS_PFM_MASK));

    //charger should be enabled by default, but just in case:
    BQ25756_WriteReg(BQ25756_ADD, BQ25756_CHRG_CTRL, (CHG_CTRL_RESETVAL | CHG_EN_BIT)); //enable charger

初始寄存器写入后、主机微控制器会轮询寄存器以响应中断引脚上的任何活动、并定期监测充电状态。

我在以前的设计中使用了类似的 TI 器件、但无论我尝试什么、这个器件都拒绝工作。 根据上面所见、我是否遗漏了一些内容?

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

    您好 Alex、

    感谢您对此有耐心。 我正在研究这个、本周晚些时候我会回来。

    同时、我认为可能存在布局错误? 您能给我发送 PCB 布局来确保布局良好吗?

    此致、
    Ethan Galloway

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

    当然、要发送的最佳格式是什么? 我可以附加部分布局的屏幕截图、但无法在公共论坛上发布整个电路板。 再次感谢您!

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

    您好 Alex、

    这是非常合理的。 如果可能、您能否通过 E2E 私人消息发送布局? 如果这样做不起作用、您能给我发送电路相关部分的屏幕截图吗?

    此致、
    Ethan Galloway

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

    您好 Alex、

    顺便说一下、如果您对充电器或我发送给您的布局建议有任何疑问、请告诉我。 如果您最终重新设计了布局、请随时再次将其发送给我、我可以查看新布局。

    此致、
    Ethan Galloway