主要内容

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

使用加速率热量测试 (ARC) 测试电芯热失控特性

自 R2023b 起

此示例通过仿真加速率热量测量 (ARC) 测试,展示了如何表征电池电芯的热失控行为。

ARC 测试是一种研究和表征电池热行为的技术。为了测量热生成速率和热稳定性,将电池置于受控加热环境中进行测试。该测试有助于确定电池进入热失控的条件,并为电池设计、安全措施及风险评估提供重要信息。

通过 ARC 测试,您可以了解电芯的热行为,包括热失控时的起始温度和热释放率。这些信息对于开发更安全的电池技术和实现安全措施以防止或减轻与热失控相关的风险至关重要。

电池热失控事件是一种自我强化且无法控制的放热反应,其触发因素可能包括内部或外部热源、电气或机械损坏、制造缺陷或过充等。当发生热失控时,电池的温度会迅速升高。这种快速增加会引发一系列化学反应,导致热量迅速升高,并释放出可燃气体。

该图展示了 ARC 测试中热失控事件的各个阶段:

模型概述

打开 CellThermalRunawayARC 模型。

modelName = "CellThermalRunawayARC";
open_system(modelName);

该系统包括一个 ARC 设备子系统和一个电池电芯模块。电池电芯是一个开路电路,这意味着它与任何电负载都断开连接。

打开 ARC Device 子系统。ARC Device 子系统由 ARC Device 控制器图和 ARC Device 硬件子系统组成。该硬件由一个完全绝缘的盒子组成,内置加热器和温度传感器。控制器控制是否施加热量或启用冷却功能。

open_system(strcat(modelName,'/ARC Device'));

打开 ARC Device 控制器图-

open_system(strcat(modelName,'/ARC Device/ARC Device Controller'));

ARC 设备子系统采用“加热-等待-搜索”策略缓慢加热电池电芯,直到电池开始自热。然后,设备等待反应完成,并启动冷却程序。

仿真热失控事件下的 ARC 测试

在此部分,您将向电池电芯模块添加放热反应故障。然后,配置故障并运行仿真以绘制温度时间序列。

添加放热反应故障

定义放热反应故障。为了确保放热反应从仿真开始就处于活动状态,将 TriggerType 属性设置为 Always on

cellBlockName = "Battery Cell";
blockPath = strcat(modelName,'/',cellBlockName);
faultObj = getFaultObject(blockPath,"Exothermic reactions");
faultObj.Name = "ExothermicAlwaysOn";
faultObj.Description = strcat('Exothermic reactions with analytical model and no SOC tabulation. ', ...
    'Trigger is always on to allow the ARC Device to find the actual exothermic onset temperature');
faultObj.TriggerType = "Always On";

配置分析放热反应故障

根据电芯的电化学属性设置放热反应参数。请参阅数据表,为您的电芯模型自定义值。选择不依赖电池 SOC 的分析模型。

setFaultParameter(faultObj,"ExothermModel","simscape.battery.enum.cells.ExothermModel.analytical");
setFaultParameter(faultObj,"TabulateWithSOC","0");

TotalHeatOfReactionJ =29000; % J
ActivationEnergyJpmol =135000; % J
PercentThermalMassVented =35; 
ExothermOnsetTemperatureK =340; % K
CurrentInterruptTemperatureK =447; % K

setFaultParameter(faultObj,"TotalHeatOfReaction",num2str(TotalHeatOfReactionJ));
setFaultParameter(faultObj,"ActivationEnergy",num2str(ActivationEnergyJpmol));
setFaultParameter(faultObj,"PercentThermalMassVented",num2str(PercentThermalMassVented));
setFaultParameter(faultObj,"ExothermOnsetTemperature",num2str(ExothermOnsetTemperatureK));
setFaultParameter(faultObj,"CurrentInterruptTemperature",num2str(CurrentInterruptTemperatureK));

运行分析放热反应故障仿真

启用故障并运行仿真。

faultObj.activate;
out = sim(modelName);
simlog1 = out.simlog_CellThermalRunawayARC;

绘制仿真结果

绘制电池温度。

Tcell = simlog1.Battery_Cell.batteryTemperature;
reactionExtent = simlog1.Battery_Cell.reactionExtent;
plot(Tcell)

Figure batteryTemperature contains an axes object. The axes object with title batteryTemperature, xlabel Time, s, ylabel batteryTemperature, K contains an object of type line.

ans = struct with fields:
          id: [1×1 Figure]
    childIds: []

绘制反应程度。

