ZHCACP8 may 2023 BQ25150
我们提供了以下示例,用于演示 2V 充电抑制的一种可能实现方式。该示例的设置包括连接到 BQ25120A 的 MSP430F5529。对于适用于大多数充电器的更广泛示例,使用 BUVLO 设置测量电池电压,而不是使用 BQ2512x 系列器件上提供的基于电压的监测器功能来测量电池电压。
BAT_UV 故障可用作启动识别电池内部短路过程的触发器。该测试可能会对充电造成干扰,因此最好在运行测试之前先确认电池已严重放电。在这种情况下,Charger_getBatteryCriticallyDischarged 函数用于识别电池电压是否低到足以运行测试。
void Charger_handleBatUVFault(void){
//Charge is Disabled
Charger_disableCharge();
//Check if battery is critically discharged
if(Charger_getBatteryCriticallyDischarged()){
//Run battery short test
if(Charger_runBatteryShortTest()){
//If Battery is Shorted set global flag
Charger_BatteryShorted = true;
return;
}
}
//enable Charging
Charger_enableCharge();
return;
}
可通过以下代码行演示电池监测流程。为实现低电压充电抑制,监测流程只需对电池进行最低电压电平的测试。使用其他电压电平可以了解用于其他目的的电池电压是多少。
bool Charger_getBatteryCriticallyDischarged(void){
uint8_t currentBuvlo, faultRegisterValue;
bool batteryIsCriticallyDischarged;
uint16_t ERR_NO;
//Store Current BUVLO Setting
currentBuvlo = Charger_getBUVLO();
//Set BUVLO to Lowest Value
Charger_setBUVLO(CHARGER_BUVLO_2p2V);
//Read Fault Register
StdI2C_P_RX_Single(CHARGER_I2C_ADDR,CHARGER_REG_FAULT ,&faultRegisterValue ,&ERR_NO);
//Get BAT_UVLO Status
batteryIsCriticallyDischarged = (faultRegisterValue & CHARGER_FAULT_BATUV_MASK);
//Restore BUVLO Setting
Charger_setBUVLO(currentBuvlo);
return batteryIsCriticallyDischarged;
}
确定电池严重放电后,进行电池短路测试,在此期间使用低充电电流,并在短时间内以不同的间隔定期重新测试电池。该测试的电流、测试持续时间和重新测试的时间间隔可能因电池和应用而异。
bool Charger_runBatteryShortTest(void){
uint8_t pretermCurrent;
uint8_t maxRetries = 5;
//Store PreTerm current settings
pretermCurrent = Charger_getPreTermCurrent();
//Set PreTerm to 10mA
Charger_setPreTermCurrent(CHARGER_PRETERM_10mA);
for(int try = 0; try < maxRetries; try++){
//Enable Charging for test
Charger_enableCharge();
//Start Periodic Retest timer
Charger_startShortTestTimer();
//Await timer elapse
while(Charger_ShortTestTimerRunning);
//Disable charging for Critical Discharge test
Charger_disableCharge();
//Test if critically discharged
if (!Charger_getBatteryCriticallyDischarged()){
//Return PreTerm current to previous setting
Charger_setPreTermCurrent(pretermCurrent);
//Report no short on battery
return false;
}
}
//Return PreTerm current to previous setting
Charger_setPreTermCurrent(pretermCurrent);
//Report Shorted battery
return true;
}
最终,如果充电没有导致电池电压升至高于临界放电阈值,则设置一个指示电池短路的全局标志,并且不允许继续充电。这是一个在充电启用时检查的标志,设置该标志后,就不能开始充电。
void Charger_enableCharge(void){
uint8_t registerValue;
uint16_t ERR_NO;
//Check if Battery is Shorted before enabling charge
if(Charger_BatteryShorted){
return;
}
//Clear Charge Disable Bit
StdI2C_P_RX_Single(CHARGER_I2C_ADDR, CHARGER_REG_ICHG, ®isterValue, &ERR_NO);
registerValue &= ~(CHARGER_ICHG_DISABLE_MASK);
StdI2C_P_TX_Single(CHARGER_I2C_ADDR, CHARGER_REG_ICHG, registerValue, &ERR_NO);
return;
}
图 2-3 和图 2-4 中显示了实现的结果。在这些测试中,使用了一个电池仿真器来演示处于低电压的电池在保持低电压时如何防止充电。在短路测试期间恢复电压的电池可以恢复充电。
在 BAT 未恢复的情况下进行多次电池电压测量后,INT 变为高电平并且 IBAT 变为 0mA,表明已禁用充电。
几次重试后,BAT 电压上升,使器件能够退出测试并恢复对电池充电。