Просмотр исходного кода

1. 未校准的情况下欠压,强制电量为0
2. 未校准的情况,电压校准soc,比真实情况低20%左右

Signed-off-by: huhui <huhui@sharkgulf.com>

huhui 4 лет назад
Родитель
Сommit
e48ace5972
1 измененных файлов с 14 добавлено и 23 удалено
  1. 14 23
      Application/app/sox/soc.c

+ 14 - 23
Application/app/sox/soc.c

@@ -205,34 +205,20 @@ static void calibrate_soc_by_ocv(void){
 	for (int i = 0; i < CELLS_NUM; i++){
 		pack_vol += measure_value()->cell_vol[i];
 	}
-	if (pack_vol < (2700 * CELLS_NUM)){
+	if (pack_vol <= (48000)){
 		_soc.capacity = 0;
-	}else if (pack_vol < (2900 * CELLS_NUM)){
+	}else if (pack_vol <= 49000){
 		_soc.capacity = 5;
-	}else if (pack_vol < (2950 * CELLS_NUM)){
-		_soc.capacity = 15;
-	}else if (pack_vol < (3000 * CELLS_NUM)){
+	}else if (pack_vol <= 50000){
+		_soc.capacity = 10;
+	}else if (pack_vol <= 51000){
 		_soc.capacity = 30;
-	}else if (pack_vol < (3050 * CELLS_NUM)){
-		_soc.capacity = 40;
-	}else if (pack_vol < (3100 * CELLS_NUM)){
-		_soc.capacity = 45;
-	}else if (pack_vol < (3150 * CELLS_NUM)){
+	}else if (pack_vol <= 52000){
 		_soc.capacity = 50;
-	}else if (pack_vol < (3200 * CELLS_NUM)){
-		_soc.capacity = 55;
-	}else if (pack_vol < (3250 * CELLS_NUM)){
-		_soc.capacity = 65;
-	}else if (pack_vol < (3300 * CELLS_NUM)){
-		_soc.capacity = 75;
-	}else if (pack_vol < (3400 * CELLS_NUM)){
-		_soc.capacity = 85;
-	}else if (pack_vol < (3500 * CELLS_NUM)){
-		_soc.capacity = 90;
-	}else if (pack_vol < (3550 * CELLS_NUM)){
-		_soc.capacity = 95;
+	}else if (pack_vol <= 53000){
+		_soc.capacity = 60;
 	}else {
-		_soc.capacity = 100;
+		_soc.capacity = 80;
 	}
 	_soc.coulomb_now = (_soc.coulomb_max - _soc.coulomb_min) * _soc.capacity / 100.0f + _soc.coulomb_min;
 	soc_warning("SOC: calibrate_soc_by_ocv -> capacity = %d, pack_voltage = %d\n", _soc.capacity, pack_vol);
@@ -368,6 +354,11 @@ static void soc_calibrate(uint8_t prev_charge_status){
 				soc_debug("calibrate Capacity to 100\n");
 				_force_capacity_full();
 			}
+		}else {
+			if (_soc.capacity && _soc_is_under_voltage()) {
+				_soc.capacity = 0;
+			}
+
 		}
 	}
 }