|
@@ -27,6 +27,7 @@ static u32 _bms_main_task_handler(void);
|
|
|
static void _debug_timer_handler(shark_timer_t *t);
|
|
static void _debug_timer_handler(shark_timer_t *t);
|
|
|
static void _process_power_down(void);
|
|
static void _process_power_down(void);
|
|
|
static uint8_t calc_cell_voltage(void);
|
|
static uint8_t calc_cell_voltage(void);
|
|
|
|
|
+static int _can_close_mos_no_hall(void);
|
|
|
|
|
|
|
|
static bms_state_t _bms_state;
|
|
static bms_state_t _bms_state;
|
|
|
static int pcb_temp = 100;
|
|
static int pcb_temp = 100;
|
|
@@ -293,6 +294,7 @@ static s32 _process_unheath(void){
|
|
|
|
|
|
|
|
//处理PS100/310/320/360,充电底座,充电柜的指令或者bms自己发给自己的指令
|
|
//处理PS100/310/320/360,充电底座,充电柜的指令或者bms自己发给自己的指令
|
|
|
static void _process_user_request(s32 health){
|
|
static void _process_user_request(s32 health){
|
|
|
|
|
+ bool mos_drv = false;
|
|
|
if (_bms_state.user_request & USER_REQUEST_PENDING){
|
|
if (_bms_state.user_request & USER_REQUEST_PENDING){
|
|
|
//开关小电
|
|
//开关小电
|
|
|
if (_bms_state.user_request & USER_REQUEST_SMALLCURRENT_OFF){
|
|
if (_bms_state.user_request & USER_REQUEST_SMALLCURRENT_OFF){
|
|
@@ -313,17 +315,27 @@ static void _process_user_request(s32 health){
|
|
|
}
|
|
}
|
|
|
if (_bms_state.user_request & USER_REQUEST_CHARGER_ON){
|
|
if (_bms_state.user_request & USER_REQUEST_CHARGER_ON){
|
|
|
if (!(health & Health_charger_Fault)){
|
|
if (!(health & Health_charger_Fault)){
|
|
|
- charger_open(1);
|
|
|
|
|
|
|
+ if ((io_state()->hall_detect) || !_can_close_mos_no_hall()){
|
|
|
|
|
+ charger_open(1);
|
|
|
|
|
+ mos_drv = true;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
if (_bms_state.user_request & USER_REQUEST_DISCHARGER_ON) {
|
|
if (_bms_state.user_request & USER_REQUEST_DISCHARGER_ON) {
|
|
|
open_dfet ++;
|
|
open_dfet ++;
|
|
|
if (!(health & Health_Discharger_Failt)){
|
|
if (!(health & Health_Discharger_Failt)){
|
|
|
- discharger_open(1);
|
|
|
|
|
|
|
+ if ((io_state()->hall_detect) || !_can_close_mos_no_hall()){
|
|
|
|
|
+ discharger_open(1);
|
|
|
|
|
+ mos_drv = true;
|
|
|
|
|
+ }
|
|
|
}else {
|
|
}else {
|
|
|
open_dfet_failt ++;
|
|
open_dfet_failt ++;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+ if (mos_drv && ml5238_is_mosdrv_strong()) {
|
|
|
|
|
+ task_udelay(3000);
|
|
|
|
|
+ ml5238_disable_mosdrv();
|
|
|
|
|
+ }
|
|
|
_bms_state.user_request &= ~USER_REQUEST_PENDING;//clear user request pending
|
|
_bms_state.user_request &= ~USER_REQUEST_PENDING;//clear user request pending
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|