Sweden
Loading...
India
Loading...
Current Limit SWCSourceSWC InputSWC Output OutputSourceSourceSWC InputSWC InputSWC OutputSWC OutputOutputOutputCell voltage fast filteredTemperature slow filteredUocv(Soc)I_lim_chgI_lim_dchCalibration Parameters:- I_cont_dch_lim, I_cont_chg_lim- I_long_dch_lim, I_long_chg_lim- I_short_dch_lim, I_short_chg_lim- Dt_short_lim, Dt_long_lim- Rmin, Rmax- V_op_min, V_op_max- T_op_min, T_op_max- T_crit_min, T_crit_max
Current Limit SWCSourceSWC InputSWC Output OutputSourceSourceSWC InputSWC InputSWC OutputSWC OutputOutputOutputCell voltage fast filteredTemperature slow filteredUocv(Soc)I_lim_chgI_lim_dchCalibration Parameters:- I_cont_dch_lim, I_cont_chg_lim- I_long_dch_lim, I_long_chg_lim- I_short_dch_lim, I_short_chg_lim- Dt_short_lim, Dt_long_lim- Rmin, Rmax- V_op_min, V_op_max- T_op_min, T_op_max- T_crit_min, T_crit_max

Current Limits

Parameters

Parameter Value Description
I_cont_dch_lim, I_cont_chg_lim -72A, 72A Continuous discharge/charge limits
I_long_dch_lim, I_long_chg_lim -144A, 144A Long pulse discharge/charge limits
I_short_dch_lim, I_short_chg_lim -216A, 216A Short pulse discharge/charge limits
Dt_short_lim, Dt_long_lim 30s, 3min Short and long pulse time limits
Rmin, Rmax 0.1mΩ, 0.5mΩ Minimum and maximum resistance
Rint Internal resistance calculated over a longer horizon, typically 30s
V_op_min, V_op_max 2.5V, 3.65V Operating voltage limits
T_op_min, T_op_max 5°C, 38°C Operating temperature limits
T_crit_min, T_crit_max 0°C, 45°C Critical temperature limits

Note: Sign convention - charge current is positive, discharge current is negative. In this document 'x' refers to charge or discharge.

Overview

The current limits are layered, when respected they ensure that the cell voltage limits are not violated and that the cell ages according to specification.

  • Recommended current limits come into play while operating far away from the cell cut-off voltages V_op_min, V_op_max respectively (2.8V and 3.65V for LFP).
  • Hard limits are based on maximum and minimum operating voltages. These voltages should not be exceeded as they will lead to a premature wear of the cell.

Important: The hard limits are not to be confused with the safety limits. The safety limits (typ. 2V and 3.8V on LFP) are the absolute voltage limits, violating these will lead to irreversible damage to the cell.

0. Soc and Soq recalibration procedures:

When the soc is unknown (i.e. cal_soc_ocv_unknown=1), the current limits function shall discharge the cell until a certain level according to "0.1. Soc recalibration". When the soq is unknown (i.e. soq_unknown=1), the current limits shall charge the cell to a certain level according to "0.2. Soq recalibration". If both cal_soc_ocv_unknown and soq_unknown are true, the current limits shall prioritize the "0.1. Soc recalibration" first.

Remark: Once the soc is known at low soc, one can run controlled charged to a high soc level to estimate the capacity.

0.1. Soc recalibration procedure:

If cal_soc_ocv_unknown is =1 then the current limit charge I_lim_chg shall be set to 0A, the discharge current I_lim_dch shall be set to C/3. The current limit I_lim_dch function shall maintain C/3 discharge until reaching the lower cut-off voltage V_op_min. After which the discharge current I_lim_dch shall be set to 0A. The recalibration procedure ends whenever cal_soc_ocv_unknown is set to 0. Where C is the nominal capacity of the cell (BOL - begining of life capacity).

Note: This should bring the cell voltage within the lower linear zone of the OCV curve.

0.2. Soq recalibration procedure:

If soq_unknown_flag is =1 and soc_ocv_unknown=0 then the current limit discharge I_lim_dch shall be set to 0A, the charge current I_lim_chg shall be set to C/3. The current limit function shall maintain C/3 charge until reaching the upper cut-off voltage V_op_max. Once the upper cut-off voltage has been reached once, the current limit function shall maintain C/5 until the upper cut-off voltage V_op_max again. After which the discharge current shall be set to 0A. The recalibration procedure ends whenever soq_unknown_flag is set to 0. Where C is the nominal capacity of the cell (BOL - begining of life capacity).

Note: This should bring the cell voltage within the upper linear zone of the OCV curve.

