如何定义电池模型中的负载循环:第一部分

2024年 1月 18日

在对电池系统进行建模仿真时,准确制定负载曲线对于真实反映电池在实际场景中的运行状态至关重要。在 COMSOL Multiphysics® 软件及其附加产品电池模块中,提供了多种方法以在电池模型中设置此类负载曲线。本篇博客文章将探讨这些方法,并详细阐述具体实现方式。为了演示这些方法的使用,我们还将回顾 COMSOL Multiphysics® 案例库中的相关模型示例。

简介

在 COMSOL® 软件中构建电池模型时,通常最后一步是基于电流、功率、电压或这些变量的组合定义并设定施加的负载。根据您在模型中使用的电池接口,可以通过选择合适的边界条件或工作模式,并配置相应的数值以匹配您所要模拟的电池运行工况,从而完成这一设定步骤。

举例来说,在 锂离子电池双电解液电池铅酸电池 接口中,针对通用电流分布场景,用户可使用多种电极条件选项。与之不同的是,在 单颗粒电池集总电池 这类简化电池接口中,用户可以选择工作模式。在电池组层级的 电池组 接口中,则可以通过为其内部的 电流导体 域设置边界条件来指定负载。

在 COMSOL Multiphysics® 及其电池模块中,提供了多种方法可将分布时长、参数变化和循环模式整合到用户自定义的表达式中,并将该信息作为负载传递给物理场接口。我们将在后续章节中对这些方法展开讨论。

圆柱形电池模型以粉红色和紫色显示电池下半部分的温度,以蓝色流线显示电池下方的流量。
风冷圆柱形锂离子电池在一次充放电循环过程中的温度分布。

函数

COMSOL Multiphysics® 内置的各类函数提供了多种定义负载曲线的选项。借助这些函数,您可以精准捕捉负载曲线的特征,包括其随时间变化的规律与波动特性。这些函数可被整合到代表负载的表达式中,比如电池模型里使用的外加电流。举例来说,在 一维锂离子电池等温示例模型 中,用于生成恒流(CC)充放电循环及静置阶段的外加电流,就是通过 分段 函数定义,这种函数尤其适合定义在已知时间段发生变化的负载。

与之类似,在 一维锌-氧化银电池等温示例模型 中,分段 函数被用于定义放电的电流密度脉冲曲线。在 二维圆柱形锂离子电池热仿真三维圆柱形锂离子电池热仿真 这两个示例模型中,波形 函数被用于定义交替切换的充放电电流,后续衔接静置弛豫阶段。在 可溶性铅酸液流电池 模型中,由充电、放电、静置三个阶段组成的负载循环,是通过三个 矩形波 函数进行定义。您可以根据输入数据、对目标负载循环的掌握程度,选用单个或多个同类型函数,也可组合不同类型的多个函数,得到想要的负载曲线。

负载曲线中的突变或不连续点可能引发数值求解不稳定问题。因此在通过各类函数定义负载曲线时,务必在设置窗口中开启平滑处理选项,以保障求解收敛。瞬态求解器可精准处理由平滑过程定义的不同负载步之间的过渡过程。


用于定义负载曲线的 分段 函数 设置 窗口,着重展示了平滑处理功能的启用方式,以此优化该函数的数值计算表现。

除此之外,如果您已获取实验测得的负载循环实测数据,且希望将实验得到的负载曲线导入电池模型中,可通过 插值 函数将其导入 COMSOL Multiphysics® 软件中。这一功能特性已在‌ 瞬态集总电池模型的参数估计 示例中得到演示:将一款插电混动汽车电池的实测动态负载数据,作为外加负载导入 集总电池 接口。


实验测得的行驶工况数据通过 插值 函数导入 COMSOL Multiphysics® 软件,用于定义外加负载。

预定义充放电循环功能

如果您需要定义恒流/恒压(CCCV)循环曲线,可使用预定义的 充放电循环 功能。若您已安装了电池模块,所有电池接口与通用电化学接口中都能找到该特征。借此,您可以对连续的恒流、恒压充放电循环过程开展仿真,还可选择在不同循环之间插入静置阶段。如下方截图所示,用户可自定义各类工作模式的执行顺序、设置静置阶段的时长,还能分别为恒流模式、恒压模式配置对应的电压、电流阈值。这套预定义的循环曲线会在仿真的总时长范围内自动重复运行。


