|
|
@@ -153,11 +153,9 @@ shark_bool battery_wait_voltage_parallel(void)
|
|
|
return shark_true;
|
|
|
}
|
|
|
|
|
|
-shark_bool battery_wait_voltage_series(void)
|
|
|
+shark_bool battery_wait_voltage_series(u32 voltage_min)
|
|
|
{
|
|
|
- u64 time1 = shark_get_time() + 200;
|
|
|
- u64 time2 = time1 + 800;
|
|
|
- u32 voltage_min;
|
|
|
+ u64 time = shark_get_time() + 1000;
|
|
|
|
|
|
if (sub_bms_info_1.conn_state != SUB_BMS_CONT_HV485) {
|
|
|
return shark_false;
|
|
|
@@ -167,21 +165,14 @@ shark_bool battery_wait_voltage_series(void)
|
|
|
return shark_false;
|
|
|
}
|
|
|
|
|
|
- if (sub_bms_info_1.packet_common.m_total_vol > sub_bms_info_2.packet_common.m_total_vol) {
|
|
|
- voltage_min = sub_bms_info_1.packet_common.m_total_vol + 20000;
|
|
|
- } else {
|
|
|
- voltage_min = sub_bms_info_2.packet_common.m_total_vol + 20000;
|
|
|
- }
|
|
|
-
|
|
|
while (shark_true) {
|
|
|
- u64 time = shark_get_time_safe();
|
|
|
u32 voltage = Measure_Vol();
|
|
|
|
|
|
- if (voltage > voltage_min && time > time1) {
|
|
|
+ if (voltage > voltage_min) {
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- if (time > time2) {
|
|
|
+ if (time < shark_get_time_safe()) {
|
|
|
println("series: %d < %d", voltage, voltage_min);
|
|
|
return shark_false;
|
|
|
}
|
|
|
@@ -192,38 +183,44 @@ shark_bool battery_wait_voltage_series(void)
|
|
|
|
|
|
static u8 shark_battery_switch_series(void)
|
|
|
{
|
|
|
+ u32 voltage;
|
|
|
+
|
|
|
// 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 (shark_battery_set_power(SHARK_BATT_POWER_FULL, SHARK_BATT_POWER_OFF, 3) != 3) {
|
|
|
+ if (shark_battery_set_power(SHARK_BATT_POWER_FULL, SHARK_BATT_POWER_OFF, SHARK_BATT_MASK_BOTH) != SHARK_BATT_MASK_BOTH) {
|
|
|
return CB_BAT_NO;
|
|
|
}
|
|
|
|
|
|
delay_1ms(100);
|
|
|
|
|
|
- if (shark_battery_set_power(SHARK_BATT_POWER_FULL, SHARK_BATT_POWER_SMALL, 3) != 3) {
|
|
|
+ if (shark_battery_set_power(SHARK_BATT_POWER_FULL, SHARK_BATT_POWER_SMALL, SHARK_BATT_MASK_BOTH) != SHARK_BATT_MASK_BOTH) {
|
|
|
return CB_BAT_NO;
|
|
|
}
|
|
|
+
|
|
|
+ voltage = sub_bms_info_1.packet_common.m_total_vol;
|
|
|
} else {
|
|
|
- if (shark_battery_set_power(SHARK_BATT_POWER_OFF, SHARK_BATT_POWER_FULL, 3) != 3) {
|
|
|
+ if (shark_battery_set_power(SHARK_BATT_POWER_OFF, SHARK_BATT_POWER_FULL, SHARK_BATT_MASK_BOTH) != SHARK_BATT_MASK_BOTH) {
|
|
|
return CB_BAT_NO;
|
|
|
}
|
|
|
|
|
|
delay_1ms(100);
|
|
|
|
|
|
- if (shark_battery_set_power(SHARK_BATT_POWER_SMALL, SHARK_BATT_POWER_FULL, 3) != 3) {
|
|
|
+ if (shark_battery_set_power(SHARK_BATT_POWER_SMALL, SHARK_BATT_POWER_FULL, SHARK_BATT_MASK_BOTH) != SHARK_BATT_MASK_BOTH) {
|
|
|
return CB_BAT_NO;
|
|
|
}
|
|
|
+
|
|
|
+ voltage = sub_bms_info_2.packet_common.m_total_vol;
|
|
|
}
|
|
|
|
|
|
shark_bms_set_mos_series();
|
|
|
|
|
|
- if (!battery_wait_voltage_series()) {
|
|
|
+ if (!battery_wait_voltage_series(voltage + 20000)) {
|
|
|
shark_bms_set_mos_close();
|
|
|
return CB_BAT_NO;
|
|
|
}
|
|
|
|
|
|
- if (shark_battery_set_power(SHARK_BATT_POWER_FULL, SHARK_BATT_POWER_FULL, 3) != 3) {
|
|
|
+ if (shark_battery_set_power(SHARK_BATT_POWER_FULL, SHARK_BATT_POWER_FULL, SHARK_BATT_MASK_BOTH) != SHARK_BATT_MASK_BOTH) {
|
|
|
shark_bms_set_mos_close();
|
|
|
return CB_BAT_NO;
|
|
|
}
|
|
|
@@ -244,7 +241,7 @@ static u8 shark_battery_switch_parrallel(void)
|
|
|
return CB_BAT1_BAT2_PARRALLEL;
|
|
|
}
|
|
|
|
|
|
-static u8 shark_battery_switch_bat1(u8 mask)
|
|
|
+static u8 shark_battery_switch_bat1(shark_battery_mask_t mask)
|
|
|
{
|
|
|
if (shark_battery_set_power(SHARK_BATT_POWER_FULL, SHARK_BATT_POWER_OFF, mask) != mask) {
|
|
|
return CB_BAT_NO;
|
|
|
@@ -257,7 +254,7 @@ static u8 shark_battery_switch_bat1(u8 mask)
|
|
|
return CB_BAT1;
|
|
|
}
|
|
|
|
|
|
-static u8 shark_battery_switch_bat2(u8 mask)
|
|
|
+static u8 shark_battery_switch_bat2(shark_battery_mask_t mask)
|
|
|
{
|
|
|
if (shark_battery_set_power(SHARK_BATT_POWER_OFF, SHARK_BATT_POWER_FULL, mask) != mask) {
|
|
|
return CB_BAT_NO;
|
|
|
@@ -290,18 +287,18 @@ static u8 shark_battery_switch_single(void)
|
|
|
println("voltage: %d %d", sub_bms_info_1.packet_common.m_total_vol, sub_bms_info_2.packet_common.m_total_vol);
|
|
|
|
|
|
if (open1 > open2) {
|
|
|
- return shark_battery_switch_bat1(3);
|
|
|
+ return shark_battery_switch_bat1(SHARK_BATT_MASK_BOTH);
|
|
|
}
|
|
|
|
|
|
if (open1 < open2) {
|
|
|
- return shark_battery_switch_bat2(3);
|
|
|
+ return shark_battery_switch_bat2(SHARK_BATT_MASK_BOTH);
|
|
|
}
|
|
|
|
|
|
if (sub_bms_info_1.packet_common.m_total_vol > sub_bms_info_2.packet_common.m_total_vol) {
|
|
|
- return shark_battery_switch_bat1(3);
|
|
|
+ return shark_battery_switch_bat1(SHARK_BATT_MASK_BOTH);
|
|
|
}
|
|
|
|
|
|
- return shark_battery_switch_bat2(3);
|
|
|
+ return shark_battery_switch_bat2(SHARK_BATT_MASK_BOTH);
|
|
|
}
|
|
|
|
|
|
static shark_bool shark_battery_series_enabled(void)
|
|
|
@@ -363,7 +360,7 @@ static u8 shark_battery_switch_auto(u8 operate)
|
|
|
sub_bms_info_1.state = SHARK_BATT_STATE_IDLE;
|
|
|
sub_bms_info_2.state = SHARK_BATT_STATE_IDLE;
|
|
|
|
|
|
- if (shark_battery_set_power(SHARK_BATT_POWER_FULL, SHARK_BATT_POWER_FULL, 3) == 0) {
|
|
|
+ if (shark_battery_set_power(SHARK_BATT_POWER_FULL, SHARK_BATT_POWER_FULL, SHARK_BATT_MASK_BOTH) == SHARK_BATT_MASK_NONE) {
|
|
|
return CB_BAT_NO;
|
|
|
}
|
|
|
|
|
|
@@ -392,10 +389,10 @@ static u8 shark_battery_switch_auto(u8 operate)
|
|
|
return shark_battery_switch_single();
|
|
|
}
|
|
|
} else {
|
|
|
- return shark_battery_switch_bat1(1);
|
|
|
+ return shark_battery_switch_bat1(SHARK_BATT_MASK_BAT1);
|
|
|
}
|
|
|
} else if (shark_battery_is_normal_power_on(&sub_bms_info_2)) {
|
|
|
- return shark_battery_switch_bat2(2);
|
|
|
+ return shark_battery_switch_bat2(SHARK_BATT_MASK_BAT2);
|
|
|
} else {
|
|
|
return CB_BAT_NO;
|
|
|
}
|