Sfoglia il codice sorgente

fixup single battery charge fault

Signed-off-by: FuangCao <cavan.cao@foxmail.com>
FuangCao 5 anni fa
parent
commit
7650dde76e
6 ha cambiato i file con 100 aggiunte e 81 eliminazioni
  1. 1 1
      Project/version.txt
  2. 42 78
      Source/app.c
  3. 1 1
      Source/app.h
  4. 41 0
      Source/app_rs485_1.c
  5. 14 0
      Source/app_rs485_1.h
  6. 1 1
      Source/sw_build_info.h

+ 1 - 1
Project/version.txt

@@ -1 +1 @@
-PS100XX_V10_11081742
+PS100XX_V10_11081839

+ 42 - 78
Source/app.c

@@ -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);
 					}

+ 1 - 1
Source/app.h

@@ -13,7 +13,7 @@
 #define S21_ENABLE(x)  gpio_bit_write(GPIOB,GPIO_PIN_15,(bit_status)(x))
 #define SS__ENABLE(x)  gpio_bit_write(GPIOB,GPIO_PIN_14,(bit_status)(x))
 
-#define BATTERY_RESISTANCE_OHM    (0.1F)
+//#define BATTERY_RESISTANCE_OHM    (0.1F)
 #define PARRALLEL_DELTA_VOL    	  (2500)
 #define PARRALLEL_BL_DELTA_VOL    (100)
 

+ 41 - 0
Source/app_rs485_1.c

@@ -609,6 +609,47 @@ int8_t Operate_Sub_BMS_1_CD(uint8_t on)
 	
 }
 
+u32 shark_battery_get_voltage(SUB_BMS_INFO *info)
+{
+	return info->packet_common.m_total_vol - (info->packet_common.m_current / 10);
+}
+
+u32 shark_battery_get_voltage_delta(void)
+{
+	u32 voltage1 = shark_battery_get_voltage1();
+	u32 voltage2 = shark_battery_get_voltage2();
+
+	if (voltage1 > voltage2) {
+		return voltage1 - voltage2;
+	} else {
+		return voltage2 - voltage1;
+	}
+}
+
+u32 shark_battery_get_voltage_min(void)
+{
+	u32 voltage1 = shark_battery_get_voltage1();
+	u32 voltage2 = shark_battery_get_voltage2();
+
+	if (voltage1 < voltage2) {
+		return voltage1;
+	} else {
+		return voltage2;
+	}
+}
+
+u32 shark_battery_get_voltage_max(void)
+{
+	u32 voltage1 = shark_battery_get_voltage1();
+	u32 voltage2 = shark_battery_get_voltage2();
+
+	if (voltage1 > voltage2) {
+		return voltage1;
+	} else {
+		return voltage2;
+	}
+}
+
 static u8 shark_battery_get_power_param(shark_battery_power_t power)
 {
 	switch (power) {

+ 14 - 0
Source/app_rs485_1.h

@@ -398,6 +398,10 @@ shark_battery_power_t shark_battery_get_power(SUB_BMS_INFO *info);
 shark_bool shark_battery_check_power(SUB_BMS_INFO *info, shark_battery_power_t power);
 shark_battery_mask_t shark_battery_detect(void);
 shark_bool shark_battery_is_normal_power_on(SUB_BMS_INFO *info);
+u32 shark_battery_get_voltage(SUB_BMS_INFO *info);
+u32 shark_battery_get_voltage_delta(void);
+u32 shark_battery_get_voltage_min(void);
+u32 shark_battery_get_voltage_max(void);
 
 static inline void shark_bms_set_mos_close(void)
 {
@@ -429,5 +433,15 @@ static inline shark_bool shark_battery_is_power_full(SUB_BMS_INFO *info)
 	return SHARK_BOOL((info->packet_common.bms_status & BMS_POWER_FULL) == BMS_POWER_FULL);
 }
 
+static inline u32 shark_battery_get_voltage1(void)
+{
+	return shark_battery_get_voltage(&sub_bms_info_1);
+}
+
+static inline u32 shark_battery_get_voltage2(void)
+{
+	return shark_battery_get_voltage(&sub_bms_info_2);
+}
+
 #endif
 

+ 1 - 1
Source/sw_build_info.h

@@ -1,3 +1,3 @@
 #pragma once
 
-#define CONFIG_VERSION "PS100XX_V10_11081742"
+#define CONFIG_VERSION "PS100XX_V10_11081839"