Main Content

Thermal Analysis for New and Aged Battery Packs

This example shows how to evaluate a new and end-of-life (EOL) lithium-ion battery pack. With cell usage and time, the capacity of the cell degrades and the resistance increases due to the formation of a solid-electrolyte-interface (SEI), a passivation layer over the anode surface. You must design battery pack components to meet warranty criteria at EOL time from power, performance, and packaging perspectives. This example analyzes a 400V battery pack for EOL thermal performance based on its packaging.

Build Battery Pack

To build the battery pack used in this example, follow the steps in the Build Model of Battery Pack with Cell Aging example and generate the batt_PackCellAgingModelLib SLX file in your working directory. This SLX file contains the battery pack model for cell aging applications. This battery pack comprises five module assemblies. Each module assembly comprises five modules. Each battery module has 12 cells. The EOL for the battery pack is equal to 1000 cycles.

batt_PackCellAgingModel_pic.png

A Pipe block cools the battery pack modules and the Battery Coolant Control block controls the coolant flowrate. To analyze the worst case scenario, the circuit receives a constant 2C-rate current of 54 A for 30 minutes.

Define Parameters and Run Simulations

Initialize the battery parameters. At the MATLAB Command Window, enter:

run("batt_PackCellAgingModel_param.m");

Simulate a new battery pack, for a constant discharging current at 2C rate.

batt_PackCellAgingModelData = sim("batt_PackCellAgingModelSim.slx");
% Post-process data
newPack_Temp = batt_PackCellAgingModelData.batt_PackCellAgingResults.get(3).Values.Data;
newPack_Time = batt_PackCellAgingModelData.batt_PackCellAgingResults.get(3).Values.Time;
newPack_Volt = batt_PackCellAgingModelData.batt_PackCellAgingResults.get(2).Values.Data;
newPack_Curr = batt_PackCellAgingModelData.batt_PackCellAgingResults.get(1).Values.Data;
newPack_Flow = batt_PackCellAgingModelData.batt_PackCellAgingResults.get(4).Values.Data;

Simulate an EOL battery pack. Every 100 cycles, the Terminal Resistance, R0 parameter of the cell decreases by 5%. In each module, set the Change in terminal resistance after N discharge cycles (%) parameter to 5 and the Number of discharge cycles, N parameter to 100.

ModuleType1.N0 = 100;
ParallelAssemblyType1.N0 = 100;
ModuleType1.dR0 = 5;
ParallelAssemblyType1.dR0 = 5;

The thermal resistance of the battery pack, between the cells and the cooling system, degrades with time. The value of the thermal resistance increases from 1.2 for the new pack to 5 for the aged pack.

ModuleType1.CoolantThermalPathResistance = 5;
ParallelAssemblyType1.CoolantThermalPathResistance = 5;

Initialize the battery pack close to the EOL cycle (999).

end_of_life_cycles = 999;
run("batt_PackCellAgingModel_param_EOL.m")

Simulate the EOL battery pack for a constant discharging current at 2C rate.

batt_PackCellAgingModelData = sim("batt_PackCellAgingModelSim.slx");
% Post-process data
agedPack_Temp = batt_PackCellAgingModelData.batt_PackCellAgingResults.get(3).Values.Data;
agedPack_Time = batt_PackCellAgingModelData.batt_PackCellAgingResults.get(3).Values.Time;
agedPack_Volt = batt_PackCellAgingModelData.batt_PackCellAgingResults.get(2).Values.Data;
agedPack_Curr = batt_PackCellAgingModelData.batt_PackCellAgingResults.get(1).Values.Data;
agedPack_Flow = batt_PackCellAgingModelData.batt_PackCellAgingResults.get(4).Values.Data;

Analyze Results

Load the batt_PackWithCellBalancingResults MAT file and run the batt_PackWithCellBalancingPlot M file. At the MATLAB Command Window, enter:

max_temp_diff = round(max(squeeze(agedPack_Temp))-max(squeeze(newPack_Temp)),1);
disp(['Battery EOL max. cell temperature is ~ ',num2str(max_temp_diff),...
    ' higher compared to max. cell temperature in a new pack'])
Battery EOL max. cell temperature is ~ 7.1 higher compared to max. cell temperature in a new pack
figure(1)
plot(agedPack_Time,squeeze(agedPack_Volt));hold on;
plot(newPack_Time,squeeze(newPack_Volt));hold off;
legend('aged','new','Location','northeast')
ylabel('Voltage (V)')
xlabel('Time (s)')

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent aged, new.

For the aged cells, the maximum cell temperature is almost 7 degree Celsius higher than the maximum cell temperature of a new pack. The voltage of the aged pack is slightly lower than the voltage of the new pack. These values show that the battery pack design is thermally safe from EOL perspective.

figure(2)
plot(agedPack_Time,squeeze(agedPack_Flow));hold on;
plot(newPack_Time,squeeze(newPack_Flow));hold off;
legend('aged','new','Location','northwest')
ylabel('Flow Rate (kg/s)')
xlabel('Time (s)')
ylim([0 0.07])

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent aged, new.

This plot shows the coolant flow switch-on times for a new and an aged battery pack. Inside the aged battery pack, as the cells heat up more than in a new battery pack, the battery controller switches on the coolant pump earlier. The pump power consumption is higher due to the earlier activation of the coolant pump.