These limits are typically provided by the cell manufacturer and guarantee the lifetime of the cell. They come as a form of lookup tables and datasheets and will vary significantly from cell to cells.

a. Continuous Current Limit Parameters (I_cont_chg_lim, I_cont_dch_lim)

The cell manufacturer provides a continuous current that can be used without interruption for an indefinite amount of time, I_cont_dch_lim. The same applies for charge I_cont_chg_lim. This is only valid within the normal temperature operating ranges [T_op_min; T_op_max].

b. Dynamic Continuous Current Limits (I_cont_chg, I_cont_dch)

When exceeding the operating temperature range, the dynamic continuous power limit should linearly go to 0A between T_op_max and T_crit_max, respectively T_op_min and T_crit_min.

c. Short/Long Pulse Current Limit Parameters

The cell manufacturer provides as well a maximum discharge/charge current for:

  • Short pulse: I_short_dch_lim, I_short_chg_lim and Dt_short_lim (typically 30s)
  • Long pulse: I_long_dch_lim, I_long_chg_lim and Dt_long_lim (typically 3-5min)

These are calibration parameters.

d. Dynamic Current Limits (I_long_x, I_short_x)

Continuous Operation: - When the current is equal or below the continuous limit, there is no time limit for how long it can be used.

Long Pulse Operation: - When the current goes above the continuous limit, the current excess Abs(current - continuous current limit) is integrated over time and the dynamic current limit I_long_x = I_long_x_lim. - When the integral reaches (I_long_x_lim - I_cont_x_lim) * Dt_long_lim, then the current limit I_long_x falls to continuous limit. - Note: The integral needs to recover by having the current going below the continuous limit for a certain amount of time.

Short Pulse Operation: - When the current goes above the continuous limit, the current excess Abs(current - continuous current limit) is integrated over time and the dynamic current limit I_short_x = I_short_x_lim. - When the integral reaches (I_short_x_lim - I_cont_x_lim) * Dt_short_lim, then the current limit I_short_x falls to continuous limit. - Note: The integral needs to recover by having the current going below the continuous limit for a certain amount of time. - Note: This integral will saturate to its maximum value (I_short_x_lim - I_cont_x_lim) * Dt_short_lim before the long one.

Temperature Dependencies: - If the maximum temperature gets close to T_op_max, both I_short_chg and I_long_chg should converge rapidly towards I_cont_chg. - If the minimum temperature gets close to T_op_min, both I_short_dch and I_long_dch should converge rapidly towards I_cont_dch.

Finally, the recommended current limit charge and discharge:

I_rec_chg = max(I_cont_chg_lim, I_long_chg, I_short_chg)
I_rec_dch = min(I_cont_dch_lim, I_long_dch, I_short_dch)

Important: - Current limit charge I_rec_chg should always be ≤ I_short_chg_lim - Current limit discharge I_rec_dch should always be ≥ I_short_dch_lim

Note: The above algorithm runs only based on current and can therefore run per pack (not per cell).

2. Hard Limits (I_hrd_x)

These limits predict the maximum/minimum currents that can be used before the cell reaches its max/min operating voltage limits V_op_max, V_op_min. These limits are usually relevant when reaching high and low SoC levels.

Zero Order Cell Model

The simplest way of ensuring that the operating voltage limits are never hit is to consider a zero order cell model:

V_cell(k+1) = U_ocv(k) + Rint × I_hrd_x(k)

Where: - Rint is the internal resistance of the cell for a given SoC and temperature (also called DCIR) - Rint is read from the internal resistance lookup table every 5-10s. - U_ocv(k) is obtained by using the SoC on the inverse OCV long rest table.

Hard Limit Calculations

For charge limit where V_cell(k+1) = V_op_max:

V_cell(k+1) = U_ocv(k) + Rint × I_hrd_chg(k)
I_hrd_chg(k) = [V_op_max - U_ocv(Soc(k))] / Rint

For discharge limit:

I_hrd_dch(k) = [V_op_min - U_ocv(Soc(k))] / Rint

Rint can be read from the internal resistance table.

Resistance Correction (SKIP - this should be inside the internal resistance estimation function in the future).

DO NOT IMPLEMENT

When reaching (or over-reaching) the cell operation limit V_op_max one can correct R(k):

R(k) = [V_cell(k) - U_ocv(Soc(k))] / I_hrd_chg(k)

This value can then be used immediately to correct I_hrd_chg(k). This loop will ensure that the cell voltage does not exceed V_op_max for a prolonged amount of time. The same applies to cell operation limit V_op_min.

Note: The above algorithm runs per cell as each cell has its own individual resistance and U_ocv. This means that there will be N I_hrd_x limits, we are only interested in the extreme of these limits: - I_hrd_chg will be the minimum of the hard limit charge over all the cells - I_hrd_dch will be the maximum of the hard limit discharge over all the cells

