Sweden
Loading...
India
Loading...

Capacity Estimation

Cell Capacity estimation SWCSourceSWC InputSWC Output OutputSourceSourceSWC InputSWC InputSWC OutputSWC OutputOutputOutputsoc_ocvsoc_ocv_lo_triggersoc_ocv_hi_triggercoulomb countQcell_measQcell_meas_errQcell_estQcell_est_errsoq_unknown_flagCalibration Parameters:- soq_meas_good (default 0.02)- soq_unknown
Cell Capacity estimation SWCSourceSWC InputSWC Output OutputSourceSourceSWC InputSWC InputSWC OutputSWC OutputOutputOutputsoc_ocvsoc_ocv_lo_triggersoc_ocv_hi_triggercoulomb countQcell_measQcell_meas_errQcell_estQcell_est_errsoq_unknown_flagCalibration Parameters:- soq_meas_good (default 0.02)- soq_unknown

When working with aged cell the capacity estimation is crucial in estimating the true capacity a given cell can retain. A wrong capacity will lead to a large couloumb counting deviation and therefore Soc. This estimation function can be broken down into two parts, a measurement part and a filtering part. The measurement part is triggered when some conditions are met and returns a "measured" value of the capacity. This measurement is then fed into a filter that slowly updates the stored value (NVRAM). The stored value is then used by all other software components.

0. Known and Unknown cell capacity

There shall be a parameter to determine if the capacity is known. 'soq_unknown' set to 1 if the capacity is unknown (aged cell) or set to 0 if the capacity is known. If soq_unknown is =0, then the cell is considered knew and the Qcell_est = Nominal capacity, and Qcell_est_err = 2% (or what the manufacturer guarantee in the datasheet). If soq_unknown is =1, i.e. the cell is aged and its capacity is unknown, one should consider by default that its capacity is half of its nominal capacity and that its capacity error is half of its nominal capacity. In this scenario, the user shall follow a recalibration procedure (see Current limit.md) until soq_unknown is =0. Publish on CAN the output called soq_unknown_flag which reflects the value of soq_unknown.

image

1. Capacity measurement

a. Low resting Ocv based Soc

This function shall be triggered when the battery cells get an Soc Ocv update from the lower region (see LFP_Soc specification). The function shall stored this value as soq_soc_lo for each cell. The function shall also keep a value of the current coulomb count value, soq_cc_lo. The function shall store a value of the start (or trigger) time soq_t_lo. Once this function gets activated, the BMS shall keep track of the maximum and minimum current values, resp. soq_i_max, soq_i_min until b. is activated.

b. High resting Ocv based Soc

The function shall trigger the next step, whenever it has got an updated Soc Ocv from the higher region (see LFP_Soc specification). The function shall stored this value as soq_soc_hi for each cell. The function shall also keep a value of the current coulomb count value, soq_cc_hi. The function shall keep track of the time soq_t_hi.

c. Measurement calculation

Once a. and then b. have been fulfilled, the capacity measurement for each cell can be expressed as: deltaCoulomb = (soq_cc_hi - soq_cc_lo) Qcell_meas = deltaCoulomb / (soq_soc_hi - soq_soc_lo)

d. Error calculation

Definition: An error is defined in the same unit as the corresponding value is, e.g. if a capacity is in Ah, then the error will be in Ah. Moreover, the error is symmetric. This means that if a cell nominal value is 65Ah and the error is 5Ah, then we know that the real capacity value lays between 60Ah and 70Ah.

In order to estimate an measurement error, one wants to know what the average current (C-rate) was during the charging phase, and what the minimum and maximum current were. The average current (charging C-rate) can be derived by soq_c_rate = deltaCoulomb / (soq_t_hi -soq_t_lo).

By default, the Qcell_meas_err is = soq_meas_good*Qcell_meas (2% of Qcell_meas). However, this assumes that all the below conditions have been met. If one of the below condition is not met, a penalty is added on top of soq_meas_good. - If soq_c_rate is contained between +C/3 and +C, otherwise additional penalty of 5%. - If soq_i_min >= 0 and soq_i_max < 2C, otherwise additional penalty of 5%. - If soq_i_min < -C/3 add an additional penalty of 10%.

2. Capacity filter

The filter shall retrieve the capacity stored in NVRAM for each cell Qcell_est with their resp. error Qcell_est_err. Note: the initial values of Qcell_est and Qcell_est_err stored in NVRAM are both equal to the cell capacity nominal value.

The filter should merge the measured values with the stored values and later update the stored values with its output. The filter will generate an output based on the below formula:

Qcell_est_filt = alphaQcell_est + (1-alpha)Qcell_meas. Where alpha is between 0 and 1. alpha = Qcell_meas_err / (Qcell_est_err + Qcell_meas_err)

Qcell_est_filt_err = 2Qcell_est_errQcell_meas_err / (Qcell_est_err + Qcell_meas_err)

Qcell_est_filt then replaces Qcell_est in NVRAM. Qcell_est_filt_err then replaces Qcell_est_err in NVRAM. soq_unknown is set to 0 in NVRAM.