|
@@ -144,22 +144,9 @@ uint32_t soc_get_charger_remain_time(void){
|
|
|
return charger_remain_time;
|
|
return charger_remain_time;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-void soc_update(void){
|
|
|
|
|
- if (!chargering && bms_state_get()->charging){
|
|
|
|
|
- _soc.pre_charger_coulomb = _soc.charger_coulomb;
|
|
|
|
|
- _soc.charger_coulomb = 0;//clear charing
|
|
|
|
|
- _soc.total_coulomb += _soc.pre_charger_coulomb / 3600.0f;
|
|
|
|
|
- chargering = 1;
|
|
|
|
|
- soc_warning("changed to chargering, current = %d\n", measure_value()->load_current);
|
|
|
|
|
- }else if (chargering && !bms_state_get()->charging){
|
|
|
|
|
- _soc.pre_discharger_coulomb = _soc.dischrger_coulomb;
|
|
|
|
|
- _soc.dischrger_coulomb = 0; //clear discharger
|
|
|
|
|
- _soc.total_coulomb += _soc.pre_discharger_coulomb / 3600.0f;
|
|
|
|
|
- chargering = 0;
|
|
|
|
|
- soc_warning("changed to dischargering, current = %d\n", measure_value()->load_current);
|
|
|
|
|
- }
|
|
|
|
|
- double current = measure_value()->load_current / 1000.0f; //A
|
|
|
|
|
- double delta_q = current * _delta_time();
|
|
|
|
|
|
|
+static void soc_update_by_current_and_time(float current_now, float delta_time){
|
|
|
|
|
+ double current = current_now / 1000.0f; //A
|
|
|
|
|
+ double delta_q = current * delta_time;
|
|
|
if (chargering){
|
|
if (chargering){
|
|
|
delta_q = delta_q * _charger_coefficient;
|
|
delta_q = delta_q * _charger_coefficient;
|
|
|
_soc.charger_coulomb += abs(delta_q);
|
|
_soc.charger_coulomb += abs(delta_q);
|
|
@@ -206,6 +193,32 @@ void soc_update(void){
|
|
|
nv_save_soc();
|
|
nv_save_soc();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void soc_update_for_deepsleep(float sleep_time){
|
|
|
|
|
+ soc_update_by_current_and_time(-1.0f, sleep_time);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void soc_update(void){
|
|
|
|
|
+ if (!chargering && bms_state_get()->charging){
|
|
|
|
|
+ _soc.pre_charger_coulomb = _soc.charger_coulomb;
|
|
|
|
|
+ _soc.charger_coulomb = 0;//clear charing
|
|
|
|
|
+ _soc.total_coulomb += _soc.pre_charger_coulomb / 3600.0f;
|
|
|
|
|
+ chargering = 1;
|
|
|
|
|
+ soc_warning("changed to chargering, current = %d\n", measure_value()->load_current);
|
|
|
|
|
+ }else if (chargering && !bms_state_get()->charging){
|
|
|
|
|
+ _soc.pre_discharger_coulomb = _soc.dischrger_coulomb;
|
|
|
|
|
+ _soc.dischrger_coulomb = 0; //clear discharger
|
|
|
|
|
+ _soc.total_coulomb += _soc.pre_discharger_coulomb / 3600.0f;
|
|
|
|
|
+ chargering = 0;
|
|
|
|
|
+ soc_warning("changed to dischargering, current = %d\n", measure_value()->load_current);
|
|
|
|
|
+ }
|
|
|
|
|
+ double current = measure_value()->load_current / 1000.0f; //A
|
|
|
|
|
+ double delta_q = current * _delta_time();
|
|
|
|
|
+
|
|
|
|
|
+ soc_update_by_current_and_time(measure_value()->load_current, _delta_time());
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
soc_update_charger_remain_time();
|
|
soc_update_charger_remain_time();
|
|
|
|
|
|
|
|
}
|
|
}
|