|
@@ -147,44 +147,64 @@ static u8 shark_battery_switch_series(void)
|
|
|
Power_On_Normal(0, 2);
|
|
Power_On_Normal(0, 2);
|
|
|
|
|
|
|
|
if (sub_bms_info_1.packet_common.m_total_vol > sub_bms_info_2.packet_common.m_total_vol) {
|
|
if (sub_bms_info_1.packet_common.m_total_vol > sub_bms_info_2.packet_common.m_total_vol) {
|
|
|
- if (shark_battery_set_power(SHARK_BATT_POWER_FULL, SHARK_BATT_POWER_SMALL) != 3) {
|
|
|
|
|
|
|
+ if (shark_battery_set_power(SHARK_BATT_POWER_FULL, SHARK_BATT_POWER_OFF, 3) != 3) {
|
|
|
|
|
+ return CB_BAT_NO;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ delay_1ms(100);
|
|
|
|
|
+
|
|
|
|
|
+ if (shark_battery_set_power(SHARK_BATT_POWER_FULL, SHARK_BATT_POWER_SMALL, 3) != 3) {
|
|
|
return CB_BAT_NO;
|
|
return CB_BAT_NO;
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
- if (shark_battery_set_power(SHARK_BATT_POWER_SMALL, SHARK_BATT_POWER_FULL) != 3) {
|
|
|
|
|
|
|
+ if (shark_battery_set_power(SHARK_BATT_POWER_OFF, SHARK_BATT_POWER_FULL, 3) != 3) {
|
|
|
|
|
+ return CB_BAT_NO;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ delay_1ms(100);
|
|
|
|
|
+
|
|
|
|
|
+ if (shark_battery_set_power(SHARK_BATT_POWER_SMALL, SHARK_BATT_POWER_FULL, 3) != 3) {
|
|
|
return CB_BAT_NO;
|
|
return CB_BAT_NO;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
shark_bms_set_mos_series();
|
|
shark_bms_set_mos_series();
|
|
|
battery_wait_voltage_up(SERIES_VOLTAGE_MIN);
|
|
battery_wait_voltage_up(SERIES_VOLTAGE_MIN);
|
|
|
|
|
+ delay_1ms(200);
|
|
|
|
|
|
|
|
- if (shark_battery_set_power(SHARK_BATT_POWER_FULL, SHARK_BATT_POWER_FULL) != 3) {
|
|
|
|
|
|
|
+ if (shark_battery_set_power(SHARK_BATT_POWER_FULL, SHARK_BATT_POWER_FULL, 3) != 3) {
|
|
|
shark_bms_set_mos_close();
|
|
shark_bms_set_mos_close();
|
|
|
return CB_BAT_NO;
|
|
return CB_BAT_NO;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ sub_bms_info_1.state = SHARK_BATT_STATE_USED;
|
|
|
|
|
+ sub_bms_info_2.state = SHARK_BATT_STATE_USED;
|
|
|
|
|
+
|
|
|
return CB_BAT1_BAT2_SERIES;
|
|
return CB_BAT1_BAT2_SERIES;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
static u8 shark_battery_switch_bat1(u8 mask)
|
|
static u8 shark_battery_switch_bat1(u8 mask)
|
|
|
{
|
|
{
|
|
|
- if ((shark_battery_set_power(SHARK_BATT_POWER_FULL, SHARK_BATT_POWER_OFF) & mask) != mask) {
|
|
|
|
|
|
|
+ if (shark_battery_set_power(SHARK_BATT_POWER_FULL, SHARK_BATT_POWER_OFF, mask) != mask) {
|
|
|
return CB_BAT_NO;
|
|
return CB_BAT_NO;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
shark_bms_set_mos_bat1();
|
|
shark_bms_set_mos_bat1();
|
|
|
|
|
+ sub_bms_info_1.state = SHARK_BATT_STATE_USED;
|
|
|
|
|
+ sub_bms_info_2.state = SHARK_BATT_STATE_IDLE;
|
|
|
|
|
|
|
|
return CB_BAT1;
|
|
return CB_BAT1;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
static u8 shark_battery_switch_bat2(u8 mask)
|
|
static u8 shark_battery_switch_bat2(u8 mask)
|
|
|
{
|
|
{
|
|
|
- if ((shark_battery_set_power(SHARK_BATT_POWER_OFF, SHARK_BATT_POWER_FULL) & mask) != mask) {
|
|
|
|
|
|
|
+ if (shark_battery_set_power(SHARK_BATT_POWER_OFF, SHARK_BATT_POWER_FULL, mask) != mask) {
|
|
|
return CB_BAT_NO;
|
|
return CB_BAT_NO;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
shark_bms_set_mos_bat2();
|
|
shark_bms_set_mos_bat2();
|
|
|
|
|
+ sub_bms_info_1.state = SHARK_BATT_STATE_IDLE;
|
|
|
|
|
+ sub_bms_info_2.state = SHARK_BATT_STATE_USED;
|
|
|
|
|
|
|
|
return CB_BAT2;
|
|
return CB_BAT2;
|
|
|
}
|
|
}
|
|
@@ -222,27 +242,32 @@ static u8 shark_battery_switch_bat1_or_bat2(void)
|
|
|
|
|
|
|
|
static u8 shark_battery_switch_auto(shark_bool series)
|
|
static u8 shark_battery_switch_auto(shark_bool series)
|
|
|
{
|
|
{
|
|
|
|
|
+ u8 mask;
|
|
|
|
|
+
|
|
|
shark_bms_set_mos_close();
|
|
shark_bms_set_mos_close();
|
|
|
|
|
+ sub_bms_info_1.state = SHARK_BATT_STATE_IDLE;
|
|
|
|
|
+ sub_bms_info_2.state = SHARK_BATT_STATE_IDLE;
|
|
|
|
|
|
|
|
if (!battery_wait_voltage_down(SELECT_ONE_BATTERY_VOL)) {
|
|
if (!battery_wait_voltage_down(SELECT_ONE_BATTERY_VOL)) {
|
|
|
return CB_BAT_NO;
|
|
return CB_BAT_NO;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (cb_operate_state == CB_BAT_NO) {
|
|
if (cb_operate_state == CB_BAT_NO) {
|
|
|
- if (shark_battery_set_power(SHARK_BATT_POWER_SMALL, SHARK_BATT_POWER_SMALL) == 0) {
|
|
|
|
|
|
|
+ mask = shark_battery_set_power(SHARK_BATT_POWER_SMALL, SHARK_BATT_POWER_SMALL, 3);
|
|
|
|
|
+ if (mask == 0) {
|
|
|
return CB_BAT_NO;
|
|
return CB_BAT_NO;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
delay_1ms(200);
|
|
delay_1ms(200);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ mask = 3;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if (shark_battery_set_power(SHARK_BATT_POWER_FULL, SHARK_BATT_POWER_FULL) == 0) {
|
|
|
|
|
|
|
+ mask = shark_battery_set_power(SHARK_BATT_POWER_FULL, SHARK_BATT_POWER_FULL, mask);
|
|
|
|
|
+ if (mask == 0) {
|
|
|
return CB_BAT_NO;
|
|
return CB_BAT_NO;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- sub_bms_info_1.state = SHARK_BATT_STATE_IDLE;
|
|
|
|
|
- sub_bms_info_2.state = SHARK_BATT_STATE_IDLE;
|
|
|
|
|
-
|
|
|
|
|
if (shark_battery_is_normal_power_on(&sub_bms_info_1)) {
|
|
if (shark_battery_is_normal_power_on(&sub_bms_info_1)) {
|
|
|
if (shark_battery_is_normal_power_on(&sub_bms_info_2)) {
|
|
if (shark_battery_is_normal_power_on(&sub_bms_info_2)) {
|
|
|
if (series) {
|
|
if (series) {
|
|
@@ -561,7 +586,10 @@ int8_t Battery_CB_Switch(uint8_t cb_operate)
|
|
|
sub_bms_info_2.state = SHARK_BATT_STATE_USED;
|
|
sub_bms_info_2.state = SHARK_BATT_STATE_USED;
|
|
|
break;
|
|
break;
|
|
|
case CB_BAT1_BAT2_SERIES:
|
|
case CB_BAT1_BAT2_SERIES:
|
|
|
-
|
|
|
|
|
|
|
+#if 1
|
|
|
|
|
+ cb_operate = shark_battery_switch_auto(shark_true);
|
|
|
|
|
+ println("switch auto: %d", cb_operate);
|
|
|
|
|
+#else
|
|
|
Power_On_Normal(0,2);
|
|
Power_On_Normal(0,2);
|
|
|
shark_bms_set_mos_close();
|
|
shark_bms_set_mos_close();
|
|
|
|
|
|
|
@@ -726,6 +754,7 @@ int8_t Battery_CB_Switch(uint8_t cb_operate)
|
|
|
shark_bms_set_mos_series();
|
|
shark_bms_set_mos_series();
|
|
|
sub_bms_info_1.state = SHARK_BATT_STATE_USED;
|
|
sub_bms_info_1.state = SHARK_BATT_STATE_USED;
|
|
|
sub_bms_info_2.state = SHARK_BATT_STATE_USED;
|
|
sub_bms_info_2.state = SHARK_BATT_STATE_USED;
|
|
|
|
|
+#endif
|
|
|
break;
|
|
break;
|
|
|
case CB_BAT_NO:
|
|
case CB_BAT_NO:
|
|
|
default:
|
|
default:
|