- The Bernardi Equation: Where All Heat Comes From
- Joule Heating: The Quadratic Relationship That Matters
- Entropic Heat: Why LFP Runs Cooler
- Contact Resistance Losses: The Hidden Heat Source
- Pack-Level Heat Accumulation
- Thermal Runaway Heat Generation: Orders of Magnitude Above Normal
- Chemistry Comparison for Thermal Management Design
- Key Takeaways
The heat your battery generates is not wasted energy — it is thermodynamic information. How much heat, from which sources, at which rates, tells you exactly whether your thermal management system will keep cells in their operating window or allow them to drift toward runaway.
- Cell heat generation has three sources per the Bernardi equation: Joule heating (I²R), entropic heat (reversible, chemistry-dependent), and overpotential losses. Joule heating dominates at high C-rates and scales with current squared.
- Doubling charge or discharge rate quadruples resistive heat — a thermal management system sized for 1C has roughly 1/9th the capacity needed for 3C operation.
- LFP cathodes have significant endothermic entropic regions that reduce net heat generation versus NMC at identical C-rates, contributing to LFP's viability in air-cooled 2W/3W Indian applications.
- Contact resistance at busbar junctions is a critical but often overlooked pack-level heat source — a degraded 5 mΩ connection at 200 A generates 200 W of localised heat detectable only by thermal imaging.
- Thermal runaway heat release (50,000–100,000 J per NMC cell) is orders of magnitude above normal operation; thermal management prevents runaway onset — once it begins, the engineering objective shifts to containment and propagation delay.
Every lithium-ion battery pack converts some of its stored electrical energy to heat — not because of poor design, but because thermodynamics demands it. The question is not whether heat is generated but how much, from which physical mechanisms, at which locations in the pack, and at what rate relative to your thermal management system's dissipation capacity. Understanding heat generation physics correctly is what separates a thermal management system sized with real margins from one that fails on its first Indian summer.
The Bernardi Equation: Where All Heat Comes From
The foundational model for heat generation in battery cells is the Bernardi equation (1985):
# Bernardi heat generation equation
def heat_generation(I_A: float, R_cell_ohm: float,
T_K: float, dU_dT_V_per_K: float) -> float:
"""
Bernardi (1985) heat generation model:
Q = I^2 * R + I * T * (dU/dT)
Q: heat generated [W]
I: current [A] (positive = discharge)
R: total cell resistance [ohm]
T: cell temperature [K]
dU/dT: entropic heat coefficient [V/K]
Negative dU/dT (common for NMC discharge) -> endothermic entropic term
"""
Q_joule = I_A**2 * R_cell_ohm # irreversible Joule heating (always +ve)
Q_entropy = I_A * T_K * dU_dT_V_per_K # reversible entropic heat (can be -ve)
return Q_joule + Q_entropy
# NMC 21700 at 25 deg C, 3C discharge
I = 15.0 # A (3C for 5 Ah cell)
R = 0.025 # ohm (DC internal resistance)
T = 298.15 # K
dUdT = -0.0003 # V/K (typical NMC at 50% SOC)
Q_total = heat_generation(I, R, T, dUdT)
Q_joule = I**2 * R
Q_entropy = I * T * dUdT
print(f"Joule heating: {Q_joule:.3f} W")
print(f"Entropic heat: {Q_entropy:.3f} W (endothermic)")
print(f"Total heat gen: {Q_total:.3f} W")
print(f"Heat flux: {Q_total / (0.021 * 0.070):.0f} W/m2 (per cell surface area)")Q_total = I²·R + I·T·(dU/dT) + I·(U_OCV - U_terminal)Breaking this down:
Term 1: I²·R (Joule heating / resistive heating) This is the irreversible ohmic dissipation in the cell's internal resistance. It scales with current squared — the dominant term at high rates. The internal resistance R includes: electrolyte ionic resistance, separator resistance, electrode electronic resistance, current collector resistance, and SEI film resistance.
Term 2: I·T·(dU/dT) (Entropic heat) This is the thermodynamically reversible heat exchange during lithium intercalation. The sign depends on the electrode chemistry and SOC: negative dU/dT means the cell absorbs heat on discharge (endothermic); positive dU/dT means it generates additional heat (exothermic). For graphite/LFP cells, the entropic contribution is significant and SOC-dependent — some SOC regions are endothermic during discharge, reducing net heat generation.
Term 3: I·(U_OCV - U_terminal) (Overpotential losses) This captures the additional losses from electrochemical kinetics (Butler-Volmer activation overpotential), mass transport (concentration overpotential), and contact-layer resistances not captured in the static DCIR. At high rates and low temperatures, this term becomes large as mass transport limitations grow.
For practical thermal management design, most engineers use a simplified model: Q ≈ I²·R_internal. This is conservative (overestimates heat at moderate rates) because entropic cooling at some SOC regions and lower overpotential losses than assumed offset the Joule term. The conservative approach is appropriate for thermal management sizing — you want to be sure the system is not undersized. But for accurate simulations of temperature distribution, the full Bernardi equation is required, particularly for LFP where entropic effects are substantial.
The entropic heat coefficient (dU/dT) is the temperature derivative of the open-circuit voltage and encodes the thermodynamic entropy change during lithium intercalation. For LFP cathodes, dU/dT is significantly negative around 50–70% SOC, meaning the intercalation reaction is endothermic during discharge — the cell absorbs heat from its environment, partially offsetting Joule heating. For NMC cathodes, dU/dT is small and relatively flat, so Joule heating dominates. This is why LFP cells run measurably cooler than NMC cells at identical C-rates, and why the full Bernardi equation (not just I²R) is required for accurate thermal simulation of LFP packs.
Joule Heating: The Quadratic Relationship That Matters
The quadratic scaling of Joule heating with current is the most important relationship in battery thermal design. For a 100 Ah NMC prismatic cell with 2 mΩ DCIR:
| Discharge C-Rate | Current (A) | Joule Power (W) | Heat per Hour (Wh) | Temperature rise estimate (°C/hr, adiabatic) |
|---|---|---|---|---|
| 0.25C | 25 | 1.25 | 1.25 | Low |
| 0.5C | 50 | 5 | 5 | ~1 |
| 1C | 100 | 20 | 20 | ~3–5 |
| 2C | 200 | 80 | 80 | ~12–18 |
| 3C | 300 | 180 | 180 | ~25–35 |
| 5C (fast charge peak) | 500 | 500 | 500 | ~70+ (requires active cooling) |
The transition from 1C to 3C does not triple heat generation — it multiplies it by 9 (3²). This is why fast charging requires fundamentally different thermal management than standard charging. A system designed for 1C has 1/9th the thermal capacity needed for 3C charging.
Entropic Heat: Why LFP Runs Cooler
The temperature coefficient of OCV (dU/dT) varies with electrode chemistry and SOC. This has a direct effect on net heat generation:
LFP cathode: Has a significantly negative dU/dT region around 50–70% SOC. During discharge in this SOC window, the entropic term absorbs heat from the cell (the reaction is endothermic). This partially offsets Joule heating. During charging in the same SOC window, the cell releases this entropic heat — but since charging typically runs at lower rates than peak discharge, the total heat is still lower than NMC.
NMC cathode: The dU/dT is smaller and less SOC-dependent. Joule heating dominates at most practical rates.
Practical consequence: At identical C-rates, LFP cells generate measurably less total heat than NMC cells, particularly at moderate SOC levels. This is one reason LFP packs can be run without liquid cooling at lower discharge rates — the combination of thermally stable chemistry and lower net heat generation allows air cooling to be viable for 2W and 3W Indian applications at 1C continuous.
Standard thermal model sizing assumes 25°C ambient and average C-rates. For Indian summer conditions, the correct approach is to use worst-case ambient (45–50°C), maximum operating C-rate (e.g., 2C fast charging), and maximum SOC starting point simultaneously. A 60 kWh NMC pack discharging at 2C in these conditions generates ~3.6 kW of heat; if the pack starts at 35°C (already above ambient), the adiabatic temperature rise without cooling is 18°C, pushing cells past their 45°C maximum operating limit. Cooling capacity must be sized to reject this heat against a 50°C ambient differential, which fundamentally changes coolant flow rates, cold plate area, and compressor sizing compared to a 25°C reference design.
Contact Resistance Losses: The Hidden Heat Source
Cell-level heat generation is only part of the pack thermal story. Current must flow through: cell terminals → compression washers → busbars → intercell connections → HV cables → contactors → main fuses.
Each junction has a contact resistance. For bolted connections on aluminium busbars:
- Clean, properly torqued bolted connection: 0.1–0.5 mΩ
- Slightly oxidised aluminium surface: 1–5 mΩ
- Corroded or under-torqued connection: 5–50+ mΩ
At 200A (2C on a 100 Ah pack), a 5 mΩ contact resistance generates 200A² × 5 mΩ = 200 W of heat at a single connection point. This is a highly localised heat source — a thermal hotspot — that can exceed the maximum temperature of adjacent cells or cause connection material degradation.
Contact resistance degradation is a progressive failure mode in Indian commercial EV packs. Thermal cycling from ambient temperature swings (15°C at night to 45°C in the afternoon) expands and contracts aluminium busbars, loosening bolted connections over time. Vibration on Indian roads accelerates micro-fretting of contact surfaces. A contact that starts at 0.2 mΩ may be at 2–5 mΩ after 50,000 km. At that point, the junction generates 10–25x more heat than designed. Thermal imaging during a load test is the most reliable way to identify degraded contacts — they appear as hotspots that are absent in the new-pack baseline thermal image.
Contact resistance at bolted aluminium busbar connections increases over time due to thermal cycling — daily temperature swings between 15°C overnight and 45°C afternoon cause aluminium to expand and contract, gradually loosening torque. Road vibration accelerates micro-fretting of contact surfaces. A joint that starts at 0.2 mΩ may reach 2–5 mΩ after 50,000 km. At 200 A (2C discharge on a 100 Ah pack), a 5 mΩ contact generates 200 W at a single point — a concentrated thermal hotspot that can exceed local cell temperature limits and eventually cause connection failure or adjacent cell overheating. Periodic thermal imaging under load is the only reliable diagnostic method, as the fault is invisible at rest.
Pack-Level Heat Accumulation
For a 60 kWh NMC pack discharging at 2C (120 kW) with 97% round-trip efficiency:
# Pack thermal resistance network -- temperature rise estimation
def pack_temperature_rise(P_heat_W: float, R_thermal_K_per_W: float,
T_coolant_degC: float = 25.0) -> float:
"""
Lumped thermal model: delta_T = P * R_th
Returns maximum cell temperature in pack.
"""
delta_T = P_heat_W * R_thermal_K_per_W
return T_coolant_degC + delta_T
# Thermal resistance breakdown for a 20-cell module
R_cell_to_cooling = {
"Cell core to surface": 0.15, # K/W (NMC 21700)
"Cell surface to TIM": 0.08, # K/W (thermal interface material)
"TIM to cold plate": 0.05, # K/W (2 W/m*K TIM, 1mm thick)
"Cold plate to coolant": 0.03, # K/W (liquid cooled)
}
R_total = sum(R_cell_to_cooling.values())
P_per_cell = heat_generation(15.0, 0.025, 298.15, -0.0003)
T_max = pack_temperature_rise(P_per_cell, R_total)
print(f"
Thermal resistance breakdown:")
for layer, R in R_cell_to_cooling.items():
print(f" {layer:<35} {R:.2f} K/W")
print(f"
Total R_th: {R_total:.2f} K/W")
print(f"Heat/cell: {P_per_cell:.2f} W at 3C")
print(f"T_max cell: {T_max:.1f} deg C (coolant at 25 deg C)")- Total heat generated during discharge: 60 kWh × 3% = 1.8 kWh = 6,480 kJ
- If discharged in 30 minutes: average heat generation rate = 6.48 MJ / 1800 s = 3,600 W = 3.6 kW
- If pack mass is 400 kg with average specific heat ~900 J/(kg·°C): adiabatic temperature rise = 6,480,000 / (400 × 900) = 18°C
This 18°C adiabatic temperature rise is the minimum cooling system must remove to maintain the same temperature as it started. With 45°C Indian ambient, a pack that starts at 35°C (already 10°C above ambient) would reach 53°C in this scenario without cooling — above the NMC maximum operating temperature.
The 2C/30-minute scenario is not a corner case for Indian commercial EVs — it represents a typical fleet operator's charging session. Electric bus operators running 2C fast charging at 45°C ambient without properly sized liquid cooling systems are operating their packs in a regime where the heat generation rate exceeds the dissipation capacity, producing exactly the progressive thermal damage that appears as capacity fade and early cell failure at 2–3 years rather than the expected 5–7 years. Proper thermal management sizing requires the worst-case ambient × maximum C-rate × maximum SOC starting point — not average conditions.
Thermal Runaway Heat Generation: Orders of Magnitude Above Normal
Normal heat generation during operation is 2–5% of the energy throughput. Thermal runaway heat generation is fundamentally different:
- SEI decomposition: ~75–200 J/g of cell
- Electrolyte oxidation by delithiated NMC cathode: ~500–1,500 J/g of cell
- Aluminium current collector oxidation by electrolyte: ~50–100 J/g
- Lithium reaction with electrolyte (at full delithiation): ~2,000+ J/g
A single 100 Ah NMC 811 cell weighing ~0.8 kg can release 50,000–100,000 J during thermal runaway — equivalent to 14–28 Wh in a few seconds to minutes. For a 200-cell pack, this is 2.8–5.6 MWh of thermal energy if all cells propagate — the equivalent of a small petrol fire.
Thermal management systems are not designed to manage thermal runaway heat — the heat release rate far exceeds any practical cooling system's capacity. Thermal management's role is to prevent cells from reaching thermal runaway onset temperature. Once runaway begins, the engineering objective shifts to containment and propagation delay.
Chemistry Comparison for Thermal Management Design
| Property | LFP | NMC 622 | NMC 811 |
|---|---|---|---|
| Joule heating at 1C (per Wh) | ~20–25 mW/Wh | ~18–22 mW/Wh | ~17–22 mW/Wh |
| Entropic heat character | Significant endothermic regions | Small dU/dT | Small dU/dT |
| Net heat generation at 1C relative | Lower | Moderate | Moderate |
| TR onset temperature | ~270–310°C | ~200–220°C | ~170–200°C |
| TR heat release | ~300–500 J/g | ~600–900 J/g | ~900–1,500 J/g |
| Max continuous operating temperature | 55°C | 45°C | 40°C |
| Air cooling viability (India, 2W/3W) | Yes, up to ~1C | Marginal | Not recommended |
| Liquid cooling requirement (4W, fast charge) | At 2C+ | At 1C+ | At 1C+ |
# Chemistry comparison: heat generation at 1C and 3C
import numpy as np
chemistries = {
# R_dc(ohm) dU/dT(V/K) capacity(Ah) name
"NMC 811": (0.022, -0.00030, 5.0),
"NMC 622": (0.028, -0.00020, 4.5),
"LFP": (0.035, 0.00010, 3.0), # LFP: endothermic entropic at discharge -> positive
"LCO": (0.030, -0.00025, 2.8),
}
T_K = 298.15
print(f"{'Chemistry':<12} {'Q @ 1C (W)':>12} {'Q @ 3C (W)':>12} {'Entropic direction':>20}")
print("-" * 58)
for chem, (R, dUdT, cap_Ah) in chemistries.items():
I_1C = cap_Ah * 1.0
I_3C = cap_Ah * 3.0
Q_1C = heat_generation(I_1C, R, T_K, dUdT)
Q_3C = heat_generation(I_3C, R, T_K, dUdT)
direction = "endothermic" if dUdT < 0 else "exothermic"
print(f"{chem:<12} {Q_1C:>12.2f} {Q_3C:>12.2f} {direction:>20}")Key Takeaways
- Cell heat generation has three sources: Joule heating (I²R, dominant at high rates), entropic heat (thermodynamically reversible, chemistry-dependent), and overpotential losses. Joule heating scales with current squared — doubling C-rate quadruples resistive heat.
- LFP cathodes have significant endothermic entropic regions that reduce net heat generation compared to NMC at identical C-rates, contributing to LFP's viability for air-cooled 2W/3W Indian applications at moderate discharge rates.
- Contact resistance at busbar connections is a major pack-level heat source often omitted from simplified thermal models. A 5 mΩ degraded connection at 200 A generates 200 W of localised heat — detectable only by thermal imaging under load.
- At 2C discharge, a 60 kWh NMC pack generates ~3.6 kW of heat. With 45°C Indian ambient and a pack starting at 35°C, zero cooling yields an 18°C adiabatic temperature rise — exceeding NMC's maximum operating temperature. Thermal management must be sized for worst-case ambient × maximum C-rate, not average conditions.
- Thermal runaway heat generation (50,000–100,000 J per NMC cell) cannot be managed by any practical cooling system. Thermal management prevents runaway onset; once runaway begins, the engineering objective shifts to containment and propagation delay.
Frequently Asked Questions
What is the Bernardi heat generation equation and what does each term mean?
Why does heat generation increase so dramatically at high C-rates?
What is entropic heat and why is it different from Joule heating?
Where does heat generate in a battery pack beyond the cells themselves?
How does Indian summer climate affect battery heat generation and thermal management sizing?
References
- Bernardi, D., Pawlikowski, E. and Newman, J. — A general energy balance for battery systems, Journal of the Electrochemical Society, 132(1), 1985
- Pesaran, A.A. — Battery thermal models for hybrid vehicle simulations, Journal of Power Sources, 110(2), 2002
- Rao, L. and Newman, J. — Heat-generation rate and general energy balance for insertion battery systems, Journal of the Electrochemical Society, 144(8), 1997
- Bandhauer, T.M., Garimella, S. and Fuller, T.F. — A critical review of thermal issues in lithium-ion batteries, Journal of the Electrochemical Society, 158(3), 2011