Battery bank sizing: required Ah, derating factors and series-parallel arrangement
Battery bank sizing turns a DC load and a required autonomy into a nominal ampere-hour capacity, applying depth-of-discharge, aging, temperature and design-margin factors (IEEE 485 / 1115), then resolves the series-parallel arrangement that reproduces the bus voltage.
When to use
Use it whenever you must specify the energy reserve of a DC system that has to ride through a utility outage or supply a critical load: a UPS DC plant, a telecom -48 V rack, a substation control bus (110/125 V DC), a solar/off-grid storage bank or an emergency lighting circuit. The method is the bridge between the electrical load study and the purchase order — it converts watts and hours of autonomy into the nominal capacity to buy and the number of cells in series and parallel. It is also the tool for auditing an existing bank that no longer holds its autonomy, usually because aging and temperature derating were never applied.
What battery bank sizing is
Sizing a battery bank is not reading an ampere-hour number off a load list: it is converting a DC load and a required autonomy into the nominal capacity to buy, after honestly accounting for everything that erodes the usable energy — the depth you are willing to discharge, the capacity lost to aging, the penalty of cold temperature and the penalty of a fast discharge. Only then does the result become an arrangement of cells: how many in series to build the bus voltage, and how many strings in parallel to reach the capacity.
The most common field failure is a bank that meets its autonomy on the day it is commissioned and falls short two winters later. The cause is almost always the same: the raw demand was bought as the nominal capacity, with no division by the depth of discharge and no derating for aging and temperature. This method exists to prevent exactly that.
The stacked-factor method (IEEE 485 / 1115)
The governing standards — IEEE 485 for lead-acid and IEEE 1115 for nickel-cadmium and lithium — build the required capacity as a chain of multiplicative factors applied to the raw demand:
C_req = (Q_demand / DoD) · AF · DM · Kt_temp · Kt_rate
Each factor answers one question:
- DoD — how deeply may the bank be discharged? Dividing by the depth of discharge converts usable energy into nominal capacity.
- AF (aging factor) — how much capacity will be lost by end of life? Stationary batteries are retired at ~80 % of rated capacity, so a factor of ~1.25 (lead-acid) sizes for that worn-out state.
- DM (design margin) — what allowance for load growth and uncertainty? Typically 1.10.
- Kt_temp (temperature correction) — how much capacity is lost in the cold? Read from the IEEE 485 table.
- Kt_rate (discharge-rate / Peukert factor) — how much usable capacity is lost because the discharge is faster than the rating?
The factors stack because they are independent and each shrinks the available energy. Their product is the honest oversizing the bank needs.
From load to current and demand
Everything starts at the load current. If the load is defined in watts behind an inverter:
I_load = P / (V_bus · η)
where η is the inverter efficiency (pure DC loads use η = 1, and the load may be entered directly in amperes). The raw ampere-hour demand is then simply:
Q_demand = I_load · t_aut
This is the gross charge the load pulls over the autonomy — the number before any derating. Buying this as the nominal capacity is the classic mistake.
The temperature correction
Battery capacity is specified at 25 °C and falls as it gets colder. IEEE 485 tabulates a multiplier that grows below 25 °C; for lead-acid it is about 1.19 at 10 °C, 1.30 at 4.4 °C and 1.40 at 0 °C. A bank installed in an unheated shelter at 10 °C must therefore carry ~19 % more nominal capacity than the same bank in a 25 °C room. Lithium (LiFePO4) is far less sensitive on discharge — but its real constraint is charging below 0 °C, which causes lithium plating and demands self-heating cells or a charge inhibit.
The method interpolates linearly between the tabulated points and clamps at the ends, never returning a factor below 1.0 (the warm side gives no capacity bonus).
The discharge-rate (Peukert) factor
A battery rated at the C10 rate (full discharge in 10 hours) delivers less usable capacity if you drain it in two hours. The Peukert relation captures this:
Kt_rate = max(0.5, (t_ref / t_aut)^(n − 1))
When the autonomy is shorter than the reference rate (t_aut < t_ref), the discharge is faster than rated and the factor rises above 1.0, derating the capacity. When it is slower, the factor falls below 1.0 (a bonus), floored at 0.5 to avoid absurd extrapolation. The exponent n is ~1.2 for lead-acid and ~1.05 for lithium. This is a conservative engineering estimate — the manufacturer’s exact Kt/Rt curves should confirm the final number.
Resolving the series-parallel arrangement
Capacity alone does not buy a bank; you must also reproduce the bus voltage. The two counts are independent:
- Series (Ns): Ns = round(V_bus / V_module). The cells in series add their voltages until the string matches the DC bus. A 48 V bus from 12 V modules needs 4 in series; the same bus from 2 V cells needs 24.
- Parallel (Np): Np = ceil(C_req / C_module). Strings in parallel add their capacities. The ceiling guarantees the installed capacity never drops below the requirement.
The installed capacity is C_inst = Np · C_module and the string voltage is V_string = Ns · V_module. A check confirms the string voltage matches the bus within a tolerance (nominal conventions such as a lithium “48 V” string at 51.2 V are accepted). When the parallel count climbs above about four, the design is flagged: current sharing between many strings degrades, and the cleaner answer is higher-capacity cells or a 2 V cell bank.
How to read the result
- Installed vs required capacity: the margin (folga) should be small and positive — a large excess means the chosen module is too big a granularity step.
- String voltage vs bus: if they diverge, the module voltage or the target bus is wrong; the series count cannot reproduce the bus.
- Parallel count: keep it at four or fewer; more strings is a signal to change cell size.
- Warnings: a DoD above 80 % on lead-acid (or above 90 % on lithium), a charging temperature below 0 °C on lithium, or a discharge faster than the rated C-rate each carry a specific caution.
Practical design considerations
- Always derate to end of life and to the coldest temperature — those two together explain most undersized banks.
- Match the chemistry to the duty: deep daily cycling favors lithium (deeper DoD, milder aging and Peukert); pure standby/emergency tolerates lead-acid at a lower cost per Ah.
- Prefer fewer, larger strings over many small parallel ones for current sharing and charger balance.
- Confirm the rate derating against the manufacturer’s Kt/Rt curves before the purchase order.
- Align standard and method: IEEE 485 governs lead-acid, IEEE 1115 nickel-cadmium and lithium, and IEC 62619 the safety of industrial lithium cells.
Following this chain — load current, raw demand, the stacked DoD/aging/temperature/rate factors and the series-parallel resolution — yields a bank that holds its autonomy not just at commissioning, but through aging, cold and fast discharge in the field.
Formulas and fundamentals
I_load = P / (V_bus · η) | I_load = I (current mode) DC current the bank must supply. In power mode P is the load power [W], V_bus the DC bus voltage [V] and η the inverter efficiency [fraction] when the load is AC behind an inverter (pure DC: η = 1). In current mode the load is entered directly in amperes.
Q_demand = I_load · t_aut Raw charge the load draws over the required autonomy. I_load is the load current [A] and t_aut the autonomy [h]. This is the energy before any derating — the gross figure, not the capacity to buy.
C_req = (Q_demand / DoD) · AF · DM · Kt_temp · Kt_rate Nominal capacity to specify. DoD is the maximum depth of discharge [fraction], AF the aging factor (end-of-life derating, ~1.25 lead-acid / 1.10 lithium), DM the design margin (~1.10), Kt_temp the temperature correction (>1 in the cold) and Kt_rate the discharge-rate correction. The factors stack multiplicatively — the IEEE 485 philosophy.
Kt_rate = max(0.5, (t_ref / t_aut)^(n − 1)) Captures the usable-capacity drop at high discharge rates. t_ref is the C-rate at which the manufacturer rates capacity [h] (≈ C10 lead-acid, ≈ C1 lithium), t_aut the actual autonomy [h] and n the Peukert exponent (~1.2 lead-acid, ~1.05 lithium). A discharge faster than t_ref (t_aut < t_ref) gives a factor > 1; a slower one gives a bonus, floored at 0.5.
Ns = round(V_bus / V_mod) ; Np = ceil(C_req / C_mod) Ns modules in series build the bus voltage; Np strings in parallel reach the required capacity. V_mod is the module/cell nominal voltage [V] and C_mod its nominal capacity [Ah]. The installed bank is C_inst = Np · C_mod and the string voltage V_string = Ns · V_mod.
Standards & methods
- IEEE 485 — Recommended Practice for Sizing Lead-Acid Batteries for Stationary Applications
- IEEE 1115 — Recommended Practice for Sizing Nickel-Cadmium / Lithium Batteries for Stationary Applications
- IEEE 1187 / IEEE 1188 — Installation and maintenance of VRLA stationary batteries
- IEC 62619 — Safety requirements for secondary lithium cells in industrial applications
- IEEE 946 — Design of DC auxiliary power systems for generating stations
Typical reference values
| Quantity | Typical range | Note |
|---|---|---|
| Depth of discharge (DoD) — lead-acid | 50 % cycling, up to 80 % standby | Cycle life collapses above 80 %; daily cycling stays near 50 %. |
| Depth of discharge (DoD) — lithium (LiFePO4) | 80 % to 90 % | Leave reserve for aging and BMS cut-off; 80 % is a safe target. |
| Aging factor (AF) | 1.25 lead-acid · 1.10 lithium | Sizes for end of life, where capacity has fallen to ~80 % of rated. |
| Design margin (DM) | 1.10 to 1.15 | Covers load growth and uncertainty (IEEE 485 design margin). |
| Peukert exponent (n) | 1.10 to 1.30 lead-acid · ~1.05 lithium | Higher n means a sharper capacity loss at fast discharge. |
| Parallel strings (Np) | ≤ 4 recommended | Beyond ~4 strings current sharing degrades; prefer higher-capacity cells. |
Worked example
8-hour DC reserve for a 2.4 kW inverter load on a 48 V bus
Inputs
- Load power
- P = 2400 W
- Inverter efficiency
- η = 0.92 —
- DC bus voltage
- V_bus = 48 V
- Required autonomy
- t_aut = 8 h
- Chemistry / DoD
- Lead-acid / 0.50 —
- Operating temperature
- T = 10 °C
- Module
- 12 V / 100 Ah
Results
- Load current
- I_load ≈ 54.3 A
- Ah demand
- Q_demand ≈ 435 Ah
- Required nominal capacity
- C_req ≈ 1488 Ah
- Arrangement (series × parallel)
- 4S × 15P —
- Installed capacity
- C_inst = 1500 Ah
- Stored energy
- E ≈ 72.0 kWh
The inverter draws I_load = 2400 / (48 · 0.92) ≈ 54.3 A, so the raw demand is Q_demand = 54.3 · 8 ≈ 435 Ah. Dividing by the 50 % DoD doubles it to ~870 Ah, then the factors stack: aging 1.25, design margin 1.10, the 10 °C temperature correction 1.19 and the Peukert rate factor (10/8)^0.2 ≈ 1.05, giving C_req ≈ 1488 Ah. With 12 V / 100 Ah modules, Ns = round(48/12) = 4 in series reproduces the bus and Np = ceil(1488/100) = 15 strings in parallel reach the capacity, for 1500 Ah installed and ~72 kWh. The 15 parallel strings exceed the 4-string guideline — for this duty a 2 V cell bank or higher-capacity modules would balance better.
Common mistakes
- Sizing the bank to the raw Q_demand and skipping the DoD division — a 50 % DoD bank must be bought at twice the usable Ah, or it dies in half the autonomy.
- Ignoring the temperature correction: at 0–10 °C a lead-acid bank delivers 15–40 % less, so a bank sized at 25 °C falls short in a cold room.
- Omitting the aging factor and sizing to rated capacity — the bank only meets autonomy when new and fails the end-of-life acceptance test.
- Specifying a discharge far faster than the rated C-rate without the Peukert derating, overstating the real usable capacity.
- Forcing many parallel strings (Np > 4) instead of higher-capacity cells, which worsens current sharing and charger balance.
- Choosing a module voltage that does not divide the DC bus, so the series string never reproduces the target bus voltage.
Frequently asked questions
Why divide the demand by the depth of discharge?
The autonomy must be delivered without discharging the bank below its safe DoD. If you only cycle to 50 % DoD, the usable energy is half the nominal capacity, so the nominal Ah to buy is the raw demand divided by 0.5 — twice the usable figure. Sizing to the raw demand would force a 100 % discharge and destroy the bank in a few cycles.
What does the temperature correction do?
Battery capacity falls in the cold. IEEE 485 tabulates a multiplier that grows below 25 °C: for lead-acid it reaches ~1.19 at 10 °C and ~1.40 at 0 °C, meaning you must oversize the bank to still deliver the autonomy at the coldest expected temperature. Lithium is far less sensitive on discharge, but charging below 0 °C is the real constraint.
What is the Peukert / discharge-rate factor?
Usable capacity drops as the discharge rate rises — a battery rated at C10 delivers less if drained in 2 hours. The Peukert relation Kt_rate = (t_ref/t_aut)^(n−1) derates the capacity for fast discharges and gives a bonus for slow ones. It is a conservative estimate for pre-design; for final design confirm against the manufacturer's Kt/Rt curves.
How are the series and parallel counts decided?
The series count Ns reproduces the DC bus voltage: Ns = round(V_bus / V_module). The parallel count Np reaches the required capacity: Np = ceil(C_req / C_module), rounded up so the installed capacity never falls below what is required. The product Ns · Np is the total number of modules.
Why avoid too many parallel strings?
Above about four strings in parallel the current no longer shares evenly between them; small differences in internal resistance and state of charge make some strings work harder and age faster, and a single charger struggles to balance them all. The fix is to use higher-capacity cells (or 2 V cells) so the same capacity needs fewer parallel paths.
Lead-acid or lithium — how does the choice change the sizing?
Lithium (LiFePO4) allows a deeper DoD (80–90 % vs 50 % for cycling lead-acid), a smaller aging factor (~1.10 vs 1.25) and a milder Peukert exponent, so it needs much less nominal capacity for the same autonomy. Its constraint moves to low-temperature charging. Lead-acid is cheaper per Ah but heavier and shorter-lived in deep cycling.
Glossary
- Depth of discharge (DoD)
- Fraction of the nominal capacity removed in a discharge. A 50 % DoD means only half the rated Ah is used per cycle, preserving cycle life.
- Autonomy
- Time the bank must supply the load with no charging source — the design ride-through during an outage.
- Aging factor (AF)
- Multiplier that oversizes the bank so it still meets autonomy at end of life, when capacity has dropped to ~80 % of rated.
- Temperature correction (Kt_temp)
- Multiplier from the IEEE 485 table that accounts for the capacity loss at low temperature; it is 1.0 at 25 °C and grows in the cold.
- Peukert exponent (n)
- Empirical exponent describing how usable capacity falls as discharge current rises; ~1.2 for lead-acid, ~1.05 for lithium.
- String / Ns × Np
- A string is a series chain of cells reaching the bus voltage (Ns cells). Np such strings in parallel reach the required capacity.
- C-rate
- Discharge rate expressed as a fraction of capacity; C10 means full discharge in 10 hours, the usual rating reference for lead-acid.