使用Comsol进行锂电池仿真-入门

写在前面

研一阶段学习Comsol仿真,由于软件本身存在一点门槛,且市面上教学较少,仿真的过程中也许一个小小的对勾没有勾选就会导致报错,使得当时的学习非常难受,在读博前夕抽出些许时间写一点建模的小小心得,特此纪念在电脑前调试模型的日日夜夜。

适用说明

作为一款全面的仿真软件,本文主要使用“锂离子电池”模块对锂电池进行仿真。不同物理场可能会报一致的错误,但错误原因却大相径庭,特在此说明,本文的解决方案仅限于锂电池领域

怎样快速上手?

以“锂电池老化模型”为例

案例库中有SEI膜增厚模型,基于该模型的思路可以构建析锂模型、析铜模型等由副反应控制的模型。值得一提的是,案例库是为数不多的有价值的入门资料,如果需要快速入门Comsol,请首先浏览案例库。请注意,不同物理场之间的学习遵循“跨场如跨山”的原则,即使您熟练掌握如何调试电化学场,但可能让您建立流体场您依旧抓虾,好消息是:每一个物理场都有案例让我们快速上手,而后处理和网格操作等技术性手段也是全局适用的。

下面将针对以上案例(6.1版本)进行说明。

不论是从0开始建模还是分析学习案例,Comsol在大部分情况下都支持顺序操作,但不是强制按照顺序进行操作。按我的习惯,对于该模型,我首先会点击全局定义下的参数。

 如果是从案例库中直接打开案例,参数表中第三列的说明将全是英文,如果需要中文说明可以去官网下载(适用于所有案例模型)。锂离子电池一维模型 - 容量衰减教程

