Battery Model From Experimental Data

by Darrell
11 October 2016


Many have observed that as a rechargeable battery is discharged the voltage that it supplies drops. Conversely, when it it recharged, the output voltage goes back up.  Wouldn't it be nice if you could measure this voltage, as a function of the state-of-charge (SOC), and use it to quickly make an accurate model for the battery?  This blog will show you how to do just this with PartQuest Explore.  This blog includes video excerpts from a presentation at Oregon Institute of Technology (, October 2016.

Graphical Modeling

Very Simple Battery Model

Watch this video to see how to graphically create a very simple battery model:


Hierarchical Encapsulation of a Very Simple Battery Model

Watch this video to see how to encapsulate the simple battery model from above into a hierarchical block and use it in a test circuit:


Battery Model With State-Of-Charge (SOC)

This is a graphical representation of the battery model that we will use for this example.  The SOC_to_VOC block accepts a table of experimental data to model the open circuit voltage as a function of state-of-charge.



This circuit is intended only for use in constructing a hierarchical model, not for directly simulating.  Notice that there is no load applied to the battery.  Notice also that there is no ground symbol on the schematic.  The Create New Component --> From Schematic tool, followed by hand editing of the model text, is used to create the battery model used in the following examples.  

You can start with this model/circuit if you want to modify the underlying model.  Or you can simply use the equivalent model found in the circuits shown below.

How Does This Model Work?

Watch this video to learn more about how this model works:


Editing the Model

Once you have created the new VHDL-AMS model from a schematic, it is typically desirable to modify it slightly for your own use.  The primary modifications that you will want to do are to move terminals from internal to external, and to expose certain model parameters as external as well.  

In this example, we want to move the electrical terminals p and m to the "port" map section, as well as defining several input parameters in the "generic" map section.  The generic values are then constants that can be passed hierarchically to model instances found in the model architecture.

entity Battery_VOC_f_SOC is
    generic ( 
      Capacity : real := 1.0; -- Cell capacity (per cell) [Amphours]
      NCELLS: positive := 1; -- Number of cells in battery stack [no units]
      SOC_init : real := 1.0; -- Initial state of charge, between 0 and 1 [no units]
      R :  resistance := 0.1; -- Internal resistance, between VOC and the positive terminal [Ohms]
      VOC_table : real_vector ;  -- Dependent data output value vector [V]
      SOC_table  : real_vector -- Independent data input value vector [No Units]
    port ( 
        terminal p: electrical;  -- plus battery terminal
        terminal m: electrical  -- minus battery terminal
end entity Battery_VOC_f_SOC;

Edit the Symbol

You also have the opportunity to edit the resulting model symbol by clicking on the "edit" button on the generated symbol, in the component editor tool.  When you click on this symbol, you will enter the symbol editor.  Simply drag the pins around where you want them, add text, add images, and save.  The resulting symbol/model combination will now show up in your "My Components" palette when you edit a circuit.

Charge / Discharge Example

This section shows the battery model and test circuit for exercising the hierarchical model (created hierarchically from the circuit above) by starting at a SOC of 0.0, charging, then discharging.  The model accepts the same experimental data to model the open circuit voltage as a function of state-of-charge, as above.  This experimental data is reflected in the nonlinear voltage output of the battery, as plotted.


This is a time-domain simulation

Right-click on the battery model and select “Add favorite” to add it to your favorites category, so that you can use it in your own circuits.

Electrochemical Impedance Spectroscopy (EIS) Example

This section shows the battery model and test circuit for simulating Electrochemical Impedance Spectroscopy.  Choose a desired SOC and determine the corresponding small signal impedance, as a function of frequency.  A simple RC circuit is also provided, to show the equivalent circuit for a given SOC (the equivalent capacitance and initial voltage of the capacitor need to be changed manually to make achieve equivalence).

Overview of EIS


EIS Test Circuit in PartQuest Explore


This is a frequency domain simulation.  Since the AC source is a current source with a magnitude of ‘1.0’, the resulting voltage is equal to the impedance.

This is MUCH FASTER than running a real EIS analysis.

More Advanced Battery Model



Circuit Example

Further Reading


Advanced Modeling: 

Politechnika Warszawska, Instytut Automatyki i Robotyki (1), Instytut Sterowania i Elektroniki Przemysłowej (2)
Power converter-based electrochemical battery emulator

PartQuest Explore Blog: Process To Modeling A Lithium Cobalt Oxide Battery Cell, by Irah Comia