Bläddra i källkod

fixup charger detect fault

Signed-off-by: FuangCao <cavan.cao@foxmail.com>
FuangCao 5 år sedan
förälder
incheckning
f692937f37

+ 1 - 1
Project/version.txt

@@ -1 +1 @@
-PS100XX_V11_11182050
+PS100XX_V11_11191521

+ 8 - 8
Source/app.c

@@ -366,14 +366,6 @@ static shark_bool shark_battery_parrallel_enabled(void)
 static shark_bool shark_battery_check_parrallel(u8 operate)
 {
 	if (operate != CB_BAT1_BAT2_PARRALLEL) {
-		if (is_intelligent == 0) {
-			return shark_false;
-		}
-
-		if (shark_battery_get_voltage_delta() > SHARK_PARRALLEL_VOL_MIN) {
-			return shark_false;
-		}
-
 		return shark_false;
 	}
 
@@ -1396,6 +1388,14 @@ uint8_t Change_Mode_Sub_BMS_PARRALLEL(void)
 		return 0;
 	}
 
+	if (shark_charge_times < SHARK_CHG_TIME_MID) {
+		return 0;
+	}
+
+	if (shark_xl_check()) {
+		return 0;
+	}
+
 	if(Is_Sub_BMS_1_Normal() != SHARK_BATT_EXIT_SUCCESS || Is_Sub_BMS_2_Normal() != SHARK_BATT_EXIT_SUCCESS) {
 		return 0;
 	}

+ 5 - 8
Source/app_end_ctr.c

@@ -365,9 +365,7 @@ int8_t Handle_Can_Ctr_CMD(CAN_FRAME*can_ctr_frame)
 	
 }
 
