向电池模型添加向量化和标量热边界条件
此示例说明了如何使用 Simscape™ Battery™ 为电池模型添加向量化和标量热边界条件。这些热边界条件会影响电池系统边缘或边界处的电池电芯,这些电芯与电池组中的电池电芯相比,会经历不同的热动态过程。Simscape™ Battery™ 中的电池包构建器工作流支持模组级和并联组件级热边界条件,以捕获电芯间温度分布等动态变化以及与环境和相邻电池包组件之间的更复杂的热交互。您可以暴露位于 Xmin、Xmax、Ymin 和 Ymax 边界处的电池电芯的向量化或标量热节点。
创建电池并联组件
要创建电池并联组件对象,必须先设计并创建基础电池电芯元素。要创建 Cell
对象,请使用 batteryCell
函数并分配一个默认的圆柱体几何形状。
batterycell = batteryCell(batteryCylindricalGeometry);
您可以使用 CellModelOptions
属性的 CellModelBlockPath
属性将 Cell
对象链接到任何 Simscape 电池电芯模型模块。此示例使用 Battery Equivalent Circuit 模块作为基本电芯模型。
batterycell.CellModelOptions.CellModelBlockPath = "batt_lib/Cells/Battery Equivalent Circuit";
要分配热边界条件并仿真电池电芯的热效应,在 Cell
对象的 CellModelOptions
属性的 BlockParameters
属性中,将 ThermalModel
属性设置为 "LumpedThermalMass"
。
batterycell.CellModelOptions.BlockParameters.ThermalModel = "LumpedThermalMass";
并联组件包括多个电池电芯,这些电池电芯在特定的拓扑配置或几何排列下电连接成并联。在此示例中,您将创建一个由 15 个圆柱形电芯组成的并联组件。
要创建 ParallelAssembly
对象,请使用 batteryParallelAssembly
函数,并将 Cell
对象指定为第一个参量,将并行电芯的数量指定为第二个参量。此外,还可使用可选的名称-值参量指定行数、模型分辨率,并启用电芯间热路径。
batteryparallelAssembly = batteryParallelAssembly(batterycell,15,Rows=3,ModelResolution="Detailed",InterCellThermalPath="on");
要指定给定边界的热边界条件,请使用 XminThermalNodes
、XmaxThermalNodes
、YminThermalNodes
或 YmaxThermalNodes
属性。您可以独立设置这些属性,并且它们都可以同时启用。您可以将这些属性设置为 Scalar
或 Vectorized
。使用 Scalar
设置电池侧不随侧面变化而变化的静态或恒定温度条件,这意味着每个电池电芯的温度都相同。使用 Vectorized
在界面处对每个电芯建模一个变化温度源,例如存在冷却液流动的情况。
设置这些属性会在电芯热端口和接口之间添加热阻。此图显示了在启用不同的热边界条件时电池电芯的配置。
为 Xmin 添加热边界条件。将 XminThermalNodes
属性设置为 "Scalar"
"。
batteryparallelAssembly.XminThermalNodes = "Scalar";
要从 ParallelAssembly
对象自动生成电池模型,首先为生成的电池库定义一个名称。
libraryName = "pSetScalarLibrary";
要生成库,请使用 buildBattery
函数。
buildBattery(batteryparallelAssembly,"LibraryName",libraryName,"Verbose","off");
使用标量热节点仿真并联组件
使用恒温源配置电池仿真。定义模型名称。
modelName = "batteryPSetScalarModel";
运行本示例中的 setUpBatterySimulation
函数,以自动生成仿真模型。
setUpBatterySimulation(modelName,libraryName,batteryparallelAssembly,"Scalar")
指定 XminThermalResistance
和 InterCellThermalResistance
属性。
set_param(strcat(modelName,"/",batteryparallelAssembly.Name),"XminThermalResistance","10"); set_param(strcat(modelName,"/",batteryparallelAssembly.Name),"InterCellThermalResistance","15");
对模型进行仿真。
out = sim(modelName,'StartTime','0','StopTime','160');
要动态绘制仿真结果,请先要创建一个 batterySimulationLog
对象。
batterySimLog = batterySimulationLog(batteryparallelAssembly,out.simlog.ParallelAssembly1);
选择要动态可视化的变量。
batterySimLog.SelectedVariable = "batteryTemperature"; batterySimLog.SelectedVariableUnit = "degC"; disp(batterySimLog)
BatterySimulationLog with properties: Battery: [1×1 simscape.battery.builder.ParallelAssembly] SimLog: [1×1 simscape.logging.Node] SelectedVariable: "batteryTemperature" SelectedVariableUnit: "degC" ModelVariables: ["numCycles" "batteryVoltage" "batteryTemperature" "socCell" "batteryCurrent"]
现在,使用函数 batterySimulationChart
可视化仿真结果。
f = uifigure("Color","w"); g = uigridlayout(f, [1,1]); parallelAssemblyChart = batterySimulationChart(batterySimLog, Parent = g); parallelAssemblyChartColorBar = colorbar(parallelAssemblyChart); ylabel( parallelAssemblyChartColorBar, strcat(batterySimLog.SelectedVariable, " (", batterySimLog.SelectedVariableUnit,")") );
使用向量化热节点仿真并联组件
将向量化的热边界条件添加到 Xmin。将 XminThermalNodes
属性设置为 "Vectorized
"。
batteryparallelAssembly.XminThermalNodes = "Vectorized";
为生成的电池库定义名称。
libraryName = "pSetVectorizedLibrary";
要生成库,请使用 buildBattery
函数。
buildBattery(batteryparallelAssembly,"LibraryName",libraryName,"Verbose","off");
定义模型名称。
modelName = "batteryPSetVectorizedModel";
运行本示例中的 setUpBatterySimulation
函数,以自动生成仿真模型。
setUpBatterySimulation(modelName,libraryName,batteryparallelAssembly,"Vectorized")
指定 XminThermalResistance
和 InterCellThermalResistance
属性。
set_param(strcat(modelName,"/",batteryparallelAssembly.Name),"XminThermalResistance","1"); set_param(strcat(modelName,"/",batteryparallelAssembly.Name),"InterCellThermalResistance","15");
对模型进行仿真。
out = sim(modelName,'StartTime','0','StopTime','160');
要动态绘制仿真结果,请先要创建一个 BatterySimulationLog
对象。
batterySimLog = batterySimulationLog(batteryparallelAssembly,out.simlog.ParallelAssembly1);
选择要动态可视化的变量。
batterySimLog.SelectedVariable = "batteryTemperature"; batterySimLog.SelectedVariableUnit = "degC"; disp(batterySimLog)
BatterySimulationLog with properties: Battery: [1×1 simscape.battery.builder.ParallelAssembly] SimLog: [1×1 simscape.logging.Node] SelectedVariable: "batteryTemperature" SelectedVariableUnit: "degC" ModelVariables: ["numCycles" "batteryVoltage" "batteryTemperature" "socCell" "batteryCurrent"]
现在,使用函数 BatterySimulationChart
可视化仿真结果。
f = uifigure("Color","w"); g = uigridlayout(f,[1,1]); parallelAssemblyChart = batterySimulationChart(batterySimLog,Parent = g); parallelAssemblyChartColorBar = colorbar(parallelAssemblyChart); ylabel(parallelAssemblyChartColorBar,strcat(batterySimLog.SelectedVariable," (", batterySimLog.SelectedVariableUnit,")"));
现在,每个电芯的温度都不同,因为它们连接到向量化温度源的不同温度。要重置热边界条件,请将 XminThermalNodes
属性设置为 None
。
batteryparallelAssembly.XminThermalNodes = "None";
创建电池模组
电池模组由多个串联的并联组件组成。在此示例中,您将使用上一节中定义的并联组件创建一个电池模组。要创建电池模组,请调用 batteryModule
函数,并将 ParallelAssembly
对象指定为第一个参量,将串联组件的数量指定为第二个参量。此外,使用可选的名称-值参量指定模型分辨率和电芯之间的热路径。
batterymodule = batteryModule(batteryparallelAssembly, 2, ... ModelResolution = "Detailed", ... InterCellThermalPath = "on");
使用标量热节点仿真模组
在 Xmax 边界上添加一个标量热边界条件。将 XmaxThermalNodes
属性设置为 "Scalar
"。
batterymodule.XmaxThermalNodes = "Scalar";
为生成的电池库定义名称。
libraryName = "moduleScalarLibrary";
要生成库,请使用 buildBattery
函数。
buildBattery(batterymodule,"LibraryName",libraryName,"Verbose","off")
定义模型名称。
modelName = "batteryModuleScalarModel";
运行本示例中的 setUpBatterySimulation
函数,以自动生成仿真模型。
setUpBatterySimulation(modelName,libraryName,batterymodule,"Scalar")
指定 XmaxThermalResistance
和 InterCellThermalResistance
属性。
set_param(strcat(modelName,"/",batterymodule.Name),"XmaxThermalResistance","1"); set_param(strcat(modelName,"/",batterymodule.Name),"InterCellThermalResistance","15");
对模型进行仿真。
out = sim(modelName,'StartTime','0','StopTime','160');
要动态绘制仿真结果,请先要创建一个 BatterySimulationLog
对象。
batterySimLog = batterySimulationLog(batterymodule,out.simlog.Module1);
选择要动态可视化的变量。
batterySimLog.SelectedVariable = "batteryTemperature"; batterySimLog.SelectedVariableUnit = "degC"; disp(batterySimLog)
BatterySimulationLog with properties: Battery: [1×1 simscape.battery.builder.Module] SimLog: [1×1 simscape.logging.Node] SelectedVariable: "batteryTemperature" SelectedVariableUnit: "degC" ModelVariables: ["numCycles" "batteryVoltage" "batteryTemperature" "socCell" "batteryCurrent"]
现在,使用 BatterySimulationChart 函数可视化仿真结果。
f = uifigure("Color","w"); g = uigridlayout(f,[1,1]); moduleChart = batterySimulationChart(batterySimLog,Parent = g); moduleChartColorBar = colorbar(moduleChart); ylabel(moduleChartColorBar,strcat(batterySimLog.SelectedVariable," (", batterySimLog.SelectedVariableUnit,")"));
现在,每个电芯的温度都相似,因为它们都连接到相同的恒温源。温度差异是由电芯之间的热交换造成的。
设置向量化热节点电池仿真
在 Xmax 边界添加向量化的热边界条件。将 XmaxThermalNodes
属性设置为 "Vectorized
"。
batterymodule.XmaxThermalNodes = "Vectorized";
为包含模组模型的生成的电池库定义一个名称:
libraryName = "moduleVectorizedLibrary";
要生成库,请使用 buildBattery
函数。
buildBattery(batterymodule,"LibraryName",libraryName,"Verbose","off")
定义模型名称。
modelName = "batteryModuleVectorizedModel";
运行本示例中的 setUpBatterySimulation
函数,以自动生成仿真模型。
setUpBatterySimulation(modelName,libraryName,batterymodule,"Vectorized")
指定 XmaxThermalResistance
、InterCellThermalResistance
、NumNodes
和 Temperature
属性。
set_param(strcat(modelName,"/", batterymodule.Name),"XmaxThermalResistance","1"); set_param(strcat(modelName,"/", batterymodule.Name),"InterCellThermalResistance","15"); set_param(strcat(modelName,"/Temperature Source"),"NumNodes","10"); set_param(strcat(modelName,"/Temperature Source"),"temperature","[293, 295, 297, 299, 302, 304, 304, 306, 308, 312]");
对模型进行仿真。
out = sim(modelName,'StartTime','0','StopTime','160');
要动态绘制仿真结果,请先要创建一个 BatterySimulationLog
对象。
batterySimLog = batterySimulationLog(batterymodule,out.simlog.Module1);
选择要动态可视化的变量。
batterySimLog.SelectedVariable = "batteryTemperature"; batterySimLog.SelectedVariableUnit = "degC"; disp(batterySimLog)
BatterySimulationLog with properties: Battery: [1×1 simscape.battery.builder.Module] SimLog: [1×1 simscape.logging.Node] SelectedVariable: "batteryTemperature" SelectedVariableUnit: "degC" ModelVariables: ["numCycles" "batteryVoltage" "batteryTemperature" "socCell" "batteryCurrent"]
现在,使用 BatterySimulationChart 函数可视化仿真结果。
f = uifigure("Color","w"); g = uigridlayout(f,[1,1]); moduleChart = batterySimulationChart(batterySimLog,Parent = g); moduleChartColorBar = colorbar(moduleChart); ylabel(moduleChartColorBar,strcat(batterySimLog.SelectedVariable," (", batterySimLog.SelectedVariableUnit,")"));
现在,相关边界上的每个电芯都有不同的温度,因为它们都连接到向量化温度源的不同温度。
另请参阅
Battery Equivalent Circuit | batteryCell
| batteryParallelAssembly
| batteryModule
| buildBattery
| batterySimulationLog
| batterySimulationChart