|
@@ -187,26 +187,34 @@ static s32 _process_unheath(void){
|
|
|
return unhealth; //测试模式只关注短路保护
|
|
return unhealth; //测试模式只关注短路保护
|
|
|
}
|
|
}
|
|
|
if (bms_health()->charger_over_current || bms_health()->charger_over_temp || bms_health()->charger_lower_temp ||
|
|
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){
|
|
bms_health()->charger_over_voltage || bms_health()->sigle_cell_over_voltage){
|
|
|
charger_open(0); //disable charger mosfet
|
|
charger_open(0); //disable charger mosfet
|
|
|
unhealth |= Health_charger_Fault;
|
|
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 ||
|
|
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){ //放电过高温后,小电流也必须关闭
|
|
if (bms_health()->discharger_over_temp || bms_health()->sigle_cell_lower_voltage || bms_health()->discharger_lower_voltage){ //放电过高温后,小电流也必须关闭
|
|
|
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 ||
|
|
|
|
|
- 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;
|
|
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) {
|
|
if (io_state()->aux_lock_detect || bms_health()->small_current_short) {
|
|
|
unhealth |= Health_aux_Fault;
|
|
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 (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
|
|
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){
|
|
if (io_state()->hall_detect){
|