|
@@ -237,6 +237,7 @@ 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
|
|
|
discharger_open(0);
|
|
discharger_open(0);
|
|
|
|
|
+ push_event_persit(Discharger_Operate_Off, 5);
|
|
|
charger_open(0); //disable charger mosfet
|
|
charger_open(0); //disable charger mosfet
|
|
|
start_aux_power(0);
|
|
start_aux_power(0);
|
|
|
_bms_state.charging = 0;
|
|
_bms_state.charging = 0;
|
|
@@ -260,6 +261,7 @@ static s32 _process_unheath(void){
|
|
|
unhealth |= Health_aux_Fault;
|
|
unhealth |= Health_aux_Fault;
|
|
|
}
|
|
}
|
|
|
discharger_open(0); //disable charger mosfet
|
|
discharger_open(0); //disable charger mosfet
|
|
|
|
|
+ push_event_persit(Discharger_Operate_Off, 4);
|
|
|
close_dfet_reson = (bms_health()->discharger_over_temp == 1)?3:4;
|
|
close_dfet_reson = (bms_health()->discharger_over_temp == 1)?3:4;
|
|
|
unhealth |= Health_Discharger_Failt;
|
|
unhealth |= Health_Discharger_Failt;
|
|
|
}
|
|
}
|
|
@@ -272,6 +274,7 @@ static s32 _process_unheath(void){
|
|
|
start_aux_power(0);
|
|
start_aux_power(0);
|
|
|
if (ml5238_is_discharging()) {
|
|
if (ml5238_is_discharging()) {
|
|
|
close_dfet_reson = (bms_health()->sigle_cell_lower_voltage == 1) ?5:6;
|
|
close_dfet_reson = (bms_health()->sigle_cell_lower_voltage == 1) ?5:6;
|
|
|
|
|
+ push_event_persit(Discharger_Operate_Off, 3);
|
|
|
discharger_open(0);
|
|
discharger_open(0);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -280,6 +283,7 @@ static s32 _process_unheath(void){
|
|
|
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) {
|
|
|
close_dfet_reson = (bms_health()->over_temp_deny_discharger == 1)?7:8;
|
|
close_dfet_reson = (bms_health()->over_temp_deny_discharger == 1)?7:8;
|
|
|
|
|
+ push_event_persit(Discharger_Operate_Off, 2);
|
|
|
discharger_open(0); //disable discharger mosfet
|
|
discharger_open(0); //disable discharger mosfet
|
|
|
}
|
|
}
|
|
|
unhealth |= (Health_Discharger_Failt | Health_Fault_Can_Sleep);
|
|
unhealth |= (Health_Discharger_Failt | Health_Fault_Can_Sleep);
|
|
@@ -308,6 +312,7 @@ static void _process_user_request(s32 health){
|
|
|
}
|
|
}
|
|
|
if (_bms_state.user_request & USER_REQUEST_DISCHARGER_OFF){
|
|
if (_bms_state.user_request & USER_REQUEST_DISCHARGER_OFF){
|
|
|
discharger_open(0);
|
|
discharger_open(0);
|
|
|
|
|
+ push_event_persit(Discharger_Operate_Off, 1);
|
|
|
close_dfet_reson |= (3 << 24);
|
|
close_dfet_reson |= (3 << 24);
|
|
|
}
|
|
}
|
|
|
if (_bms_state.user_request & USER_REQUEST_CHARGER_OFF){
|
|
if (_bms_state.user_request & USER_REQUEST_CHARGER_OFF){
|
|
@@ -331,10 +336,14 @@ static void _process_user_request(s32 health){
|
|
|
open_dfet ++;
|
|
open_dfet ++;
|
|
|
if (!(health & Health_Discharger_Failt)){
|
|
if (!(health & Health_Discharger_Failt)){
|
|
|
if ((io_state()->hall_detect || _bms_state.charging) || !_can_close_mos_no_hall()){
|
|
if ((io_state()->hall_detect || _bms_state.charging) || !_can_close_mos_no_hall()){
|
|
|
|
|
+ push_event_persit(Discharger_Operate_On, 10);
|
|
|
discharger_open(1);
|
|
discharger_open(1);
|
|
|
mos_drv = true;
|
|
mos_drv = true;
|
|
|
|
|
+ }else {
|
|
|
|
|
+ push_event_persit(Discharger_Operate_On, 20);
|
|
|
}
|
|
}
|
|
|
}else {
|
|
}else {
|
|
|
|
|
+ push_event_persit(Discharger_Operate_On, 30);
|
|
|
open_dfet_failt ++;
|
|
open_dfet_failt ++;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -450,6 +459,7 @@ static void _process_iostate_changed(s32 unhealth){
|
|
|
}
|
|
}
|
|
|
if (_can_close_mos_no_hall()) {
|
|
if (_can_close_mos_no_hall()) {
|
|
|
if (ml5238_is_discharging() && (!_bms_state.charging)){
|
|
if (ml5238_is_discharging() && (!_bms_state.charging)){
|
|
|
|
|
+ push_event_persit(Discharger_Operate_Off, 256);
|
|
|
discharger_open(0);
|
|
discharger_open(0);
|
|
|
put_no_hall_time();
|
|
put_no_hall_time();
|
|
|
close_dfet_no_hall ++;
|
|
close_dfet_no_hall ++;
|