Main Content

Design Battery Module for Automotive Requirements

Since R2024a

This example shows how to design a battery module and a cooling plate from a battery cell test data. Modular battery units are a good solution to decrease the cost of automotive battery packs. Battery modules can help meet requirements of different customers in similar industry domains. The battery cells are typically parameterized using pulse discharge and charge data. This example uses the high pulse power characterization (HPPC) test [1] to estimate the battery ohmic resistance and other dynamic resistance values.

An A123 cell with Lithium-Ferrous-Phosphate (LFP) chemistry was tested in a test chamber at five different temperatures: 0oC, 10oC, 25oC, 35oC, and 45oC [2]. During the test, the temperature inside the chamber was maintained uniform. To learn more about the test procedure and how to parameterize the battery cell, see the Characterize Battery Cell for Electric Vehicles example.

Parameterize Battery Cell

Specify the HPPC test temperatures, in degree Celsius.

T_vec = [0 10 25 35 45];
cellParameters = cell(1,length(T_vec));

For each test temperature value, run the getInputParamLFPbattery function to obtain all the HPPC parameters and plot the test data. To enable plots, you must set the boolean flag of the function to true. Use the batteryParametersLUT function to estimate the battery parameters from the HPPC test data.

for valT = 1:length(T_vec)
    [battery, iniEstimate] = getInputParamLFPbattery(T_vec(1,valT),true);
    result = batt_BatteryCellCharacterization.batteryParametersLUT(...
             "fminsearch", false);
    cellParameters{1,valT} = exportResultsForLib(result,0:1e-3:1,false);

*** Number of discharge pulses =9
*** Number of charge pulses    =9
*** Number of SOC sweep pulses =8

*** Number of discharge pulses =9
*** Number of charge pulses    =9
*** Number of SOC sweep pulses =8

*** Number of discharge pulses =9
*** Number of charge pulses    =9
*** Number of SOC sweep pulses =8

*** Number of discharge pulses =9
*** Number of charge pulses    =9
*** Number of SOC sweep pulses =8

*** Number of discharge pulses =9
*** Number of charge pulses    =9
*** Number of SOC sweep pulses =8

The cellModel workspace variable stores all the required data to parameterize the Battery (Table-Based) library block in Simscape™ Battery™.

cellModel = getBatteryTableBasedParams(T_vec,cellParameters,"long",...
            [iniEstimate.numRCshort iniEstimate.numRClong]);

The Battery (Table-Based) library parameters stored in cellModel are:

  • Vector of temperature values

  • Vector of state-of-charge values

  • Open-circuit voltage

  • Terminal resistance during charging

  • Terminal resistance during discharging

  • Cell capacity

  • Cell dynamics — Polarization resistance and time constants for all the RC pairs

You can specify other relevant battery parameters within the cellModel struct.

cellModel.Dim.Height = 0.195;    % Battery cell height
cellModel.Dim.Width = 0.150;     % Battery cell width
cellModel.Dim.Thickness = 0.020; % Battery cell thickness
cellModel.Dim.Mass = 0.4;        % Battery cell mass
cellModel.Dim.Cp = 800;          % Battery cell heat capacity
clearvars -except cellModel

Build Battery Modules

The battery cells produce heat when charged or discharged. You must attach a cooling plate to remove this heat and keep the battery within reasonable temperatures during its operation. This table shows the key design requirements and how to specify the battery module parameters to meet these requirements:


Model Parameters

Operate the battery module under a 100A constant current fast-charge for 20 minutes.

The HPPC pulse magnitude is 40A. For a current of 100A, you must connect at least 3 cells in parallel.

numCells_p = 3;

The maximum rise in cell temperature must be lower than or equal to 10 degree Celsius. This prevents cell overheating. Set this requirement as low as possible.

requirements.MaxCellTempInc = 10;

The maximum temperature gradient within a module must not exceed 5 degree Celsius. The cells must degrade uniformly. Set this requirements as low as possible.

requirements.MaxModuleTgrad = 5;

The pumping requirement for the coolant must be low and less than 20kPa for the module.

requirements.MaxPressureDrop = 20000;

The battery module comprises five series-connected units of three parallel-connected cells each, for a total of 15 cells.