plot(reactionExtent)

Figure reactionExtent contains an axes object. The axes object with title reactionExtent, xlabel Time, s, ylabel reactionExtent, 1 contains an object of type line.

ans = struct with fields:
          id: [1×1 Figure]
    childIds: []

表征电芯放热反应

您可以使用 ARC 测试来试验性地确定自加热热失控事件期间温度与温度的函数关系。如果您有试验数据,请在此部分中加载并绘制该数据。

将分析热失控模型的仿真结果作为试验测量结果。

[TcellSH,dTdtSH] = extractTemperatureDuringSelfHeating(simlog1);
plot(TcellSH,dTdtSH,"r*")
grid on
title("Temperature Rate as Function of Temperature")
xlabel("Cell Temperature (K)")
ylabel("dTdt (K/s)")

Figure reactionExtent contains an axes object. The axes object with title Temperature Rate as Function of Temperature, xlabel Cell Temperature (K), ylabel dTdt (K/s) contains a line object which displays its values using only markers.

使用表查找配置数据驱动的放热反应模型

使用仿真数据对数据驱动的放热反应模型进行参数化。选择表中的 ARC 测试温度率,不要对 SOC 进行建模。

setFaultParameter(faultObj,"ExothermModel","simscape.battery.enum.cells.ExothermModel.acceleratedRateCalorimetryTemperature"); % select Tabulated ARC test temperature rate
setFaultParameter(faultObj,"TabulateWithSOC","0"); % do not model dependency with SOC in this case
setFaultParameter(faultObj,"TemperaturesFromARC",mat2str(TcellSH));
setFaultParameter(faultObj,"TemperatureRatesFromARC",mat2str(dTdtSH));
faultObj.TriggerType = "Behavioral"; % Use Temperature-based trigger.
faultObj.BehavioralTriggerData.TriggerTemperature.value = num2str(ExothermOnsetTemperatureK); % Set trigger temperature

运行数据驱动的放热反应故障仿真

启用故障并运行数据驱动仿真。

faultObj.activate;
out = sim(modelName);
simlog2 = out.simlog_CellThermalRunawayARC;

绘制仿真结果

绘制电池温度。

Tcell = simlog2.Battery_Cell.batteryTemperature;
reactionExtent = simlog2.Battery_Cell.reactionExtent;
plot(Tcell)

Figure batteryTemperature contains an axes object. The axes object with title batteryTemperature, xlabel Time, s, ylabel batteryTemperature, K contains an object of type line.

ans = struct with fields:
          id: [1×1 Figure]
    childIds: []

绘制反应程度。

plot(reactionExtent)

Figure reactionExtent contains an axes object. The axes object with title reactionExtent, xlabel Time, s, ylabel reactionExtent, 1 contains an object of type line.

ans = struct with fields:
          id: [1×1 Figure]
    childIds: []

验证放热反应表征

将测得的温度变化率与数据驱动的放热反应模型得出的仿真温度变化率进行比较。ARC 试验数据与表查找模型得出的仿真结果非常吻合。

[simTcellSH,simdTdtSH] = extractTemperatureDuringSelfHeating(simlog2);
figure
plot(TcellSH,dTdtSH,"r*")
hold on
plot(simTcellSH,simdTdtSH,"b")
grid on
title("Temperature Rate as Function of Temperature")
xlabel("Cell Temperature (K)")
ylabel("dTdt (K/s)")
legend({"ARC Experiment (Analytical)","Simulation Results (Tabulated)"},Location="best")

Figure contains an axes object. The axes object with title Temperature Rate as Function of Temperature, xlabel Cell Temperature (K), ylabel dTdt (K/s) contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent ARC Experiment (Analytical), Simulation Results (Tabulated).

观察 ARC 试验数据与表查找模型仿真结果之间的吻合程度。

支持函数

function [TcellSH, dTdtSH] = extractTemperatureDuringSelfHeating(simlog)
    % Returns temperature and temperature-rate vectors during self-heating
    tvec = simlog.Battery_Cell.batteryTemperature.series.time;
    Tcell = simlog.Battery_Cell.batteryTemperature.series.values("K");
    reactionExtent = simlog.Battery_Cell.reactionExtent.series.values;
    selfHeating = reactionExtent > 0.01 & reactionExtent < 0.99;
    TcellSH = Tcell(selfHeating);
    dTdtSH = diff(TcellSH)./diff(tvec(selfHeating));
    TcellSH(end) = []; % to have the same length as dTdtSH
end

另请参阅

主题