如果没有电池基础的小白可能看不懂这些参数是啥,没关系,瞟一眼留个印象。在后面看到了就往回翻,到参数表中查。参数虽然不少,但是其实主要的参数并不多,把一套参数弄明白了其实已经入门一大半了。如果您想要弄明白每一个参数的物理含义,可以参考AI问答以及专业书籍(我看的是巴德的《电化学方法——原理和应用》

---------------------------------------------------------------------------------------------------------------------------------

定义

按照顺序,全局定义之后是组件,组件中的定义仅适用于该组件本身,不支持跨组件。右击定义可以发现可以向其中添加许多定义,软件功能强大,我基于我的使用理解给常用的定义稍作解释。

变量:添加会随着时间变化的量或控制表达式。如何书写表达式在后面讲。

函数:添加自己定义的函数定义,函数定义后如果需要以某一变量为自变量,则需要在变量中调用函数并赋上自变量。例如:该案例中建立了一个K函数,变元为x,这里的x不具有物理意义;观察变量1中的I_SEI的定义:

-(1-H*(liion.iloc_per1<0)*liion.iloc_per1/i1C_loc*K(liion.cs_average/liion.csmax))

*J*i1C_loc/(exp(alpha*eta_SEI*F_const/(R_const*T))+Q_SEI/Av_neg*f*J/i1C_loc)

从式中可看出,I_SEI完成了函数K的调用,自变量为括号内的式子,即局部平均SOC的值。 

选择: 在高维度仿真中,涉及到很多域,我习惯使用显式进行域的分类,比如将正极域划归为一个显式,负极、隔膜等划归为其他显式,后续选择域的时候可以直接选择显式而不用一个一个点,容易出错且耗时。

探针:如果我想要观察模型中某一特定位置上的电压等变量情况,但该点并没有被作为对象可供我们直接选择,此时就需要使用探针进行手动定义。探针里可以输入具体的坐标和表达式,使用方便。但如果在模型计算之后再添加探针,则无法计算探针处的值,需要重新计算模型。

非局部耦合:常用积分操作,这里定义的积分全是空间积分,针对时间进行积分在后处理中完成!!!如案例中的定义,选择了针对负极进行积分操作intop1,而这一定义在结果中得到了使用用于描述容量衰退:

(Q0-comp1.intop1(Q_SEI))/(Q0)

这里的对Q_SEI(SEI生成的容量)进行了积分,他的结果是整个负极上产生的SEI的多少。

25/2/23更新

:单一物理场中使用不多,目前仅在针刺\挤压电池变形一个模型中有所使用。日后介绍该模型时解释。

---------------------------------------------------------------------------------------------------------------------------------

按照顺序,定义之后是几何。该案例使用了P2D建模理论基础,需要对伪二维有大致的了解:第一个维度就是我们肉眼可见的几何(一条直线,被几个点分成了几个域,分别表示正极、负极和隔膜),另外一个维度从软件的角度可以理解为额外维度,该维度说的是粒子维度上的事,这一维度不需要我们在几何中直接定义,软件在求解时会保存这一维度的解,在后处理过程中可以调用。如何调用在后处理中说明。说回几何,几何的操作十分丰富且功能强大,新手可以使用最笨的堆积木的方法进行几何建模。

---------------------------------------------------------------------------------------------------------------------------------

按照顺序,几何之后是材料。材料中添加正负极和电解质材料,值得注意的是,材料的调用有两种方式,可以在添加完材料后就进行域分配,也可以在物理场使用过程中进行定义,一前一后并不冲突但可能有点绕,这里介绍个人认为适合小白的稍微笨一点的方法。

材料

首先,需要向材料中加入三种我们需要的材料:

然后,每一个材料的几何实体选择中几何实体层不需要进行域选择定义操作,对,你没看错,你在这里啥都不用管,可能会暂时出现叉号,不用理会,我们会在后面每个域的使用中进行定义,以负极为例:

 如图所示,负极中因为只有两个物质:需要进行材料定义的只有:电解质和电极。如图,电解质材料下拉勾选LiPF6,电极材料下拉勾选石墨,完成定义。子节点中的材料定义同理。

---------------------------------------------------------------------------------------------------------------------------------

按照顺序,来到最关键的物理场部分。

物理场

有过从零开始建模经历的小白可能会发现新添加的物理场只包含寥寥3个节点,但案例库中的模型咋节点那么多,这就要提到在用Comsol过程中,一个非常重要的习惯:鼠标右键点击。很多东西并不会直接列在软件表面,而使用导航栏进行操作又很容易让人不知道在干啥,所以在需要的地方尝试右击是一个非常好的习惯,往往一个卡脖子问题就这样解决了!右击锂离子电池物理场:

发现菜单被横线划分成了几个区域,第一个区域是相关的设置,第二个区域是相关的设置(这在更高维度中有所不同,三维中会出现域、面、线、点四个)。通过域定义,我们可以添加电解质、隔膜等要素,下面模块化介绍这些域定义和他们的使用:

多孔电极:常规锂电池的正负极材料都可以使用该定义,非常规的需要用附加多孔电极和高导电多孔电极定义。一块全电池,理论上具有2个电极,所以正负极需要分开单独定义,即添加两个多孔电极节点,分别进行域分配(域选择)。以负极为例,在添加节点之后,点小三角展开这一节点:发现可以向其中添加电极反应,而正常电池工作(不包含老化)所需要的是已经添加好的两个子节点:颗粒插层和电极反应1,颗粒插层用于描述锂离子嵌入过程,用于设置颗粒相关属性;电极反应1是保证锂电池正常工作的反应,可以选择自己需要的动力学进行描述(这一部分的设置参考可以参考文献并多尝试)

如何添加副反应:案例在负极中加入了电极反应2用于描述SEI膜的生成导致锂离子损失。平衡电默认采用0V,关于机理的介绍如果有需要可以留言在后续出一期针对性说明。电极动力学使用了最经典的SEI膜生长论文里的公式,这个公式经过了一定的验证可以移植使用。建模逻辑是利用这个公式完成了SEI生长的控制速度,而具体的物质的量关系则在下方的化学计量系数中设置。在多空电极1主节点中,可以发现溶解-沉积物质这一设置,我们需要首先添加(点)发生沉积的物质,这里添加了sei,然后返回副反应子节点处,发现化学计量系数表格中出现了物质sei,这就完成了沉淀物质的定义,参与电子数目1指的是反应1个电子的反应,v_{Li+ }设置为-1,表格中sei的计量数设置为反应一个电子所希望产生的sei沉淀,而v_{Li\Theta }的量用于均衡v_{Li+ }和sei的物质沉积量,小白可以照搬并拓展。

正极的定义和负极的定义类似,不再赘述。

---------------------------------------------------------------------------------------------------------------------------------

初始化

随着软件的升级,初始化的方式越来越人性化,例如在案例中,直接通过初始电池电荷分布节点就完成了初始化,但在使用过程中发现这个节点不稳定,下面提供一个稳定的初始化方法

右击锂电池物理场添加初始值,由于模型本身就带一个初始值1,所以现在我们有两个初始值(1和2)。

初始值1的域选择负极和隔膜,电解质电位表达式输入:-matn.elpot.Eeq_int1(SOL-neg),n是负极材料对应的编号,SOL-neg表示负极初始嵌锂百分比;电势为0V(因为负极会做接地处理)

初始值2的域选择正极,电解质电位表达式输入:-matn.elpot.Eeq_int1(SOL-neg)和上面相同,电势表达式为:matp.elpot.Eeq_int1(SOL-pos)-matn.elpot.Eeq_int1(SOL-neg),p是正极材料对应的编号,这个公式表示用正极的初始固相电势减去负极的电势,得到对地固相电势。如果您看不懂,不用管,任何模型都可以这么做初始化,而您只需要搞清楚正负极材料的序号!!那么细心的读者就会问了,该如何确定SOL呢,这就涉及到一个关键问题:电极平衡(以后会说)。

值得一提的是,不合理的初始值定义会导致:找不到一致的初始值等错误,这类错误发生在仿真时间为0之前,即仿真无法开始,划分完网格就GG。

---------------------------------------------------------------------------------------------------------------------------------

点边界定义

举一个较为生动的例子来说明何时可以使用点边界定义:在针对锂金属电池或者半电池进行建模时,可以直接使用电极(点)电极表面而不用额外添加负极,因为锂金属作为负极时,大部分情况只需要考虑电解液和电极交界处的反应,而不用考虑多孔电极内的传质等过程。

---------------------------------------------------------------------------------------------------------------------------------

按照顺序,我们来到了关于电池工况的定义

绝大部分情况我们会添加一个电接地来让负极接地,然后正极处定义充放电循环或者电极电流。这里的设置按照真实实验来即可。另外,充放电循环的设置虽然是软件帮我们集成了多个事件,但它的效果毋庸置疑,出现非正常情况进行问题排查时不用担心这里会出问题(我自己用事件写的充放电循环和直接使用充放电循环得到的效果是完全一致的)

---------------------------------------------------------------------------------------------------------------------------------按照顺序,我们来到网格的定义:

作为一维模型,网格不用我们自己再做设置,默认构建全部即可。在高维模型中,18650的建模可以用扫掠来快速划分,软包电池可以用立方体来快速划分,在后面进阶篇会提及。

---------------------------------------------------------------------------------------------------------------------------------

研究 

在完成上述定义之后,我们就可以进行仿真了,通过研究来确定仿真的一系列设置:

作为电池仿真,第一步我们需要添加电流初始化分布来进行初始化。

第二步,添加瞬态研究来仿真时变情况。在不确定仿真是否能一次跑通的情况下,我建议用小步长短时间进行尝试,如果进度中:时间的值大于0了,那么恭喜你,初始化是成功的,反之在此之前报错,您可以去检查初始化是否合理或其他很明显的违反物理常识的设置问题(Comsol不能仿真违反物理学的现象)。

25/2/24更新 后天去面试答辩,这几天争取不断~

---------------------------------------------------------------------------------------------------------------------------------

在完成仿真之后,结果中有数据集、派生值、表格以及自己绘制的图。针对数据的处理下文统称为后处理

后处理

首先,后处理的对象是数据集。数据集是储存Comsol在完成一个模型的计算之后部分默认数据的地方。针对锂电池建模,数据据值得注意的是组件下的几个维度选择,由于计算的是P2D模型,所以模型会帮我们计算额外维度并储存,这里的额外维度我的理解是粒子层面维度。如下图所示出现两个额外维度是因为除了嵌锂反应之外还有SEI膜生成副反应的存在。

像宏观层面上的电池电压电流、锂离子浓度等信号,需要调用的是comp1这个组件。处理粒子层面的微观问题,则需要调用额外维度的组件。 

派生值是处理数学运算的地方,它调用数据集中储存的解来完成进阶计算。

表格是储存表格数据的地方,由于可能需要对图形进行输出处理,通常我将需要的数据存储在这里,然后集中导出到Visio中进行加工。使用过程中需要注意覆盖问题。

以一维绘图组为例,简要说一说在绘制所需结果的步骤。

右击一维绘图,可以看到可以向其中添加许多图。线结果图是以某一个线段域为绘图目标的图像选项。例如,我们绘制整个负极域上的锂离子浓度分布就可以调用它。点结果图是以某一点域为绘图目标的图像选项,例如我们希望观察正极端点处的电压的时变情况,就可以调用这个。还有在绘制阻抗谱时需要使用的奈奎斯特图,这个图的绘制稍微麻烦。

EIS的测绘需要在研究中加入电极电流-谐波扰动,并在计算的时候添加频率扰动单独一个研究,注意:如果您既添加了充放电循环又添加了电极电流,则需要禁用一个,不然计算出来的并非静态阻抗情况。在绘制奈奎斯特图的时候进行调用以频率为参数的解。参考表达式如下

在提一嘴来自父项,这个父项指的是上级定义处调用的数据集。 

 

例如,奈奎斯特这里的来自父项,指的就是对地阻抗处进行选择的数据集。

写在后面

在CSDN的第一篇小文就接近尾声了,个人的能力有限,文章所提的观点并非官方观点,只代表个人在使用过程中总结的私人结论。有问题欢迎大家在评论区讨论,谢谢!

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值