% Specify the number of cells in the parallel set.
numCells_p = 3;
% Specify the number of series connected parallel set.
numCells_s = 5;
% Specify the maximum acceptable temperature gradient in the battery module.
requirements.MaxModuleTgrad  = 5;
% Specify the maximum acceptable temperature rise within the battery module.
requirements.MaxCellTempInc  = 10;
% Specify the maximum acceptable pressure drop for the module cooling system.
requirements.MaxPressureDrop = 20000;

Load a pre-generated battery module library.

batteryLFP = load('BattDetailedModuleLFP.mat');

To update the pre-generated battery library block, use the buildBatteryModule function. At the MATLAB® Command Window, enter:

% If you already have BattDetailedModuleLFP library folder in your working directory,
% then you must delete it before running this code.
[~,moduleDetailed] = buildBatteryModule(numCells_s,numCells_p,cellModel);
moduleLFP = load('BattDetailedModuleLFP.mat');

Plot the battery module.

battDetailedPlot = batteryChart(batteryLFP.Detailed);
title(battDetailedPlot,"Detailed Battery Model");

Initialize the parameters for the detailed battery module block.


Parameterize Battery Module

Set the module parameters based on the cell parameters defined in the previous section.


Set the thermal mass variation of the battery cell by specifying the thermal_massCellPercentDeviation value.

thermalMassPercentDev = load("BattDetailedModuleCellVar.mat");
Detailed.thermal_massCellPercentDeviation = thermalMassPercentDev.cellToCell;

Design Cooling System for Module

The battery module in this example employs a Parallel Channels cooling plate. Set the parameters for parallel channel cooling plate.


Set the operating parameters.

chargingParams.SOC = 0.05;  % Initial battery state of charge
chargingParams.T = 300;     % Initial battery temperature, K
chargingParams.I = 100;     % Charging current, A
chargingParams.time = 1200; % Charging time, s
chargingParams.CoolT = 300; % Coolant inlet temperature, K
chargingParams.Flow = 3;    % Flowrate, lpm

You must run an experimental design to estimate the desired parameters for the cooling plate. Set the options for the number of cooling channels, the channel diameter, and the applicable coolant flow-rate. Define the design parameters for the parallel channel cooling plate.

designParams.NumChannelOptions = [2 3 4];
designParams.FlowrateOptions = [1 3 5];
designParams.ChannelDiaOptions = [1.5e-3 2e-3 2.5e-3];

To run a full factorial of design options, at the MATLAB Command Window, enter:

simResults = getBattModuleThermalDesign(designParams, chargingParams, thermalMassPercentDev.cellToCell);
save battModuleLFPsimResults.mat simResults

Load the results of the simulation:


Select the simulations that meet the requirements.

selectData = simResults.("Max. Gradient Tcell") <= requirements.MaxModuleTgrad &...
             simResults.("Pressure Drop") <= requirements.MaxPressureDrop &...
             simResults.("Max. Tcell") - chargingParams.T <= requirements.MaxCellTempInc;

goodDesignPoints = simResults(selectData,:)
goodDesignPoints=2×6 table
    Max. Gradient Tcell    Max. Tcell    Pressure Drop    Num. Channels    Flowrate    Channel Diameter
    ___________________    __________    _____________    _____________    ________    ________________

           1.5143            309.71          18024              2             1             0.002      
          0.39745            309.07          13021              3             1             0.002      

Select the final design based on the lowest value of cell temperature rise.

[~,bestOptionID] = min(goodDesignPoints.("Max. Tcell"));
finalDesign = goodDesignPoints(bestOptionID,:)
finalDesign=1×6 table
    Max. Gradient Tcell    Max. Tcell    Pressure Drop    Num. Channels    Flowrate    Channel Diameter
    ___________________    __________    _____________    _____________    ________    ________________

          0.39745            309.07          13021              3             1             0.002      

disp(strcat('Select coolant plate with #Channels=',num2str(finalDesign.("Num. Channels")),', ChannelDia=',num2str(finalDesign.("Channel Diameter")*1000),'mm.'));
Select coolant plate with #Channels=3, ChannelDia=2mm.

This parameterized cooling plate is well suited according to the requirements.


  1. Christophersen, Jon P. Battery Test Manual For Electric Vehicles, Revision 3. United States: N. p., 2015. Web. doi:10.2172/1186745

  2. The experimental data used in this work was provided by Indian Institute of Technology (IIT) Kharagpur, India. We would like to acknowledge the contributions of Prof. Anandaroop Bhattacharya (Mechanical Engineering) and Prof. Subhasish Basu Majumder (Materials Science Centre).

See Also