BotB 2: Active materials & electrodes

We're finally back with our "back of the battery" calculator!

We're back with our "back of the battery" BotB calculator series. If you’re enjoying our build-along battery model, shoot us a subscribe below. For inquiries, reach out:

Didn’t think we forgot about BotB did you? We’ve finally got more to share with our build-along battery model series, and we’re gon’ give it to ya all over the next month or so.

At the end of the BotB series, we’ll be able to see how different cathode/anode chemistries, electrode designs, and cell formats (cylindrical vs pouch) ultimately affect the energy density of a battery.

In the first episode of our BotB series, we introduced the calculation of theoretical capacities of different electrode materials based on their molar masses:

Check out the first BotB

Here’s the rest of the plan for the BotB series

  1. Theoretical capacities

  2. Active materials & electrode composites

  3. Cell sandwich layers

  4. Winding a cylindrical cell

  5. Stacking a pouch cell

  6. A couple of case studies

We also covered some existing cell models, and since then, Matt Lacey has shared his very useful CellModel with us all:

along with some very interesting case studies such as this one pairing LFP and NMC with different cathodes:

For those interested in batteries, a model such as Matt's flexible CellModel in Julia can be incredibly useful when doing some quick battery maths. We'll use BotB to deconstruct the properties and makeup of each component of a cell before building up our model in Python. Instead of using Colab we'll assemble the backend of the model and add an interactive UI for it very soon, so make sure you support Intercalation Station by hitting that subscribe!

BotB 2: Active materials & electrode composites

You can directly work through this episode of BotB by downloading the notebook with code for the model here:

See the code


  • A) Comparing practical and theoretical capacities of active materials

  • B) Active material average discharge voltages

  • C) Visualizing voltage and capacity together

  • D) Defining an active material

  • E) Defining an electrode composite

A) Theoretical vs practical capacities

While theoretical capacities for lithium can be calculated from the molar mass alone, in reality, not all of the lithium can be extracted without damaging the material, and so the true reversible capacity achievable is considerably lower.

This means that when a battery is considered 100% charged or 100% discharged, there is always some lithium cushioning within the electrodes. Remembering that a cathode is discharged as lithium is added to the structure, Chen & authors calculated that for the NMC811 battery they studied, 27% of the Li remained in the cathode when the battery was fully charged, and 91% of the Li was in the cathode when the battery hit 0% state of charge. In terms of chemical stoichiometry, the compositions Li0.27(Ni0.8Mn0.1Co0.1)O2 and Li0.91(Ni0.8Mn0.1Co0.1)O2 corresponds with 60-70% of the actual theoretical capacity.

Active materials in this model can have these properties:

  • Reversible specific capacity [mAh/g]

  • Theoretical specific capacity [mAh/g]

  • Average voltage [V] (Explained in the next section)

  • Crystallographic density [g/cm3] (density of a single crystal of material)

We’ve filled a small database with some common positive and negative electrode chemistries and their practical capacities. We can use this information to compare various properties:

For example, here is how theoretical and practical capacities compare for cathode materials on this list:

B) Active material voltages

Average voltage also matters because the cell voltage is given by the difference in potential between the cathode and anode voltage. This voltage is used to calculate how much energy is provided and not just charge in a battery. We use the average positive and negative electrode voltage to simplify the dynamics of voltage vs state of charge.

The balancing between positive and negative electrodes is quite nuanced, but from the figure below you can see how the NMC voltage (red) and graphite voltage (blue) give the full cell voltage curve (black)

We can look at the anodes below, where we want lower voltages so that the overall cell voltage is higher:

C) Visualizing capacity and voltage together

For cathodes, we want to choose one towards the top right of the plot to maximize cell energy. For anodes, we want to choose one towards the bottom right to maximize cell energy. Other considerations come into play when actually pairing active materials for a cell, like rate capability and safety etc

From the above charts, we can see that the NMC type cathodes and silicon anodes both have much lower reversible capacities compared to theory.

Active materials & electrode composites

For our actual cell model, our components will come together following the same structure used by Matt Lacey, where (+/-) denotes the positive or negative electrode:

As positive and negative electrodes both have a capacity, the limiting capacity is the overall capacity of the cell. The cell voltage also comes from the potential difference between the positive and negative active material average voltages. To make assembling the cell components easier, we will make each component into its own structure. 

The active material refers to an actual crystal of the chemistry that is storing the lithium. Active materials have the following properties:

  • Active material

    • name

    • specific capacity [mAh/g]

    • average voltage [V]

    • crystallographic density [g/cm3]

The electrode composite is the actual powdered coating of active materials. Because it is a powdered coating it has porosity and non-active binders etc that reduce the overall density and capacity of the actual coating. The electrode composite has these properties:

  • Electrode composite

    • active material

    • thickness [um]

    • areal capacity [mAh/cm2]

    • active loading [g/cm2]

    • active fraction

    • porosity

    • composite_density [g/cm3]

Adrian Yao's substack post on The Li(ttle) ion that could has a great sketch that we can highlight to see what is considered an "active material" and what is the overall electrode "composite":

Here are some examples on how these properties convert between each other:

  • Active particles are coated layers with a particular porosity, so the coating composite density [g/cm3] is the crystal density [g/cm3] × porosity.

  • The thickness [cm] of a coating can also be calculated from the mass of the coating areal loading [g/cm2] ÷ composite density [g/cm3]

  • The electrode areal capacity [mAh/cm2] can also be given by the pure active specific capacity [mAh/g] × electrode thickness [cm] × active crystal density [g/cm3] × (1 – porosity)

D) Defining an active material

The make_active() function allows us to assign the properties for the active material. It also uses the pint python package which lets us embed units and the uncertainties package lets us propagate standard deviations.

Here’s how an NCA cathode would be defined, along with how it is displayed:

#Make active struct
NCA = make_active(name='NCA',

#See active struct

E) Defining the electrode composite

The make_composite() function assigns the properties for the electrode composite.  make_composite() also lets us "fill the gaps", for example, if we know the areal capacity arealcap and composite density, the other properties can automatically be calculated:

#Make NCA composite
composite = make_composite(active=NCA, 
                           arealcap = (3.5*unit.mA***2), 
                           density = (3.3*unit.g/**3).plus_minus(0.1),

Here we can see that a 3.5 mAh/cm2 capacity and 3.3 g/cm3 density coating of NCA requires a coating porosity of approximately 30% and results in an electrode coating that is 50 um thick.

If we fill make_composite() with the coating thickness thick, active fraction activefrac, and mass loading arealload, the other properties can automatically be calculated:

#Make NCA composite
composite = make_composite(active=NCA, 
                           thick = (50*, 
                           activefrac = 0.95,
                           arealload = (0.017*unit.g/**2),

if we fill make_composite() with properties that cannot fill the gaps or clash, an error will be thrown.


  • By playing around with the make_composite() function we can develop some intuition in how electrode composite properties relate to each other.

  • For example, porosity is related to the ratio between crystal density and coating density.

  • Next time, we'll construct the rest of the components like the separator, current collectors, and electrolyte that make up the rest of the cell sandwich.

🌞 Thanks for reading!

📧 For tips, feedback, or inquiries, please reach out!

🐦 Follow us on Twitter and LinkedIn

About the writers: Andrew is a PhD researcher at the University of Oxford (@ndrewwang). Nicholas is a Business Manager at UCL Business and Venture Fellow with Berkeley SkyDeck (@nicholasyiu). Ethan is a battery scientist in the Jeff Dahn Research Group (@ethandalter).