|
@@ -176,6 +176,7 @@ void start_aux_power(int start){
|
|
|
#define Health_charger_Fault 2
|
|
#define Health_charger_Fault 2
|
|
|
#define Health_aux_Fault 4
|
|
#define Health_aux_Fault 4
|
|
|
#define Health_Fault_Can_Sleep 8
|
|
#define Health_Fault_Can_Sleep 8
|
|
|
|
|
+static u64 discharger_close_time = 0;
|
|
|
static s32 _process_unheath(void){
|
|
static s32 _process_unheath(void){
|
|
|
u32 unhealth = Health_Success;
|
|
u32 unhealth = Health_Success;
|
|
|
if (bms_health()->load_current_short) {//短路检测后,关闭充放电mos
|
|
if (bms_health()->load_current_short) {//短路检测后,关闭充放电mos
|
|
@@ -205,23 +206,34 @@ static s32 _process_unheath(void){
|
|
|
unhealth |= Health_charger_Fault;
|
|
unhealth |= Health_charger_Fault;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- if (bms_health()->discharger_over_temp || bms_health()->discharger_lower_temp || bms_health()->discharger_lower_voltage ||
|
|
|
|
|
- bms_health()->sigle_cell_lower_voltage){
|
|
|
|
|
- #if IGNORE_DISCHARGER_LOW_VOL==0
|
|
|
|
|
- if (bms_health()->discharger_over_temp || bms_health()->sigle_cell_lower_voltage || bms_health()->discharger_lower_voltage){ //放电过高温后,小电流也必须关闭
|
|
|
|
|
|
|
+ if (bms_health()->discharger_over_temp || bms_health()->discharger_lower_temp){
|
|
|
|
|
+ if (bms_health()->discharger_over_temp){ //放电过高温后,小电流也必须关闭
|
|
|
start_aux_power(0);
|
|
start_aux_power(0);
|
|
|
unhealth |= Health_aux_Fault;
|
|
unhealth |= Health_aux_Fault;
|
|
|
}
|
|
}
|
|
|
discharger_open(0); //disable charger mosfet
|
|
discharger_open(0); //disable charger mosfet
|
|
|
unhealth |= Health_Discharger_Failt;
|
|
unhealth |= Health_Discharger_Failt;
|
|
|
- if (bms_health()->sigle_cell_lower_voltage || bms_health()->discharger_lower_voltage) {
|
|
|
|
|
- unhealth |= Health_Fault_Can_Sleep;
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (bms_health()->sigle_cell_lower_voltage || bms_health()->discharger_lower_voltage) {
|
|
|
|
|
+ unhealth |= Health_Fault_Can_Sleep;
|
|
|
|
|
+#if IGNORE_DISCHARGER_LOW_VOL==0
|
|
|
|
|
+ unhealth |= Health_Discharger_Failt;
|
|
|
|
|
+ if (ml5238_is_discharging()) {
|
|
|
|
|
+ if (discharger_close_time == 0) {
|
|
|
|
|
+ discharger_close_time = shark_get_mseconds();
|
|
|
|
|
+ }else if (shark_get_mseconds() >= (discharger_close_time + 10 * 1000)){
|
|
|
|
|
+ discharger_open(0);
|
|
|
|
|
+ discharger_close_time = 0;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
- #endif
|
|
|
|
|
|
|
+#endif
|
|
|
|
|
+ }else {
|
|
|
|
|
+ discharger_close_time = 0;
|
|
|
}
|
|
}
|
|
|
if (bms_health()->over_temp_deny_discharger|| bms_health()->lower_temp_deny_discharger) {
|
|
if (bms_health()->over_temp_deny_discharger|| bms_health()->lower_temp_deny_discharger) {
|
|
|
if (!_bms_state.charging) {
|
|
if (!_bms_state.charging) {
|
|
|
- discharger_open(0); //disable charger mosfet
|
|
|
|
|
|
|
+ discharger_open(0); //disable discharger mosfet
|
|
|
}
|
|
}
|
|
|
unhealth |= (Health_Discharger_Failt | Health_Fault_Can_Sleep);
|
|
unhealth |= (Health_Discharger_Failt | Health_Fault_Can_Sleep);
|
|
|
}
|
|
}
|