主要内容

本页采用了机器翻译。点击此处可查看英文原文。

电池循环老化建模

自 R2025a 起

本例演示了如何通过仿真来模拟电池的容量循环老化过程。电池老化是影响储能系统性能和寿命的关键因素。随着电池经历充放电循环,其组件会逐渐劣化,导致容量和效率持续下降。固态电解质界面 (SEI)、锂析出及其他副反应是导致锂离子电池性能衰减的主要原因。

Battery Equivalent Circuit模块支持对循环老化过程进行经验建模。此示例重点展示了该模块在容量老化方面的不同建模选项、参数化设置方法以及仿真结果评估方式。

恒温仿真容量老化

您可以通过周期寿命测试获得所需数据。在这些测试中,您需在受控温度下按照特定规程对电池进行充放电操作。在此示例中,不同组别的电池在 15°C、25°C 和 35°C 环境下进行循环测试,每 100 次放电循环后测量其容量百分比变化。

% Breakpoints
dischargeCycleBreakpoints = [0 100 200 300 400];
temperatureBreakpoints = [288.15,298.15,308.15];

% Measured Capacities
percentChange15Deg = [0;-1;-3;-6;-9];
percentChange25Deg = [0;-3;-6;-11;-17];
percentChange35Deg = [0;-6;-13;-20;-28];
percentChange = [percentChange15Deg,percentChange25Deg,percentChange35Deg];

% Visualize capacity percent change
surf(temperatureBreakpoints,dischargeCycleBreakpoints,percentChange);
xlabel("Cycling Temperature [K]");
ylabel("Number of Discharge Cycles [1]");
zlabel("Change in Cell Capacity [%]");
view(124,16);

Figure contains an axes object. The axes object with xlabel Cycling Temperature [K], ylabel Number of Discharge Cycles [1] contains an object of type surface.

Battery Equivalent Circuit 模块支持恒温老化建模。当您在恒定温度下以模型方式建模老化过程时,可以直接应用测得的数据。该建模选项比在不同温度下模型老化过程的选项更为高效。

% Open model
modelName = "batteryCyclingAging";
open_system(modelName);

% Set aging modeling option and initial capacity
blockPath = modelName.append("/Battery Equivalent Circuit");
set_param(blockPath,"CyclingAgingMethod","simscape.battery.enum.cells.CyclingAgingMethod.tableNandT");

% Set aging parameters
set_param(blockPath,"CapacityChangeThermal","percentChange");
set_param(blockPath,"AgingTemperatureBreakpoints","temperatureBreakpoints");
set_param(blockPath,"NumDisCyclesBreakpoints","dischargeCycleBreakpoints");

在恒定温度下仿真电池的循环行为。

simout = sim(modelName);

为分析结果,将建模的电芯容量与预期容量进行比较。您通过根据电池恒温状态下的放电循环次数对数据进行插值计算,得出预期容量百分比变化值。观察预期数据如何与建模老化过程相吻合。

% Get the expected capacity
batteryLoggingNode = simout.simlog.Battery_Equivalent_Circuit;
time = batteryLoggingNode.numCycles.series.time;
numberOfDischargeCycles = batteryLoggingNode.numCycles.series.values;
expectedCapacityPercentChange = interp1(dischargeCycleBreakpoints,percentChange(:,2),numberOfDischargeCycles);

% Get the modeled capacity
modeledCapacityPercentChange = batteryLoggingNode.capacityCyclingChange.series.values;

% Plot the results
plot(time,expectedCapacityPercentChange,time(1:1000:end),modeledCapacityPercentChange(1:1000:end),"*");
xlabel("Time [s]");
ylabel("Capacity Percent Change [%]");
legend(["Expected","Modeled"]);

Figure contains an axes object. The axes object with xlabel Time [s], ylabel Capacity Percent Change [%] contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Expected, Modeled.

仿真温度变化下的容量老化

在正常运行状态下,电池温度会因外部和内部因素的影响而波动。要建模此 Battery Equivalent Circuit 模块中的这些变化,请将循环老化模型参数设置为 Lookup Tables (temperature-dependent)

set_param(blockPath,"CyclingAgingMethod","simscape.battery.enum.cells.CyclingAgingMethod.tableNandVariableT");

