Simple Anode vs Step Charge
In this example we compare fast-charging degradation behaviour for the Molicel P45B cell.
Note
This is a showcase example for demonstration only. We are happy to discuss how we develop and supply degradation models for your specific cell and use case. Contact us at hello@breathebatteries.com.
Objective
Compare two fast-charging approaches under ageing:
- Step profile charging
- Simple anode control (anode potential constrained)
This example compares these KPIs across ageing:
- Charge time
- Time to 80% SoC
- State of health (SoH)
- Maximum temperature
- Maximum power
- Energy added
- Minimum anode potential
Workflow
1. Configure base test settings
clear all;
bdclose all;
clc;
cRate = 4.5;
currDischarge = cRate;
socMax = 1.0;
socMin = 0.0;
numCyclesBtwnRPTs = 50;
numRPTs = 15;
totalCycles = (numRPTs - 1) * numCyclesBtwnRPTs;
2. Load model parameters
userProfile = getenv('USERPROFILE');
filePath = fullfile(userProfile, ...
'Breathe Battery Technologies', ...
'Breathe Model Projects - Documents', ...
'Proj_BM_Mono', ...
'07_Breathe_Model_Data', ...
'03_PBMDegv1', ...
'02_Parameters', ...
'MoliP45_PBMDegv1_GD_Format');
load(filePath);
3. Run the step-charge benchmark
maxCrateStepCharge = 4.0;
currChargeStepExp = maxCrateStepCharge * cRate;
resultsStepChargeSim = Run_StepCharge_Experiment( ...
maxChargeCurrent=currChargeStepExp, ...
dischargeCurrent=currDischarge, ...
socMax=socMax, socMin=socMin, ...
numRPTs=numRPTs, numCyclesBtwnRPTs=numCyclesBtwnRPTs);
4. Run simple-anode cases
currMinSimpleAnode = 1;
resultsSimpleAnodeSim_Case1 = Run_SimpleAnode_Experiment( ...
currMaxSimpleAnode=3.75*cRate, ...
currMinSimpleAnode=currMinSimpleAnode, ...
voltAnodeSetpointSimpleAnode=0.04, ...
dischargeCurrent=currDischarge, ...
socMax=socMax, socMin=socMin, ...
numRPTs=numRPTs, numCyclesBtwnRPTs=numCyclesBtwnRPTs);
resultsSimpleAnodeSim_Case2 = Run_SimpleAnode_Experiment( ...
currMaxSimpleAnode=3.75*4.5, ...
currMinSimpleAnode=currMinSimpleAnode, ...
voltAnodeSetpointSimpleAnode=0.05, ...
dischargeCurrent=currDischarge, ...
socMax=socMax, socMin=socMin, ...
numRPTs=numRPTs, numCyclesBtwnRPTs=numCyclesBtwnRPTs);
resultsSimpleAnodeSim_Case3 = Run_SimpleAnode_Experiment( ...
currMaxSimpleAnode=4.2*4.5, ...
currMinSimpleAnode=currMinSimpleAnode, ...
voltAnodeSetpointSimpleAnode=0.05, ...
dischargeCurrent=currDischarge, ...
socMax=socMax, socMin=socMin, ...
numRPTs=numRPTs, numCyclesBtwnRPTs=numCyclesBtwnRPTs);
5. Generate comparison outputs
resultsCell = { ...
resultsStepChargeSim, ...
resultsSimpleAnodeSim_Case1, ...
resultsSimpleAnodeSim_Case2, ...
resultsSimpleAnodeSim_Case3};
namesArray = { ...
'Step Charge 3.75C', ...
'voltAnode 3.75C-40mV', ...
'voltAnode 3.75C-50mV', ...
'voltAnode 4.2C-50mV'};
figs = Plot_Results_Comparison(resultsCell, namesArray);
Charge-segment snapshots
Step charge
| Early interval (RPT 1) | Late interval (RPT 15) |
|---|---|
Simple anode case 1 (3.75C, 40 mV)
| Early interval (RPT 1) | Late interval (RPT 15) |
|---|---|
Simple anode case 2 (3.75C, 50 mV)
| Early interval (RPT 1) | Late interval (RPT 15) |
|---|---|
Simple anode case 3 (4.2C, 50 mV)
| Early interval (RPT 1) | Late interval (RPT 15) |
|---|---|
KPI comparison plots
Charge time
Time to 80% SoC
State of health
Maximum temperature
Maximum power
Energy added
Minimum anode potential
Version 73723266