3. Overall Limits (I_lim_chg, I_lim_dch)

The overall limits are communicated on CAN to the inverter or any load controlling unit.

I_lim_chg = min(I_hrd_chg, I_rec_chg)
I_lim_dch = max(I_hrd_dch, I_rec_dch)

TEST CASES

0. Soc and Soq recalibration procedures:

0.1. Soc recalibration procedure:

Bring the cells soc to 50%. Flash the BMS with a new software s.t. the nvram soc data is invalid. Make sure cal_soc_ocv_unknown is =1 and that the current limit charge I_lim_chg shall be set to 0A, the discharge current I_lim_dch shall be set to C/3. Discharge the cells by following the current limits discharge I_lim_dch. Check that I_lim_dch = 0 A when any of the cell voltage reaches the lower cut-off voltage V_op_min.

Important: Always follow the current limits! Make sure that cal_soc_ocv_unknown & soc_ocv_unknown are set to 0.

0.2.1. Soq only recalibration procedure:

Execute this test case right after "0.1. Soc recalibration procedure". The soc should be known and very low while the soq is unknown. Make sure that soc_ocv_unknown_flag = 0 and that soq_unknown_flag =1. Check that the current limit discharge I_lim_dch shall be set to 0A, the charge current I_lim_chg shall be set to C/3 if maximum the cell voltage is below V_op_max. Charge with I_lim_chg. Make sure that the I_lim_chg = C/3 until the max cell voltage is = V_op_max. Once V_op_max has been reached once, make sure that the I_lim_chg = C/5 until the max cell voltage is = V_op_max again. Then, once the max cell voltage has reached V_op_max at C/5 A, check that the I_lim_chg is = 0A and soq_unknown_flag =0.

0.2.2. Soq & soc recalibration procedure:

  1. Bring the cells soc to 50%. Flash the BMS with a new software s.t. the nvram soc and soq (capacity) data are invalid. Make sure that both Make sure that soc_ocv_unknown_flag = 1 and that soq_unknown_flag =1. Check that I_lim_chg=0, I_lim_dch=C/3.
  2. Follow I_lim_dch. Check that I_lim_dch goes to 0A when the min cell voltage is =V_op_min and that the soc_ocv_unknown_flag is 0. Check that I_lim_chg now changes from 0A to C/3 A and that soq_unknown_flag is still 1.

  3. Follow I_lim_chg until it gets =0A. Make sure that soq_unkown_flag is now =0.

a. & b. Continuous Current Limit Parameters (I_cont_chg_lim, I_cont_dch_lim) with respect to temperature

Make sure the cell temperatures are between [T_op_min; T_op_max]. Make sure that the BMS can provide continuous current limits for an indefinite amount of time. I_cont_chg (output signal) should be equal to the parameter called I_cont_chg_lim (72A) during charge, and I_cont_dch should be equal to I_cont_dch_lim during discharge.

Change the any of the cell temperature to T_op_max (38 degC), observe that I_cont_chg and I_cont_dch are still equal to resp I_cont_chg_lim and I_cont_dch_lim. Increase of the cell temperature gradually towards T_crit_max (45 degC), see that both I_cont_chg and I_cont_dch decrease and move gradually towards 0A. Make sure that both I_cont_chg and I_cont_dch are equal to 0A whenever any of the cell temperature is >= T_crit_max. The same applies to T_crit_min, both I_cont_chg and I_cont_dch are equal to 0A whenever the cell temperatures go <= T_crit_min.

c. & d. Short/Long Pulse Current Limit

1. Discharge long and continuous

  • Discharge the battery with I_long_dch_lim (parameter, default value = 144 A) for Dt_long_lim seconds (parameter, default value 3min) then discharge the battery with I_cont_dch_lim (parameter, default 72 A) for the rest of the test.
  • Observe that I_long_dch (output signal) is equal to I_long_dch_lim (144 A) during Dt_long_lim (3min) and then I_long_dch = I_cont_dch_lim (parameter, default 72 A) for the rest of the test. This test is valid for charge and can be repeated the same way.

2. Discharge long and continuous with recovery

  • Discharge the battery with I_long_dch_lim (parameter, default value = 144 A) for Dt_long_lim seconds (parameter, default value 3min) then set the battery current to 0 A for the rest of the test.
  • Observe that I_long_dch (output signal) is equal to I_long_dch_lim (144 A) during the first Dt_long_lim min, i.e. t<3min, then I_long_dch should drop to I_cont_dch_lim at t=3min. After t>3min, I_long_dch should increase linearly back to I_long_dch_lim after 3min. This test is valid for charge and can be repeated the same way.
  • Make sure that I_long_dch has fully recovery and that you are able to discharge the battery at I_long_dch_lim A for Dt_long_lim seconds while following I_long_dch (i.e. I(t) = I_long_dch).