在本次实验中,环境温度在一天中持续变化。您可以将这种变化近似为正弦波模式。要建模这种变化,请将 temperatureVariation 变量设置为 true

temperatureVariation = true;

仿真该模型,并生成电池温度和容量的图。

simout = sim(modelName,"StopTime","3e5");
batteryLoggingNode = simout.simlog.Battery_Equivalent_Circuit;

% Get the modeled capacity percent change under variable temperatures
capacityPercentChangeVariableTemperature = batteryLoggingNode.capacityCyclingChange.series.values;
timeVariableTemperature = batteryLoggingNode.batteryTemperature.series.time;
batteryTemperature = batteryLoggingNode.batteryTemperature.series.values("K");

% Visualize the results
variableTemperatureFigure = figure;
tiledlayout(variableTemperatureFigure,2,1);
nexttile;
plot(timeVariableTemperature,capacityPercentChangeVariableTemperature);
xlabel("Time [s]");
ylabel("Capacity percent change [%]");
title("Capacity Percent Change");

nexttile;
plot(timeVariableTemperature,batteryTemperature);
xlabel("Time [s]");
ylabel("Temperature [K]");
title("Temperature");

Figure contains 2 axes objects. Axes object 1 with title Capacity Percent Change, xlabel Time [s], ylabel Capacity percent change [%] contains an object of type line. Axes object 2 with title Temperature, xlabel Time [s], ylabel Temperature [K] contains an object of type line.

与低温地区相比,高温地区的容量衰减速度更快。

考虑 C 速率依赖性仿真容量老化

除了温度相关性性外,循环过程中施加在电池上的充放电速率也会影响容量老化的速率。为建立容量衰减对 C 率的依赖性建模,除先前测得的 1.5C 率值外,还测量了 0.5C 率下的容量衰减值。要使用 Battery Equivalent Circuit 模块中的数据,必须将其组织成三维数组。第一维度必须对应放电循环次数,第二维度必须对应温度,第三维度必须对应放电电流。

capacity = 27;
currentBreakpoints = capacity * [-0.5,-1.5];

% Measured capacity percent change
percentChangeLowCurrent = [0 0 0;-0.5 -1.5 -3;-1.5 -3 -6.5;-3 -5.5 -10;-4.5 -8.5 -14];
percentChangeCurrent =  cat(3,percentChangeLowCurrent,percentChange);

为建模电流依赖性老化,将循环老化模型参数设置为 Lookup Tables (temperature and current dependent)。将循环老化数据的电流断点,I电芯容量百分比变化,CapacityChange(N,T,I) 参数设置为计算得出的值。

set_param(blockPath,"CyclingAgingMethod","simscape.battery.enum.cells.CyclingAgingMethod.tableNandVariableTandI");
set_param(blockPath,"CapacityChangeThermalI","percentChangeCurrent");
set_param(blockPath,"AgingCurrentBreakpoints","currentBreakpoints");

要启用循环过程中具有可变电流的模型场景,请将 currentVariation 变量设置为 true。然后,对模型进行仿真,并可视化电池容量百分比和电流的变化。

currentVariation = true;
simout = sim(modelName,"StopTime","1e6");

% Get the modeled capacity percent change under variable current
batteryLoggingNode = simout.simlog.Battery_Equivalent_Circuit;
timeVariableCurrent = batteryLoggingNode.capacityCyclingChange.series.time;
capacityPercentChangeVariableCurrent = batteryLoggingNode.capacityCyclingChange.series.values;
batteryCurrent = batteryLoggingNode.batteryCurrent.series.values("A");

% Visualize the results
variableCurrentFigure = figure;
tiledlayout(variableCurrentFigure,2,1);
nexttile;
plot(timeVariableCurrent,capacityPercentChangeVariableCurrent);
xlabel("Time [s]");
ylabel("Capacity Percent Change [%]");
title("Capacity Percent Change");

nexttile;
plot(timeVariableCurrent,batteryCurrent);
xlabel("Time [s]");
ylabel("Current [A]");
title("Current");

Figure contains 2 axes objects. Axes object 1 with title Capacity Percent Change, xlabel Time [s], ylabel Capacity Percent Change [%] contains an object of type line. Axes object 2 with title Current, xlabel Time [s], ylabel Current [A] contains an object of type line.

与循环电流较低的区域相比,循环电流较高的区域表现出加速的容量衰减。

另请参阅

主题