Lithium-ion Battery Realisation Algorithms (LiiBRA)

Build Status Code Style: Blue ColPrac: Contributor's Guide on Collaborative Practices for Community Packages DOI:10.1016/j.est.2022.105637

Create and Simulate Reduced Order Lithium-Ion Battery Models

LiBRA provides an open-source implementation of realisation algorithms used for generating reduced-order state-space models. This work aims to develop real-time capable physics-informed models for deployment onto embedded hardware. LiiBRA provides capabilities in offline and online model creation, as well as a framework for lithium-ion degradation predictions. For more information on LiiBRA, and the computationally-informed discrete realisation algorithm (CI-DRA), please refer to the publication above.

Install (Julia 1.7 and later)

(v1.7) pkg> add LiiBRA

(Type ] to enter package mode.)

Example Usage

using LiiBRA, Plots

Setup:

Cell = Construct("LG M50")
SList = collect(1.0:-0.25:0.0)
SOC = 0.75
T = 298.15

Realisation:

A,B,C,D = Realise(Cell,SList,T);

HPPC Simulation:

Results = HPPC(Cell,SList,SOC,4.0,-3.0,A,B,C,D);

Plotting Results:

plotly()
plot(Results.t, Results.Cell_V;
     legend=:topright,
     color=:blue,
     bottom_margin=5Plots.mm,
     left_margin = 5Plots.mm,
     right_margin = 15Plots.mm,
     ylabel = "Terminal Voltage (V)",
     xlabel = "Time (s)",
     title="HPPC Voltage",
     label="Voltage",
     size=(1280,720)
    )

plot(Results.t, Results.Ce;
     legend=:topright,
     bottom_margin=5Plots.mm, 
     left_margin = 5Plots.mm, 
     right_margin = 15Plots.mm, 
     ylabel = "Electrolyte Concen. (mol/m³)", 
     xlabel = "Time (s)",
     title="Spacial Electrolyte Concentration",
     label=["Neg. Separator Interface" "Neg. Current Collector" "Pos. Current Collector" "Pos. Separator Interface"], 
     size=(1280,720)
    )

plot(Results.t, Results.Cse_Pos;
     legend=:topright,
     bottom_margin=5Plots.mm, 
     left_margin = 5Plots.mm, 
     right_margin = 15Plots.mm, 
     ylabel = "Concentration (mol/m³)", 
     xlabel = "Time (s)",
     title="Spacial Positive Electrode Concentration",
     label=["Current Collector" "Separator Interface"], 
     size=(1280,720)
    )

plot(Results.t, Results.Cse_Neg;
     legend=:topright,
     bottom_margin=5Plots.mm, 
     left_margin = 5Plots.mm, 
     right_margin = 15Plots.mm, 
     ylabel = "Concentration (mol/m³)", 
     xlabel = "Time [s]", 
     title="Spacial Negative Electrode Concentration",
     label=["Current Collector" "Separator Interface"],
     size=(1280,720)
    )

Bug Tracking

Please report any issues using the Github issue tracker. All feedback is welcome.