Battery Pack Cell Imbalance, 2RC Models and SoC Balancing
Simulate cell-to-cell SoC drift, parallel current sharing and weakest-cell cutoffs with a 2RC model for every cell. Size passive balancing and compare its effect over repeated cycles.
Battery pack cell imbalance can reduce usable capacity even when most cells still contain charge. This battery string simulation follows each cell separately to show how capacity, resistance, polarization, leakage and initial state of charge affect a series-parallel pack. It is intended for engineers comparing pack arrangements, students studying battery management, and anyone investigating why one cell repeatedly reaches a limit first.
Choose parallel cell groups connected in series (PCM), or complete series strings connected in parallel (SCM). Enter the series and parallel counts, nominal cell capacity and the five electrical parameters of a dual-polarization 2RC cell model. The default OCV curve is measured NMC data from Liu and Zhang; a custom linear curve is available for a local approximation to another chemistry. Use parameters identified at the temperature and state of health of interest.
The variation inputs are bounded half-ranges: 0.03 means a capacity variation of ±3%, while an initial SoC half-range of 0.02 means ±2 percentage points. The seed creates a repeatable example pack. The outlier input applies an additional capacity reduction to one numbered cell. The parameter table shows the resulting sample, so comparisons can use exactly the same cells.
Each cycle discharges at constant pack current until the first cell reaches its lower SoC or voltage limit, rests, charges until the first upper limit, then disconnects the charger for the balancing window. The entire pack stops at a cell limit; individual strings are not disconnected and restarted. An interrupted or timed-out phase leaves the cycle incomplete and is excluded from the completed-cycle count. Parallel cell current sharing follows the instantaneous network voltage, so cell current can be negative even while pack current is positive. Self-discharge continues during every phase.
Passive balancing drains the higher-SoC parallel groups in PCM packs, or individual cells in SCM packs. The selected current is a regulated or PWM-averaged channel current. The SoC balancing current result is the worst charge-removal budget divided by the available window, including differential leakage. Read it together with the achieved spread: circulating currents and finite balancing time can prevent exact equality. Set balancing current to zero to compare operation without shunts.
The first drawing and cell bars animate the last attempted cycle. The envelope plot shows its lowest and highest cell SoCs; the cycle bars compare spread immediately before and after each completed balancing window. Initial cell current bars reveal unequal loading before polarization develops.
This tool does not model temperature, progressive ageing, hysteresis, charger CC/CV taper, faults, interconnect inductance or protection hardware. Fixed parameter differences can produce repeatable within-cycle spread without inevitable long-term divergence. Balancing removes excess charge; it cannot restore lost cell capacity. Use measured cell data and check numerical convergence before applying results to a pack design.
How it is calculated
Each cell uses discharge-positive current : , , and . Charge efficiency applies only for negative cell current. Leakage removes stored charge internally; it does not create an additional terminal RC drop.
For PCM groups, and , with . For SCM strings, sum the cell source voltages and resistances, including each cell shunt drop, then solve the parallel-string network. This follows Plett and Klein (2009), attached pp. 4–5; the present cell dynamics retain two independent RC branches and omit ESC hysteresis.
The integrator advances both RC voltages with their exponential response. Their interval-average voltages and midpoint OCV determine the average branch currents through two linearized network iterations. SoC is coulomb-counted using those currents. The terminal network is solved again at the endpoint. Steps start small after phase changes and grow to the chosen leg interval; a bracketed refinement shortens threshold-crossing steps while keeping every accepted state inside the SoC and phase limits.
A PCM balancing channel acts across an entire parallel group, using capacity-weighted group SoC. An SCM channel acts across one cell. At each balancing step, higher channels drain toward the minimum channel SoC plus the deadband. The required current is the worst pre-window excess charge divided by the window, plus positive differential leakage relative to that target. This is a charge budget, rather than an optimized controller design. Plett's balancing notes, pp. 5–23 to 5–24, provide the independent 7.7 Ah / 77 mAh benchmark.
The SoC domain 0.1–1.0 is enforced in every phase. An outward boundary crossing stops the whole simulation immediately. Charging stops as impossible when even its idealized net charge input cannot cover leakage. A powered leg reaching its finite time horizon or step limit without a cell cutoff is explicitly incomplete. Cell limit identifiers are assigned only after an actual cutoff; completed-cycle counts exclude interrupted cycles.
Assumptions
All cells share one OCV curve and fixed, positive parameters at an implicitly fixed temperature. The NMC OCV values are Liu and Zhang (2022), Table 2, measured after two hours of rest; monotone cubic interpolation is used over SoC 0.1–1.0. The R₁, C₁, R₂, C₂ defaults use their Table 3 at SoC 0.5. The editable 30 mΩ R₀ is an illustrative scenario input, independent of that paper's fitted R₀.
Capacity, R₀, all four RC parameters, leakage and initial SoC receive independent reproducible bounded variations. Half-ranges describe this constructed sample, not a normal distribution or a confidence interval. One additional capacity outlier is optional through zero capacity loss. Cell numbering runs along each series string, then across parallel branches.
Connections are ideal apart from resistance included in R₀. Every cell begins with relaxed polarization. Shunts draw the specified average current while enabled, limited to the remaining removable charge. There is no shunting during charge or discharge.
Where it applies
Use a measured OCV curve and RC parameters for the chemistry, temperature, ageing state and current range being investigated. The custom affine OCV option is a local approximation; it does not represent a general LFP or NMC discharge curve. No temperature or progressive degradation model is included. Capacity mismatch creates within-cycle SoC spread; secular drift requires effects such as unequal leakage or charge losses.
The default is a 3S2P pack over two cycles with 100 integration intervals per nominal leg. This resolution and compact default pack keep browser evaluation responsive while retaining every cell and both RC branches. The default first-discharge capacity agrees with an independent SciPy DOP853 solution of the coupled ODEs to within 0.00002 Ah; doubling the requested interval count to 200 changes it by less than 0.00002 Ah. For larger packs or longer studies, the interval count is automatically capped by a workload budget, with a floor of 12 intervals per nominal leg; rest and balancing windows use correspondingly fewer intervals. Coarser intervals can shift cutoff timing and average fast current-sharing changes. Increase intervals and compare shorter studies when near a cutoff or when fast circulating-current transients matter; very short RC modes are exponentially integrated, but their current changes within a step are averaged.
Only the last attempted cycle is retained for playback, independently of cycle-summary storage. Discharge and charge each retain 31 base samples, rest retains 11, and balancing retains 21; every visited phase also retains its boundaries, cell-SoC extrema, envelope extrema and maximum-spread time. Interrupted phases keep their actual endpoint. Resampling and displayed interpolation are performed separately within each phase, and plot times include all retained timestamps. This can smooth brief voltage/current changes, so peak current comes from integration endpoints and phase starts, not from the picture.
Limits stop the whole pack at the first cell event. CC/CV taper, string contactor logic, fault propagation, hysteresis, thermal design, current-dependent capacity and cell-level ageing are outside scope. Any phase reaching an outward OCV-domain boundary stops the whole simulation and leaves the current cycle incomplete. A powered leg has a time horizon of 2.5 × largest cell capacity × parallel count / applied pack current; reaching that horizon without a cutoff also leaves the cycle incomplete. Increase charging current relative to leakage when charge cannot finish. Installation work belongs to a qualified person. Balancing-current budget and shunt power do not establish protection settings or component thermal ratings.
References
- Gregory L. Plett, Battery Management Systems, Volume II: Equivalent-Circuit Methods, 1st edition, Artech House (2015). https://us.artechhouse.com/mobile/Battery-Management-Systems-Volume-II-Equivalent-Circuit-Methods-P1775.aspx
- Plett and Klein, Simulating Battery Packs Comprising Parallel Cell Modules and Series Cell Modules, EVS24 (2009), especially pp. 4–5. https://www.citelec.org/EVS24/files/proceedings/EVS-24-530150.pdf
- Plett, ECE5720 Cell Balancing, lecture notes (copyright 2013, 2015), pp. 5–2 to 5–6 and 5–23 to 5–24. https://mocha-java.uccs.edu/ECE5720/ECE5720-Notes05.pdf
- Dubarry, Vuillaume and Liaw, From single cell model to battery pack simulation for Li-ion batteries, Journal of Power Sources 186 (2009), 500–507. https://doi.org/10.1016/j.jpowsour.2008.10.051
- Dubarry, Vuillaume and Liaw, Origins and accommodation of cell variations in Li-ion battery pack modeling, International Journal of Energy Research 34 (2010), 216–231. https://doi.org/10.1002/er.1668
- Liu and Zhang, Parameter identification and state of charge estimation of lithium-ion batteries, Energy Storage Science and Technology 11 (2022), 3613–3622, Tables 1–3. https://doi.org/10.19799/j.cnki.2095-4239.2022.0298
Inputs
| Input | Symbol | Unit | Default |
|---|---|---|---|
| Pack topology | topology | Parallel groups in series (PCM) | |
| Series cells | N_s | 3 | |
| Parallel cells or strings | N_p | 2 | |
| Discharge–charge cycles | N_cycles | 2 | |
| Pack discharge current | I_load | A | 3 |
| Pack charge current | I_charge | A | 3 |
| Lower SoC limit | z_low | 0.15 | |
| Upper SoC limit | z_high | 0.95 | |
| Lower cell voltage limit | V_low | V | 3 |
| Upper cell voltage limit | V_high | V | 4.2 |
| Rest after discharge | t_rest | h | 0.1 |
| Charge coulombic efficiency Applied to negative cell current; discharge efficiency is one. | eta_ch | 0.999 | |
| Nominal cell capacity | Q_nom | Ah | 2 |
| Cell R₀ Include each cell's connection resistance. | R_ohm | mohm | 30 |
| Fast polarization resistance R₁ | R_fast | mohm | 12.6 |
| Fast polarization capacitance C₁ | C_fast | F | 2037 |
| Slow polarization resistance R₂ | R_slow | mohm | 8.3 |
| Slow polarization capacitance C₂ | C_slow | F | 42751 |
| Cell self-discharge / leakage Constant internal charge loss; it does not pass through R₀ or the RC branches. | I_sd | mA | 0.1 |
| OCV curve | ocv_mode | Measured NMC curve (Liu 2022) | |
| OCV at SoC 0.1 | U_a | V | 3.46 |
| OCV at SoC 1.0 | U_b | V | 4.17 |
| Initial SoC midpoint | z_initial | 0.85 | |
| Initial SoC half-range | spread_z | 0.02 | |
| Capacity relative half-range | spread_Q | 0.03 | |
| R₀ relative half-range | spread_R | 0.15 | |
| R₁, C₁, R₂, C₂ half-range Independent bounded variations of all four polarization parameters. | spread_RC | 0.1 | |
| Leakage relative half-range | spread_sd | 0.5 | |
| Variation seed A reproducible bounded sample, not a statistical confidence interval. | seed_pack | 7 | |
| Outlier cell number Cells are numbered along each series string, then across parallel branches. | weak_cell | 2 | |
| Outlier capacity loss | loss_Q | 0.1 | |
| Passive balancing current per channel | I_bleed | mA | 150 |
| Balancing window after charge The pack load and charger are off; parallel circulating currents remain. | t_balance | h | 0.5 |
| SoC balancing deadband | deadband_z | 0.002 | |
| Integration intervals per nominal leg Increase to check convergence; both RC branches remain active at every setting. | n_resolution | 100 | |
| Playback time | time_view | h | 0.8 |
Results
With the default inputs above, the calc gives:
| Result | Value |
|---|---|
| Completed cycles | 2 |
| Final cell SoC spread | 0.0022 |
| Charge-budget balancing current | 59.0183 mA |
| Worst pre-balancing channel charge | 0.0295 Ah |
| First discharge governing limit | Cell 2: lower SoC |
| First charge governing limit | Cell 6: upper SoC |
| First discharge delivered capacity | 2.5109 Ah |
| Last discharge delivered capacity | 2.878 Ah |
| Peak individual cell current | 2.1462 A |
| Shunt channel design power at upper voltage | 0.63 W |
| Total shunt energy over simulated cycles | 0.1212 Wh |
Checked against sources
Each case below was calculated by this calc and agrees with the value from its source (within the tolerance where one is shown).
Plett 7.7 Ah, one-percent charge removal
Source: Plett ECE5720 Cell Balancing, 2013/2015, pp. 5–23 to 5–24: 1% of 7.7 Ah is 77 mAh per cell per balancing period. Uses the same channel charge-sizing routine as the simulation.
Inputs: Series cells = 2; Parallel cells or strings = 1; Nominal cell capacity = 7.7 Ah; Capacity relative half-range = 0; Outlier capacity loss = 0; Initial SoC half-range = 0.005; SoC balancing deadband = 0; Discharge–charge cycles = 1; the others as above.
| Result | Source | This calc |
|---|---|---|
| Largest initial balancing charge | 0.077 Ah | 0.077 Ah |
Measured rested NMC cell at 50% SoC
Source: Liu and Zhang (2022), Table 2: rested INR18650-20R at SoC 0.5 has OCV 3.66 V. DOI 10.19799/j.cnki.2095-4239.2022.0298.
Inputs: Series cells = 1; Parallel cells or strings = 1; Outlier cell number = 1; Discharge–charge cycles = 1; Initial SoC midpoint = 0.5; Initial SoC half-range = 0; Capacity relative half-range = 0; Outlier capacity loss = 0; R₀ relative half-range = 0; the others as above.
| Result | Source | This calc |
|---|---|---|
| Initial OCV at the SoC midpoint | 3.66 V | 3.66 V |
Published 0.5 C pulse removes ten percent SoC
Source: Liu and Zhang (2022), section 1.2 HPPC procedure: the 2 Ah cell is discharged at 0.5 C (1 A) until SoC falls by 10%, then rests 2 h. Thus the pulse transfers 0.2 Ah and lasts 720 s = 0.2 h. This checks coulomb integration and SoC cutoff through the full 2RC simulation. DOI 10.19799/j.cnki.2095-4239.2022.0298.
Inputs: Series cells = 1; Parallel cells or strings = 1; Outlier cell number = 1; Discharge–charge cycles = 1; Pack discharge current = 1 A; Pack charge current = 1 A; Cell self-discharge / leakage = 0 mA; Initial SoC half-range = 0; Capacity relative half-range = 0; R₀ relative half-range = 0; R₁, C₁, R₂, C₂ half-range = 0; Outlier capacity loss = 0; Initial SoC midpoint = 0.9; Lower SoC limit = 0.8; Upper SoC limit = 0.98; Lower cell voltage limit = 2.5 V; Upper cell voltage limit = 4.5 V; Charge coulombic efficiency = 1; Rest after discharge = 0 h; the others as above.
| Result | Source | This calc |
|---|---|---|
| First discharge duration | 0.2 h | 0.2 h |
| First discharge delivered capacity | 0.2 Ah | 0.2 Ah |
Related Resources
Related articles
-
Modeling Lithium-Ion Battery Chargers with only Resistor and RC packed using PLECS -
A Comprehensive Review of Lithium-Ion Battery Modeling and Electro-Thermal Analysis Using Equivalent Circuit Models in PLECS -
Design and Simulation of a Lithium-Ion Battery Powered Power-Split Hybrid Electric Vehicle Using a Planetary Gear-Based Series–Parallel Architecture
Related courses
IEC Electrical Schematics and Industrial Control Panels
Basic Electrical Controls & Diagram Reading

Responses