3. Discharge short and continuous

  • Discharge the battery with I_short_dch_lim (parameter, default value = 216 A) for Dt_short_lim seconds (parameter, default value 30s) then discharge the battery with I_cont_dch_lim (parameter, default 72 A) for the rest of the test.
  • Observe that I_short_dch (output signal) is equal to I_short_dch_lim (216 A) during Dt_long_lim (30s) and then I_short_dch = I_cont_dch_lim (parameter, default 72 A) for the rest of the test. This test is valid for charge and can be repeated the same way.

4. Discharge short and continuous with recovery

  • Discharge the battery with I_short_dch_lim (parameter, default value = 216 A) for Dt_short_lim seconds (parameter, default value 30s) then set the battery current to 0 A for the rest of the test.
  • Observe that I_short_dch (output signal) is equal to I_short_dch_lim (216 A) during the first Dt_short_lim s, i.e. t<3min, then I_short_dch should drop to I_cont_dch_lim at t=3min. After t>3min, I_short_dch should increase linearly back to I_short_dch_lim after 3min. This test is valid for charge and can be repeated the same way.
  • Make sure that I_long_dch has fully recovery and that you are able to discharge the battery at I_short_dch_lim A for Dt_short_lim seconds while following I_short_dch (i.e. I(t) = I_short_dch).

2. Hard limits

1. Hard limit charge/discharge - Normal case

  • Make sure that the internal resistance of the cell is set to R(k)=0.3mOhm for all cells.
  • While the soc of the cells change, one can observe:
  • The current limit I_hrd_dch(k) should be comprised between [2.5 - U_ocv(Soc(k))] / 0.0003 => [-3833;0] A.
  • The current limit I_hrd_chg(k) should be comprised between [3.65 - U_ocv(Soc(k))] / 0.0003 => [0;3833] A.
  • The current limit I_hrd_dch(k) should be excessively high when soc is at 100% and should come close to 0A when the soc approach 0%. This limit becomes more relevant at low soc.
  • The current limit I_hrd_chg(k) should be excessively high when soc is at 0% and should come close to 0A when the soc approach 100%. This limit becomes more relevant at high soc.

    IMPORTANT: DO NOT FOLLOW THE LIMIT I_hrd_dch(k), I_hrd_chg(k)!

2. Hard limit discharge - R(k) correction

  • Bring the soc to 10% or below.
  • Apply a current pulse I(k) 100ms long equal to I_hrd_dch(k) but never exceeding I_short_dch_lim.
  • Observe that the cell voltage of at least 1 cell goes towards to V_op_min (2.5V). In a virtual env. this behaviour has to be simulated.
  • Observe that R(k) is updated with a new value still comprised between [Rmin; Rmax].
  • Check that this new resistance R(k) corresponds to =[V_op_min - U_ocv(Soc(k))] / I_hrd_dch(k).
  • (LAB ONLY) Apply a new pulse I(k) of 100ms long equal to the new value of I_hrd_dch(k) but never exceeding I_short_dch_lim.
  • (LAB ONLY) Observe that the cell voltage of at least 1 cell goes to V_op_min (2.5V).

    IMPORTANT: Never exceed I_short_dch_lim. IMPORTANT: If this test is performed poorly, it can cause the contactors to open.

3. Hard limit charge - R(k) correction

  • Execute this test ONLY if the test number "2. Hard limit discharge - R(k) correction" is successful.
  • Bring the soc to 90% or above.
  • Apply a current pulse I(k) 100ms long equal to I_hrd_chg(k) but never exceeding I_short_chg_lim.
  • Observe that the cell voltage of at least 1 cell goes towards to V_op_max (3.65V). In a virtual env. this behaviour has to be simulated.
  • Observe that R(k) is updated with a new value still comprised between [Rmin; Rmax].
  • Check that this new resistance R(k) corresponds to =[V_op_max - U_ocv(Soc(k))] / I_hrd_chg(k).
  • (LAB ONLY) Apply a new pulse I(k) of 100ms long equal to the new value of I_hrd_chg(k) but never exceeding I_short_chg_lim.
  • (LAB ONLY) Observe that the cell voltage of at least 1 cell goes to V_op_max (2.5V).

    IMPORTANT: Never exceed I_short_chg_lim. IMPORTANT: If this test is performed poorly, it can cause the contactors to open and more importantly it damage the cell and cause its destruction.