|
|
@@ -114,16 +114,12 @@ shark_bool battery_wait_voltage_parallel(void)
|
|
|
|
|
|
if (sub_bms_info_1.conn_state == SUB_BMS_CONT_HV485) {
|
|
|
if (sub_bms_info_2.conn_state == SUB_BMS_CONT_HV485) {
|
|
|
- if (sub_bms_info_1.packet_common.m_total_vol > sub_bms_info_2.packet_common.m_total_vol) {
|
|
|
- voltage_max = sub_bms_info_1.packet_common.m_total_vol;
|
|
|
- } else {
|
|
|
- voltage_max = sub_bms_info_2.packet_common.m_total_vol;
|
|
|
- }
|
|
|
+ voltage_max = shark_battery_get_voltage_max();
|
|
|
} else {
|
|
|
- voltage_max = sub_bms_info_1.packet_common.m_total_vol;
|
|
|
+ voltage_max = shark_battery_get_voltage1();
|
|
|
}
|
|
|
} else if (sub_bms_info_2.conn_state == SUB_BMS_CONT_HV485) {
|
|
|
- voltage_max = sub_bms_info_2.packet_common.m_total_vol;
|
|
|
+ voltage_max = shark_battery_get_voltage2();
|
|
|
} else {
|
|
|
return shark_false;
|
|
|
}
|
|
|
@@ -183,11 +179,13 @@ shark_bool battery_wait_voltage_series(u32 voltage_min)
|
|
|
|
|
|
static u8 shark_battery_switch_series(void)
|
|
|
{
|
|
|
+ u32 voltage1 = shark_battery_get_voltage1();
|
|
|
+ u32 voltage2 = shark_battery_get_voltage2();
|
|
|
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 (voltage1 > voltage2) {
|
|
|
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;
|
|
|
}
|
|
|
@@ -198,7 +196,7 @@ static u8 shark_battery_switch_series(void)
|
|
|
return CB_BAT_NO;
|
|
|
}
|
|
|
|
|
|
- voltage = sub_bms_info_1.packet_common.m_total_vol;
|
|
|
+ voltage = voltage1;
|
|
|
} else {
|
|
|
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;
|
|
|
@@ -210,7 +208,7 @@ static u8 shark_battery_switch_series(void)
|
|
|
return CB_BAT_NO;
|
|
|
}
|
|
|
|
|
|
- voltage = sub_bms_info_2.packet_common.m_total_vol;
|
|
|
+ voltage = voltage2;
|
|
|
}
|
|
|
|
|
|
shark_bms_set_mos_series();
|
|
|
@@ -267,8 +265,22 @@ static u8 shark_battery_switch_bat2(shark_battery_mask_t mask)
|
|
|
return CB_BAT2;
|
|
|
}
|
|
|
|
|
|
+static u8 shark_battery_switch_charge(void)
|
|
|
+{
|
|
|
+ u32 voltage1 = shark_battery_get_voltage1();
|
|
|
+ u32 voltage2 = shark_battery_get_voltage2();
|
|
|
+
|
|
|
+ if (voltage1 < voltage2) {
|
|
|
+ return shark_battery_switch_bat1(SHARK_BATT_MASK_BOTH);
|
|
|
+ } else {
|
|
|
+ return shark_battery_switch_bat2(SHARK_BATT_MASK_BOTH);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static u8 shark_battery_switch_single(void)
|
|
|
{
|
|
|
+ u32 voltage1 = shark_battery_get_voltage1();
|
|
|
+ u32 voltage2 = shark_battery_get_voltage2();
|
|
|
u64 time = shark_get_time() + 500;
|
|
|
u32 open1 = 0;
|
|
|
u32 open2 = 0;
|
|
|
@@ -284,7 +296,7 @@ static u8 shark_battery_switch_single(void)
|
|
|
}
|
|
|
|
|
|
println("open: %d %d", open1, open2);
|
|
|
- println("voltage: %d %d", sub_bms_info_1.packet_common.m_total_vol, sub_bms_info_2.packet_common.m_total_vol);
|
|
|
+ println("voltage: %d %d", voltage1, voltage2);
|
|
|
|
|
|
if (open1 > open2) {
|
|
|
return shark_battery_switch_bat1(SHARK_BATT_MASK_BOTH);
|
|
|
@@ -294,11 +306,11 @@ static u8 shark_battery_switch_single(void)
|
|
|
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) {
|
|
|
+ if (voltage1 > voltage2) {
|
|
|
return shark_battery_switch_bat1(SHARK_BATT_MASK_BOTH);
|
|
|
+ } else {
|
|
|
+ return shark_battery_switch_bat2(SHARK_BATT_MASK_BOTH);
|
|
|
}
|
|
|
-
|
|
|
- return shark_battery_switch_bat2(SHARK_BATT_MASK_BOTH);
|
|
|
}
|
|
|
|
|
|
static shark_bool shark_battery_series_enabled(void)
|
|
|
@@ -347,6 +359,10 @@ static shark_bool shark_battery_check_parrallel(u8 operate)
|
|
|
return shark_false;
|
|
|
}
|
|
|
|
|
|
+ if (shark_battery_get_voltage_delta() > PARRALLEL_DELTA_VOL) {
|
|
|
+ return shark_false;
|
|
|
+ }
|
|
|
+
|
|
|
return SHARK_BOOL(IS_CHARGE_IN());
|
|
|
}
|
|
|
|
|
|
@@ -385,6 +401,8 @@ static u8 shark_battery_switch_auto(u8 operate)
|
|
|
return operate;
|
|
|
} else if (shark_battery_check_parrallel(operate)) {
|
|
|
return shark_battery_switch_parrallel();
|
|
|
+ } else if (IS_CHARGE_IN()) {
|
|
|
+ return shark_battery_switch_charge();
|
|
|
} else {
|
|
|
return shark_battery_switch_single();
|
|
|
}
|
|
|
@@ -1039,20 +1057,8 @@ uint8_t Check_CB_BAT_2(void)
|
|
|
|
|
|
}
|
|
|
|
|
|
-int32_t Battery_1_Bu_Chang_Vol(void)
|
|
|
-{
|
|
|
- return ((int32_t)sub_bms_info_1.packet_common.m_total_vol - (int32_t)(BATTERY_RESISTANCE_OHM * sub_bms_info_1.packet_common.m_current));
|
|
|
-}
|
|
|
-
|
|
|
-int32_t Battery_2_Bu_Chang_Vol(void)
|
|
|
-{
|
|
|
- return ((int32_t)sub_bms_info_2.packet_common.m_total_vol - (int32_t)(BATTERY_RESISTANCE_OHM * sub_bms_info_2.packet_common.m_current));
|
|
|
-}
|
|
|
-
|
|
|
uint8_t Check_CB_BAT1_BAT2_PARRALLEL(void)
|
|
|
{
|
|
|
- int32_t delta_vol;
|
|
|
- int32_t m_1_total_vol,m_2_total_vol;
|
|
|
uint8_t temp_op = CB_MAX;
|
|
|
|
|
|
if(is_intelligent && CB_OPERATE_PRECEDENCE_PARRALLEL != PRE_PARRALLEL)
|
|
|
@@ -1087,20 +1093,7 @@ uint8_t Check_CB_BAT1_BAT2_PARRALLEL(void)
|
|
|
return temp_op;
|
|
|
}
|
|
|
|
|
|
- //
|
|
|
- m_1_total_vol = Battery_1_Bu_Chang_Vol();
|
|
|
- m_2_total_vol = Battery_2_Bu_Chang_Vol();
|
|
|
-
|
|
|
- if(m_1_total_vol >= m_2_total_vol)
|
|
|
- {
|
|
|
- delta_vol = m_1_total_vol - m_2_total_vol;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- delta_vol = m_2_total_vol - m_1_total_vol;
|
|
|
- }
|
|
|
-
|
|
|
- if(delta_vol > PARRALLEL_DELTA_VOL)
|
|
|
+ if (shark_battery_get_voltage_delta() > PARRALLEL_DELTA_VOL)
|
|
|
{
|
|
|
temp_op = Select_One_BAT();
|
|
|
return temp_op;
|
|
|
@@ -1192,7 +1185,6 @@ uint8_t Select_One_BAT_Han_Guo(void)
|
|
|
uint8_t Check_CB_BAT1_BAT2_SERIES(void)
|
|
|
{
|
|
|
uint8_t temp_op = CB_MAX;
|
|
|
- int32_t m_1_total_vol,m_2_total_vol;
|
|
|
|
|
|
if(is_intelligent && CB_OPERATE_PRECEDENCE_PARRALLEL != PRE_SERIES)
|
|
|
{
|
|
|
@@ -1254,12 +1246,8 @@ uint8_t Check_CB_BAT1_BAT2_SERIES(void)
|
|
|
return temp_op;
|
|
|
}*/
|
|
|
|
|
|
- m_1_total_vol = Battery_1_Bu_Chang_Vol();
|
|
|
- m_2_total_vol = Battery_2_Bu_Chang_Vol();
|
|
|
- if(m_1_total_vol <= CHECK_SERIES_PROTECT_VOL\
|
|
|
- ||m_2_total_vol <= CHECK_SERIES_PROTECT_VOL )
|
|
|
+ if (shark_battery_get_voltage1() < CHECK_SERIES_PROTECT_VOL || shark_battery_get_voltage2() < CHECK_SERIES_PROTECT_VOL)
|
|
|
{
|
|
|
-
|
|
|
if(Series_delay.set == 0)
|
|
|
{
|
|
|
Series_delay.set = 1;
|
|
|
@@ -1551,9 +1539,6 @@ uint8_t Change_Mode_Sub_BMS_2_Normal(void)
|
|
|
|
|
|
uint8_t Change_Mode_Sub_BMS_PARRALLEL(void)
|
|
|
{
|
|
|
- int32_t delta_vol;
|
|
|
- int32_t m_1_total_vol,m_2_total_vol;
|
|
|
-
|
|
|
//
|
|
|
if(cb_operate_state == CB_BAT_NO)
|
|
|
return 0;
|
|
|
@@ -1565,31 +1550,16 @@ uint8_t Change_Mode_Sub_BMS_PARRALLEL(void)
|
|
|
;
|
|
|
else
|
|
|
return 0;
|
|
|
-
|
|
|
- m_1_total_vol = Battery_1_Bu_Chang_Vol();
|
|
|
- m_2_total_vol = Battery_2_Bu_Chang_Vol();
|
|
|
|
|
|
- if(m_1_total_vol >= m_2_total_vol)
|
|
|
- {
|
|
|
- delta_vol = m_1_total_vol - m_2_total_vol;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- delta_vol = m_2_total_vol - m_1_total_vol;
|
|
|
+ if (shark_battery_get_voltage_delta() > PARRALLEL_BL_DELTA_VOL) {
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
- if(delta_vol <= PARRALLEL_BL_DELTA_VOL)
|
|
|
- return 1;
|
|
|
-
|
|
|
-
|
|
|
- return 0;
|
|
|
-
|
|
|
+ return 1;
|
|
|
}
|
|
|
|
|
|
uint8_t Change_Mode_Sub_BMS_SERIES(void)
|
|
|
{
|
|
|
- int32_t m_1_total_vol,m_2_total_vol;
|
|
|
-
|
|
|
if (!shark_battery_series_enabled()) {
|
|
|
return 0;
|
|
|
}
|
|
|
@@ -1636,13 +1606,7 @@ uint8_t Change_Mode_Sub_BMS_SERIES(void)
|
|
|
if(Next_Series_Not_Enable)
|
|
|
return 0;
|
|
|
|
|
|
-
|
|
|
- m_1_total_vol = Battery_1_Bu_Chang_Vol();
|
|
|
- m_2_total_vol = Battery_2_Bu_Chang_Vol();
|
|
|
-
|
|
|
-
|
|
|
- if(m_1_total_vol <= SERIES_PROTECT_VOL\
|
|
|
- ||m_2_total_vol <= SERIES_PROTECT_VOL )
|
|
|
+ if(shark_battery_get_voltage1() < SERIES_PROTECT_VOL || shark_battery_get_voltage2() < SERIES_PROTECT_VOL )
|
|
|
return 0;
|
|
|
|
|
|
if(sub_bms_info_1.packet_common.m_percent < SERIES_ENTER_PERCENT || sub_bms_info_2.packet_common.m_percent < SERIES_ENTER_PERCENT)
|
|
|
@@ -1734,7 +1698,7 @@ void Intelligent_Management_Battery(void)
|
|
|
|
|
|
if(one_bat_charge_status == OBCS_CHARGER_IN)
|
|
|
{
|
|
|
- if(Battery_2_Bu_Chang_Vol() < Battery_1_Bu_Chang_Vol())
|
|
|
+ if(shark_battery_get_voltage2() < shark_battery_get_voltage1())
|
|
|
{
|
|
|
Battery_Change_Mode(CFG_BAT2);
|
|
|
}
|
|
|
@@ -1747,7 +1711,7 @@ void Intelligent_Management_Battery(void)
|
|
|
else
|
|
|
{
|
|
|
if((abs(sub_bms_info_1.packet_common.m_current) <= 1000)\
|
|
|
- &&(Battery_2_Bu_Chang_Vol() > Battery_1_Bu_Chang_Vol()+ONE_BATTERY_DELTA_VOL))
|
|
|
+ &&(shark_battery_get_voltage2() > shark_battery_get_voltage1()+ONE_BATTERY_DELTA_VOL))
|
|
|
{
|
|
|
Battery_Change_Mode(CFG_BAT2);
|
|
|
}
|
|
|
@@ -1765,7 +1729,7 @@ void Intelligent_Management_Battery(void)
|
|
|
|
|
|
if(one_bat_charge_status == OBCS_CHARGER_IN)
|
|
|
{
|
|
|
- if(Battery_1_Bu_Chang_Vol() < Battery_2_Bu_Chang_Vol())
|
|
|
+ if(shark_battery_get_voltage1() < shark_battery_get_voltage2())
|
|
|
{
|
|
|
Battery_Change_Mode(CFG_BAT1);
|
|
|
}
|
|
|
@@ -1777,7 +1741,7 @@ void Intelligent_Management_Battery(void)
|
|
|
else
|
|
|
{
|
|
|
if((abs(sub_bms_info_2.packet_common.m_current) <= 1000)\
|
|
|
- &&(Battery_1_Bu_Chang_Vol() > Battery_2_Bu_Chang_Vol()+ONE_BATTERY_DELTA_VOL))
|
|
|
+ &&(shark_battery_get_voltage1() > shark_battery_get_voltage2()+ONE_BATTERY_DELTA_VOL))
|
|
|
{
|
|
|
Battery_Change_Mode(CFG_BAT1);
|
|
|
}
|