|
@@ -392,7 +392,7 @@ uint32_t bms_SoC_running_fsm(MASTER_SOC_ESTIMATOR_t* est, int16_t I_batt, uint16
|
|
|
break;
|
|
|
case BMS_SOC_CHARGE_DERATE:
|
|
|
// derate SoC depending on the SoC and temperature
|
|
|
- bms_set_derating(est, temp_min, temp_max);
|
|
|
+ bms_set_derating(est, temp_min, temp_max,U_batt_min);
|
|
|
est->state=BMS_SOC_READY;
|
|
|
return 0;
|
|
|
break;
|
|
@@ -585,7 +585,7 @@ uint32_t bms_SoC_running_fsm(MASTER_SOC_ESTIMATOR_t* est, int16_t I_batt, uint16
|
|
|
break;
|
|
|
case BMS_SOC_DISCHARGE_DERATE:
|
|
|
// derate SoC depending on the SoC and temperature
|
|
|
- bms_set_derating(est, temp_min, temp_max);
|
|
|
+ bms_set_derating(est, temp_min, temp_max,U_batt_min);
|
|
|
est->state=BMS_SOC_READY;
|
|
|
return 0;
|
|
|
break;
|
|
@@ -644,7 +644,7 @@ float bms_SoC_get_norm(float value) {
|
|
|
/*
|
|
|
* @brief set Derating
|
|
|
*/
|
|
|
-uint32_t bms_set_derating(MASTER_SOC_ESTIMATOR_t* est, int8_t minTemp, int8_t maxTemp) {
|
|
|
+uint32_t bms_set_derating(MASTER_SOC_ESTIMATOR_t* est, int8_t minTemp, int8_t maxTemp, uint16_t Umin) {
|
|
|
float derating_charge_temp_high;
|
|
|
float derating_charge_temp_low;
|
|
|
float derating_charge_SoC;
|
|
@@ -653,6 +653,7 @@ uint32_t bms_set_derating(MASTER_SOC_ESTIMATOR_t* est, int8_t minTemp, int8_t ma
|
|
|
float derating_discharge_temp_high;
|
|
|
float derating_discharge_temp_low;
|
|
|
float derating_discharge_SoC;
|
|
|
+ float derating_discharge_Umin1;
|
|
|
|
|
|
// charging
|
|
|
derating_charge_SoC=bms_calc_charge_derating(est->SoC_percentage_smooth);
|
|
@@ -677,6 +678,8 @@ uint32_t bms_set_derating(MASTER_SOC_ESTIMATOR_t* est, int8_t minTemp, int8_t ma
|
|
|
derating_discharge_SoC= bms_calc_discharge_derating(est->SoC_percentage_smooth);
|
|
|
derating_discharge_temp_high = bms_calc_discharge_temp_derating(maxTemp);
|
|
|
derating_discharge_temp_low = bms_calc_discharge_temp_derating(minTemp);
|
|
|
+ derating_discharge_Umin1 = bms_calc_discharge_Umin1(Umin);
|
|
|
+
|
|
|
|
|
|
// lowest current is choosen to be set as max charge current
|
|
|
|
|
@@ -691,6 +694,10 @@ uint32_t bms_set_derating(MASTER_SOC_ESTIMATOR_t* est, int8_t minTemp, int8_t ma
|
|
|
output_derate = derating_discharge_SoC;
|
|
|
}
|
|
|
|
|
|
+ if(output_derate > derating_discharge_Umin1) {
|
|
|
+ output_derate = derating_discharge_Umin1;
|
|
|
+ }
|
|
|
+
|
|
|
est->MaxBatteryDischargeCurrent=output_derate;
|
|
|
|
|
|
return 0;
|
|
@@ -747,6 +754,15 @@ float bms_calc_discharge_derating(float SoC) {
|
|
|
|
|
|
}
|
|
|
|
|
|
+float bms_calc_discharge_Umin1(uint16_t Umin) {
|
|
|
+ if(Umin <= BMS_SOC_UMIN_1 ) {
|
|
|
+ return 0.0 ;
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ return 25.0;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* @ brief derate maximum charge current
|
|
|
*/
|