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

解决最大容量错误的问题

Signed-off-by: huhui <huhui@sharkgulf.com>
huhui 4 лет назад
Родитель
Сommit
4f6181d576
1 измененных файлов с 18 добавлено и 8 удалено
  1. 18 8
      Application/app/sox/soc.c

+ 18 - 8
Application/app/sox/soc.c

@@ -27,6 +27,7 @@ static const float _discharger_gain[] = {1.0f/*>0
 #define FULL_MAX_VOLTAGE (54000) //mV
 #define FULL_MIN_CURRENT (500.0f) //mA
 static void calibrate_soc_by_ocv(void);
+static void _soc_clear(void);
 
 #if LEAST_SQUARE==1
 static void _least_square_timer_handler(shark_timer_t *timer);
@@ -44,14 +45,12 @@ void soc_init(void){
 	current_sample_ts = shark_get_mseconds();
 	if (nv_restore_soc() != 0){
 		soc_warning("SOC: nv storage is not inited, use default value!!\n");
-		_soc.coulomb_min = 0;
-		_soc.coulomb_max = DEFALUT_MAX_COULOMB; //30HA,这个值最总需要soh模块给
-		_soc.flags = 0;
-		_soc.charger_coulomb = 0;
-		_soc.pre_charger_coulomb = 0;
-		_soc.dischrger_coulomb = 0;
-		_soc.pre_discharger_coulomb = 0;
-		_soc.total_coulomb = 0;
+		_soc_clear();
+	}
+	//如果最大容量和默认不一致,需要重新校准
+	if (_soc.coulomb_max != DEFALUT_MAX_COULOMB) {
+		_soc_clear();
+		nv_save_all_soc();
 	}
 	if ((_soc.flags & SOC_FLAG_CALIBRATED) == 0){
 		calibrate_soc_by_ocv();
@@ -60,6 +59,17 @@ void soc_init(void){
 	soc_log();
 }
 
+static void _soc_clear(void){
+	_soc.coulomb_min = 0;
+	_soc.coulomb_max = DEFALUT_MAX_COULOMB; //30HA,这个值最总需要soh模块给
+	_soc.flags = 0;
+	_soc.charger_coulomb = 0;
+	_soc.pre_charger_coulomb = 0;
+	_soc.dischrger_coulomb = 0;
+	_soc.pre_discharger_coulomb = 0;
+	_soc.total_coulomb = 0;
+}
+
 void soc_restore_by_iap(uint8_t flags, uint8_t capaticy){
 	_soc.coulomb_min = 0;
 	_soc.coulomb_max = DEFALUT_MAX_COULOMB; //30HA,这个值最总需要soh模块给