-extern uint32_t acc12_overloader_times;
-extern uint8_t shark_battery_shake1;
-extern uint8_t shark_battery_shake2;
+extern shark_u8 shark_charge_irq_times;
 
 int8_t Rsp_Can_Ctr_CMD(CAN_FRAME*can_ctr_frame)
 {
@@ -523,6 +521,10 @@ int8_t Rsp_Can_Ctr_CMD(CAN_FRAME*can_ctr_frame)
 					shark_xl_speed_max = 0;
 					break;
 				case 5:
+					memcpy(buf + len, &sub_bms_info_1.packet_common.work_status, sizeof(sub_bms_info_1.packet_common.work_status));
+					len += sizeof(sub_bms_info_1.packet_common.work_status);
+					memcpy(buf + len, &sub_bms_info_2.packet_common.work_status, sizeof(sub_bms_info_2.packet_common.work_status));
+					len += sizeof(sub_bms_info_2.packet_common.work_status);
 					buf[len++] = sub_bms_info_1.packet_common.bms_status;
 					buf[len++] = sub_bms_info_2.packet_common.bms_status;
 					println("soc: %d %d, vol: %d %d, curr: %d %d",
@@ -542,11 +544,6 @@ int8_t Rsp_Can_Ctr_CMD(CAN_FRAME*can_ctr_frame)
 					buf[len++] = gpio_input_bit_get(GPIO_PORT_CHG_DET, GPIO_PIN_CHG_DET) << 4 | shark_charger_detected << 1 | shark_charger_enabled;
 					buf[len++] = sub_bms_info_1.packet_common.charge_flag << 4 | sub_bms_info_2.packet_common.charge_flag;
 					break;
-				case 8:
-					memcpy(buf + len, &shark_bms_acc2_oc_times, sizeof(shark_bms_acc2_oc_times));
-					len += sizeof(shark_bms_acc2_oc_times);
-					shark_bms_acc2_oc_times = 0;
-					break;
 				case 9:
 					memcpy(buf + len, &shark_mseconds, sizeof(shark_mseconds));
 					len += sizeof(shark_mseconds);

+ 1 - 1
Source/app_rs485_1.c

@@ -419,7 +419,7 @@ shark_battery_exit_t Is_Sub_BMS_1_Normal(void)
 
 u32 shark_battery_get_voltage(SUB_BMS_INFO *info)
 {
-	return info->packet_common.m_total_vol - (info->packet_common.m_current / 10);
+	return info->packet_common.m_total_vol - (info->packet_common.m_current / 30);
 }
 
 u32 shark_battery_get_voltage_delta(void)

+ 6 - 1
Source/app_rs485_1.h

@@ -435,6 +435,11 @@ static inline s32 shark_battery_get_current2(void)
 	return shark_battery_get_current(&sub_bms_info_2);
 }
 
+static inline s32 shark_battery_get_current12(void)
+{
+	return shark_battery_get_current1() + shark_battery_get_current2();
+}
+
 static inline shark_bool shark_battery_charge_complete(SUB_BMS_INFO *info)
 {
 	return (info->packet_common.bms_status & BMS_STA_C_FULL) != 0;
@@ -467,7 +472,7 @@ static inline u8 shark_battery_get_rs485_state(SUB_BMS_INFO *info)
 
 static inline shark_bool shark_battery_is_discharge(SUB_BMS_INFO *info)
 {
-	return (info->packet_common.bms_status & ST_DISCHRG_CUR) != 0;
+	return (info->packet_common.work_status & ST_DISCHRG_CUR) != 0;
 }
 
 static inline shark_bool shark_battery_is_discharge1(void)

+ 0 - 3
Source/drv_io.c

@@ -28,8 +28,6 @@ static shark_bool shark_bms_acc2_enabled;
 static u16 shark_bms_acc2_error_times;
 static u16 shark_bms_acc2_work_times;
 
-u32 shark_bms_acc2_oc_times;
-
 void QD_Enable_From(uint8_t on,uint8_t from)
 {
 	if (shark_battery_switch_busy && on) {
@@ -379,7 +377,6 @@ void EXTI10_15_IRQHandler(void)
 		exti_interrupt_flag_clear(EXTI_14);
 		gpio_bit_reset(GPIO_PORT_ACC2_EN, GPIO_PIN_ACC2_EN);
 		shark_bms_acc2_work_times = 0;
-		shark_bms_acc2_oc_times++;
 		over_12V = 1;
     }
 	if (RESET != exti_interrupt_flag_get(EXTI_15))

+ 0 - 2
Source/drv_io.h

@@ -85,8 +85,6 @@ extern DELAY_COMMON right_light_delay;
 extern uint8_t battery_charged_full;
 extern uint8_t QD_switch_from;
 
-extern u32 shark_bms_acc2_oc_times;
-
 enum
 {
 	FROM_QD,

+ 36 - 32
Source/shark_charge.c

@@ -1,26 +1,25 @@
 #include "shark_charge.h"
 #include "app_rs485_1.h"
+#include "shark_xl.h"
 #include "app.h"
 
 shark_bool shark_charger_detected;
 shark_bool shark_charger_enabled;
-shark_u16 shark_charger_remove;
 
 shark_u16 shark_charge_times;
 shark_bool shark_battery_full;
 
+static shark_u16 shark_charger_remove;
+static shark_u16 shark_charger_insert;
+
 void shark_charge_init(void)
 {
 	rcu_periph_clock_enable(GPIO_RCU_CHG_DET);
 	gpio_init(GPIO_PORT_CHG_DET, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_CHG_DET);
 
 	rcu_periph_clock_enable(GPIO_RCU_CHG_EN);
+	gpio_bit_reset(GPIO_PORT_CHG_EN, GPIO_PIN_CHG_EN);
 	gpio_init(GPIO_PORT_CHG_EN, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_CHG_EN);
-
-	gpio_exti_source_select(EXTI_PORT_CHG_DET, EXTI_PIN_CHG_DET);
-	exti_init(EXTI_CHG_DET, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
-	exti_interrupt_flag_clear(EXTI_CHG_DET);
-	nvic_irq_enable(EXTI4_IRQn, 1, 0);
 }
 
 void shark_charger_set_enable(shark_bool enable)
@@ -52,27 +51,36 @@ void shark_charger_set_enable(shark_bool enable)
 	}
 }
 
-void shark_charger_disable(void)
+void shark_charger_disable(u16 times)
 {
-	if (shark_charge_times > SHARK_CHG_TIME_MIN) {
+	if (shark_charge_times > times) {
 		shark_charger_set_enable(shark_false);
 	}
 }
 
 void shark_charge_tick(void)
 {
-	if (shark_charger_remove > 0) {
-		if (shark_charger_remove > 1) {
-			shark_charger_remove--;
+	if (gpio_input_bit_get(GPIO_PORT_CHG_DET, GPIO_PIN_CHG_DET) == RESET) {
+		shark_charger_remove = 0;
+
+		if (shark_charger_insert < 50) {
+			shark_charger_insert++;
+		} else if (shark_xl_check() == shark_false) {
+			shark_charger_detected = shark_true;
+
+			if (shark_charger_enabled && shark_charge_times < SHARK_CHG_TIME_MAX) {
+				shark_charge_times++;
+			}
+		}
+	} else {
+		shark_charger_insert = 0;
+
+		if (shark_charger_remove < 2000) {
+			shark_charger_remove++;
 		} else {
-			shark_charger_remove = 0;
 			shark_charger_detected = shark_false;
 		}
 	}
-
-	if (shark_charger_enabled && shark_charge_times < SHARK_CHG_TIME_MAX) {
-		shark_charge_times++;
-	}
 }
 
 void shark_charge_poll(void)
@@ -82,21 +90,27 @@ void shark_charge_poll(void)
 			switch (cb_operate_state) {
 			case CB_BAT1:
 				if (sub_bms_info_1.packet_common.charge_flag == 0) {
-					shark_charger_disable();
+					shark_charger_disable(SHARK_CHG_TIME_MIN);
 				}
 				break;
 
 			case CB_BAT2:
 				if (sub_bms_info_2.packet_common.charge_flag == 0) {
-					shark_charger_disable();
+					shark_charger_disable(SHARK_CHG_TIME_MIN);
 				}
 				break;
 
 			case CB_BAT1_BAT2_PARRALLEL:
-				if (sub_bms_info_1.packet_common.charge_flag == 0 && sub_bms_info_2.packet_common.charge_flag == 0) {
-					shark_charger_disable();
-				} else if (shark_battery_is_discharge1() || shark_battery_is_discharge2()) {
-					shark_charger_disable();
+				if (sub_bms_info_1.packet_common.charge_flag == 0) {
+					if (sub_bms_info_2.packet_common.charge_flag == 0) {
+						shark_charger_disable(SHARK_CHG_TIME_MIN);
+					}
+
+					if (shark_battery_get_current12() < 0) {
+						shark_charger_disable(SHARK_CHG_TIME_MIN);
+					}
+				} else if (sub_bms_info_2.packet_common.charge_flag == 0 && shark_battery_get_current12() < 0) {
+					shark_charger_disable(SHARK_CHG_TIME_MIN);
 				}
 				break;
 			}
@@ -105,13 +119,3 @@ void shark_charge_poll(void)
 		}
 	}
 }
-
-void EXTI4_IRQHandler(void)
-{
-	if (exti_flag_get(EXTI_4) != RESET) {
-		exti_flag_clear(EXTI_4);
-		shark_charger_remove = 0;
-		shark_charger_detected = shark_true;
-	}
-}
-

+ 5 - 2
Source/shark_charge.h

@@ -4,7 +4,8 @@
 #include "common.h"
 
 #define SHARK_CHG_DEBOUNCE			500
-#define SHARK_CHG_TIME_MIN			10000
+#define SHARK_CHG_TIME_MIN			5000
+#define SHARK_CHG_TIME_MID			20000
 #define SHARK_CHG_TIME_MAX			60000
 
 #define GPIO_PORT_CHG_DET			GPIOC
@@ -23,9 +24,11 @@ extern shark_bool shark_charger_detected;
 extern shark_bool shark_charger_enabled;
 extern shark_bool shark_battery_full;
 extern shark_u16 shark_charge_times;
+extern shark_u16 shark_charger_remove;
+extern shark_u16 shark_charger_insert;
 
 void shark_charger_set_enable(shark_bool enable);
-void shark_charger_disable(void);
+void shark_charger_disable(u16 times);
 void shark_charge_init(void);
 void shark_charge_tick(void);
 void shark_charge_poll(void);

+ 1 - 1
Source/sw_build_info.h

@@ -1,3 +1,3 @@
 #pragma once
 
-#define CONFIG_VERSION "PS100XX_V11_11182050"
+#define CONFIG_VERSION "PS100XX_V11_11191521"