Przeglądaj źródła

1. 充电器检测后,如果过高温或者过低温,不打开充电mos
2. 充电过程中检测到温度不允许充电,才关闭充电mos,否则会导致大电流放电,充电mos不打开,发热
3. 放电过程中检测到温度不允许放电,才关闭放电mos,否则会导致充电不开放电mos,发热

Signed-off-by: huhui <huhui@sharkgulf.com>

huhui 5 lat temu
rodzic
commit
cb5b26276e
1 zmienionych plików z 17 dodań i 7 usunięć
  1. 17 7
      Application/app/sox/state.c

+ 17 - 7
Application/app/sox/state.c

@@ -187,26 +187,34 @@ static s32 _process_unheath(void){
 		return unhealth; //测试模式只关注短路保护
 	}
 	if (bms_health()->charger_over_current || bms_health()->charger_over_temp || bms_health()->charger_lower_temp ||
-				bms_health()->over_temp_deny_charger|| bms_health()->lower_temp_deny_charger ||
 				bms_health()->charger_over_voltage || bms_health()->sigle_cell_over_voltage){
 		charger_open(0); //disable charger mosfet
 		unhealth |= Health_charger_Fault;
 	}
-
+	if (bms_health()->over_temp_deny_charger|| bms_health()->lower_temp_deny_charger) {
+		if (_bms_state.charging) {
+			charger_open(0); //disable charger mosfet
+		}
+		unhealth |= Health_charger_Fault;
+	}
 	if (bms_health()->discharger_over_temp || bms_health()->discharger_lower_temp || bms_health()->discharger_lower_voltage ||
-				bms_health()->over_temp_deny_discharger|| bms_health()->lower_temp_deny_discharger || bms_health()->sigle_cell_lower_voltage){
+				bms_health()->sigle_cell_lower_voltage){
 		if (bms_health()->discharger_over_temp || bms_health()->sigle_cell_lower_voltage || bms_health()->discharger_lower_voltage){ //放电过高温后,小电流也必须关闭
 			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 ||
-			bms_health()->over_temp_deny_discharger || bms_health()->lower_temp_deny_discharger) {
+		if (bms_health()->sigle_cell_lower_voltage || bms_health()->discharger_lower_voltage) {
 			unhealth |= Health_Fault_Can_Sleep;
 		}
 	}
-
+	if (bms_health()->over_temp_deny_discharger|| bms_health()->lower_temp_deny_discharger) {
+		if (!_bms_state.charging) {
+			discharger_open(0); //disable charger mosfet
+		}
+		unhealth |= (Health_Discharger_Failt | Health_Fault_Can_Sleep);		
+	}
 	if (io_state()->aux_lock_detect || bms_health()->small_current_short) {
 		unhealth |= Health_aux_Fault;
 	}
@@ -347,7 +355,9 @@ static void _process_iostate_changed(s32 unhealth){
 	}
 	if (io_state()->charger_detect_irq && ((unhealth & Health_charger_Fault) == 0) && (_bms_state.cell_max_vol < SIGLE_CELL_MAX_CHARGER_VOLTAGE)) {
 		if (!ml5238_is_charging() && shark_uart_timeout()){//不在车上,底座上,充电柜上,检测到充电器插入,自动打开充电,否则的话,只能通过指令来打开充电mos
-			charger_open(1);
+			if (!(bms_health()->over_temp_deny_charger|| bms_health()->lower_temp_deny_charger)) {
+				charger_open(1);
+			}
 		}
 	}
 	if (io_state()->hall_detect){