Explorar o código

放电欠压后,等10s关闭大电

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui %!s(int64=5) %!d(string=hai) anos
pai
achega
13342fec49
Modificáronse 1 ficheiros con 20 adicións e 8 borrados
  1. 20 8
      Application/app/sox/state.c

+ 20 - 8
Application/app/sox/state.c

@@ -176,6 +176,7 @@ void start_aux_power(int start){
 #define Health_charger_Fault 2
 #define Health_aux_Fault 4
 #define Health_Fault_Can_Sleep 8
+static u64 discharger_close_time = 0;
 static s32 _process_unheath(void){
 	u32 unhealth = Health_Success;
 	if (bms_health()->load_current_short) {//短路检测后,关闭充放电mos
@@ -205,23 +206,34 @@ static s32 _process_unheath(void){
 			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);
 			unhealth |= Health_aux_Fault;
 		}
 		discharger_open(0); //disable charger mosfet
 		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_state.charging) {
-			discharger_open(0); //disable charger mosfet
+			discharger_open(0); //disable discharger mosfet
 		}
 		unhealth |= (Health_Discharger_Failt | Health_Fault_Can_Sleep);		
 	}