充放电循环 节点的 设置 窗口包含相互独立的充电与放电模式配置栏,支持用户自主选择在负载曲线中启用或禁用对应工步,并输入相关参数值。根据启动模式的设置项不同,该节点会以 充电 放电 模式作为循环流程的起始工步

这个节点还内置了一个循环计数器变量,用户既可以在 结果 中调用该变量,也可将其用于为瞬态求解器设置停止条件。锂离子电池的单颗粒模型锂离子电池容量衰减模型 均使用该功能来定义恒流恒压负载曲线。

不过这个内置的 充放电循环 节点存在一定局限性:它主要依靠电压、电流阈值实现不同模式间的切换,可能无法完全匹配部分复杂场景的定制化需求。如果需要实现更复杂的负载循环逻辑,可通过 事件 接口来配置循环运行规则。

事件接口

在前文介绍 函数 的章节中已提及,借助各类函数定义负载曲线时开启平滑处理,能够优化求解器在负载突变过渡阶段的数值计算表现。而通过 事件 接口定义负载曲线时,这类优化效果已经是原生集成,让用户完全无需担忧求解器的数值稳定性,可稳定维持顺滑的计算状态。事件 接口支持创建包含多工步、多模式切换判定规则的复杂自定义负载。只需在负载表达式中引入若干通过 事件 接口定义的切换开关,即可让负载表达式自动切换至不同的目标数值,精准复现预设的负载曲线变化规律。这类负载表达式基于一组离散状态变量构建,通过变量数值的切换来定义出目标负载曲线。

在详细讲解如何通过 事件 接口定义所需负载曲线之前,有必要先充分了解它的核心特性。在 COMSOL Multiphysics® 软件中,事件 接口位于 数学>常微分和微分代数方程 接口的层级目录下,核心作用是创建求解器专属事件。这类事件可分为两类:显式事件与隐式事件。显式事件是预先指定在固定时刻触发的事件,比如预设在某一指定时间点关停负载的操作就属于这类事件。隐式事件则是在特定判定条件被满足时才会触发,例如当电芯电压达到预先设定的截止阈值时,自动调整施加电流的数值,或是将电芯切换至静置状态。当事件触发时,瞬态求解器会暂停当前运算,更新一个或多个离散状态变量的取值后再重启求解流程。值得注意的是,前文提到的 充放电循环 功能本身就是基于事件机制运行的,对应的隐式事件已经在“后台”完成了预定义,用户无需手动配置。

想要进一步了解 事件 接口及其执行方法,请查阅博客 使用事件接口模拟温控器

在掌握了 事件 接口的运行机制、核心组成要素,以及它支持用户基于特定条件或指定时间点修改模型的实现逻辑后,我们接下来可以探索其在负载曲线定义场景中的具体用法。负载曲线中的不同运行模式或工步,可通过一组 离散状态 来表征。这些状态作为一组切换开关,在被赋予不同取值后,就会同步修改负载表达式的定义规则,具体效果可参考下方截图。选择使用显式事件还是隐式事件,完全取决于当前负载定义的实际特性:如果已知影响负载曲线变化规律的变量的切换时间,就可以直接使用显式事件;如果变量的切换时间未知,则可以通过一组 指示器状态 来明确变量触发变化的判定条件与标准,比如电芯性能参数的特定阈值,这些 指示器状态 会生成对应的状态变量,供求解器触发隐式事件使用。


在析锂变形仿真模型中,事件接口被用于创建一个包含正向和反向电流占空比的 事件序列。


电极施加电流密度(在 变量 一栏中定义为 “i_app” 并传递给 锂离子电池 接口中的 电极电流 边界条件)是结合正向、反向电流状态计算得到的,该事件序列会循环往复运行,具体可参见下方 事件序列 设置 窗口。

