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 電壓上升,使器件能夠退出測試并恢復對電池充電。