Kaynağa Gözat

fix: 判断5238和1180的测量出来的电流差值超过500mA,认为1180出错,reset 1180

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 4 yıl önce
ebeveyn
işleme
edd2ca5114
2 değiştirilmiş dosya ile 22 ekleme ve 13 silme
  1. 21 13
      Application/app/sox/state.c
  2. 1 0
      Application/app/sox/state.h

+ 21 - 13
Application/app/sox/state.c

@@ -480,22 +480,30 @@ static u32 _bms_main_task_handler(void){
 extern void show_leds_for_charging(uint8_t charging);
 static debounce_t _charging_detect = {.count = 0, .max_count = 10, .init_count = 0};
 static int cs1180_may_error_count = 0;
+static bool _cs1180_may_error(void) {
+	//cs1180 not working
+	if (measure_value()->load_current == measure_value()->current_5238) {
+		return false;
+	}
+	//cs1180检测到充电电流,5238检测到负电流
+	if ((measure_value()->load_current >= MIN_START_CHARGER_CURRENT) && (measure_value()->current_5238 <= 0)) {
+		return true;
+	}
+	//cs1180 和 5238的测量电流差超过阈值
+	if (abs(measure_value()->load_current - measure_value()->current_5238) >= MIN_DIFF_BT_5238_1180) {
+		return true;
+	}
+	return false;
+}
 static void check_charging(){
 	/* 解决cs1180可能出错,导致误判充电,离仓后无法休眠 */
-	int may_error = 0;
-	if (measure_value()->load_current >= MIN_START_CHARGER_CURRENT) {
-		if (measure_value()->load_current != measure_value()->current_5238) {
-			if (measure_value()->current_5238 <= 0) { //cs1180检测到充电电流,5238检测到负电流
-				if (++cs1180_may_error_count >= _charging_detect.max_count/2) {
-					measure_value()->load_current = measure_value()->current_5238;
-					cs1180_adc_shutdown();
-					cs1180_may_error_count = 0;
-				}
-				may_error = 1;
-			}
+	if (_cs1180_may_error()) {
+		if (++cs1180_may_error_count >= _charging_detect.max_count/2) {
+			measure_value()->load_current = measure_value()->current_5238;
+			cs1180_adc_shutdown();
+			cs1180_may_error_count = 0;
 		}
-	}
-	if (may_error == 0) {
+	}else {
 		cs1180_may_error_count = 0;
 	}
 	if ((measure_value()->load_current >= MIN_START_CHARGER_CURRENT)) {

+ 1 - 0
Application/app/sox/state.h

@@ -14,6 +14,7 @@
 #define BATT_USED_BY_CHARGER_DOCKER 2
 #define HATT_USED_BY_CHARGER_BOX 3
 
+#define MIN_DIFF_BT_5238_1180     500
 #define MIN_START_CHARGER_CURRENT 300 //ma, 如果有正向超过 MIN_START_CHARGER_CURRENT的电流,认为在充电
 #define MIN_START_LOADING_CURRENT 5  //ma, 如果有反向小于 MIN_START_LOADING_CURRENT的电流,认为在放电
 #define MAX_DIFF_BETWEEN_MIN_MAX_CELL 150 //0.15v ,压差超过这个值,开始balance