请注意,所有 隐式事件显式事件 节点都会在指定时间或满足对应条件时触发,它们在接口中的定义顺序,可能与配置文件中预期的变更执行顺序不一致。不过,右击 事件 接口时,还有另一种名为 事件序列 的选项,能更直观地实现连续步骤的编排。借助 事件序列,您可以设定一系列按列表顺序依次激活的事件。添加 事件序列 后,可录入多个序列成员,每个成员均可依据条件表达式或指定时长执行动作。此外,在 事件序列 的设置窗口中,您还可以勾选 循环 复选框。只要仿真时长允许,勾选后事件就会重复执行,从而能够灵活定义循环周期。


如图所示,如果您希望事件序列在整个仿真过程中循环迭代运行,请勾选 循环 复选框。

隐式事件还可通过在事件触发点为求解器设置 停止条件 来终止仿真,这种方法的精度通常高于通过 停止表达式 定义的停止条件。如下方 硅-石墨混合电极模型的热力学电压滞后现象 的截图所示,模型中定义的所有隐式事件都会自动罗列在表格中,当任意一个标记为激活状态的事件被触发时,仿真就会自动终止。


当电极电位超过预先定义的、对应电极荷电状态(SOC)为 0% 时的电极电位阈值时,隐式事件 2 就会被触发,发出终止仿真的信号。

该方法已在 COMSOL Multiphysics® 的多个电池模型中得到应用,例如:

结束语

在本篇博客文章中,我们梳理了用户在 COMSOL Multiphysics® 软件中可用于定义负载循环的多种实现方案。这些方法均已在多个示例模型中完成演示,可作为极具参考价值的学习资源,帮助用户理解各类方法在电池仿真场景下的实际应用逻辑,同时掌握在自身仿真项目中精准复现负载曲线的最佳实践与实用技巧。

博客分类

评论 (9)

正在加载...
浩 李
浩 李
2024-11-05

老师您好,我在使用事件功能给锂离子电池定义充放电循环的电流时,求解器有时会“跳过“隐式事件(达到了隐式事件的触发条件,但求解器没有识别出来),我尝试过减小事件容差,但是还会出现这种问题,请问该怎么修改求解器或者怎么调整事件呢。

Yi Fan Wang
Yi Fan Wang
2024-11-12 COMSOL 员工

您可以尝试修改软件的计算步长,控制软件的最大步长取值。您可以参考博客“https://cn.comsol.com/support/knowledgebase/1254”。并且也可以尝试调小计算容差。

Heng Huang
Heng Huang
2024-11-15

老师你好。我想在电池满电状态下以一个较低电压值恒压放电的功能,请问如何实现?能否通过PDE或者ODE来实现?通过锂离子电池物理场中的电极电位接口会造成不收敛,初始值不一致。

Yi Fan Wang
Yi Fan Wang
2024-11-19 COMSOL 员工

您好,恒压状态,在软件设置中,最后还是通过电流边界条件来施加。需要使用事件功能来写,具体您可以参阅视频“https://cn.comsol.com/video-training/lithium-battery-training-cn-prt4”。

LL
LL
2024-12-26

老师您好,我想问一下 当充电到3V继续用小倍率,再充到3V用更小倍率,随后再用更小倍率继续充至更高电压,当用事件作为电压判断时,由于相同电压为条件,有一个就无法识别,这种要怎么调整呢

yongchao wang
yongchao wang
2024-12-31 COMSOL 员工

理论上可以通过“事件”中的“事件序列”通过“序列成员”之间的转变可以实现您描述的需求;另外如果方便可以将您的模型发送到“技术支持”,这样可以结合您的模型给您具体的答复。

思昂 陈
思昂 陈
2025-01-24

事件接口中如果事件序列中涉及到隐形事件如何控制整个序列的循环次数

王 刚
王 刚
2025-02-05 COMSOL 员工

可以定义一个离散状态变量,在隐式事件的“重新初始化”的表达式中对它进行累加 1,即可实现计数功能。

RUHUI XU
RUHUI XU
2025-09-04

老师您好,如何实现两个事件序列先后发生,且第一个事件循环几次后,再发生第二个事件?

浏览 COMSOL 博客