(本文来自专供干货的“编辑之谭”,感谢谭编用治学的态度做内容)
4月25日,『编辑之谭』分享了两种微分求导方法(平均求导法、交叉求导法),该文一出就受到了广泛关注。
谭编首次提出的这两种微分求导方法,可以对电池的充放电曲线数据进行处理,计算得到微分电容曲线数据,完美地绘制出电池的微分容量曲线,弥补了Origin绘图软件微分不成功的缺陷。
那么,这两种微分方法到底
科不科学?严不严谨?可不可行?
有没有修正其误差的修正方法?
看看来自武汉大学的Crusher博士怎么用Matlab编程来验证这些问题!
一劳永逸地搞定微分电容
Crusher
武汉大学博士生
能源材料是一个很热的话题,而对于奋战在一线的研究者们来说,循环伏安(CV)和线性伏安(LSV)测试几乎必不可少。然而,在大量文献中,CV曲线似乎并非必需的数据曲线,取而代之的是微分电容曲线。
不少同学参考这些文献方法,试图得到类似的微分容量曲线,但是,实际上会遇到很多困难。要么不知道怎么得到,要么在利用Origin绘图软件进行微分处理时,得到的一定是类似下图的奇怪结果。
图1 采用Origin微分得到的微分容量曲线
满屏的竖线,第一感觉往往是:头大!
至于为什么会这样,主要是由于仪器采点的原因,或者仪器精密度的限制,导致直接作微商的过程出现了很多0/0的不定型,而0/0的不定型在数学上既可以是0,也可以是无穷大或无穷小。
虽然,谭编提出的两种方法比较完美地获得了微分电容曲线,这两种方法的科学性引起了我们质疑。笔者采用Matlab编程,从Excel数据文件中读取充放电数据,一键处理并绘制出微分电容曲线。
采用谭编提出的平均求导(方法1)和交叉求导法(方法2),以及笔者综合考虑这两种方法的误差而提出的均值法(方法3),即对两种方法的计算结果再次求均值的方法,对比研究并验证这3种方法对电池充放电曲线求解微分电容曲线的科学性、准确性、可行性。同时对磷酸铁锂单平台、多平台特征的充放电数据,以及多次循环数据进行了一键处理,验证其可行性。
本文主要讨论以下3个问题:
问题1:怎样求微分电容?
问题2:微分电容到底是什么?
问题3:从数学上进一步深层探讨求解微分电容方法的可信性和局限性。
我们编写的Matlab脚本如下(左右滑动,可以阅读完整代码),可全选复制Matlab源代码,也可留言或联系谭编微信免费获取。
1%Matlab源代码
2clc
3clear all
4A=xlsread(‘test nfpcv.xlsx’);
5n=size(A,2)
6A;
7figure(1)
8for i=1:n/2
9 plot(A(:,2*i),A(:,2*i-1))
10 hold on
11end
12for j=1:n/4
13 name(2*j-1,:)=[‘第’ num2str(j),‘次充电’];
14 name(2*j,:)=[‘第’ num2str(j),‘次放电’];
15 legend(name)
16 title(‘充放电曲线’)
17end
18d=150;
19figure(2)
20for i=1:length(A(:,1))-d
21 for j=1:n/2
22 C(i,2*j-1)=(A(i,2*j-1)+A(i+d,2*j-1))/2;
23 C(i,2*j)=((A(i+d,2*j))-(A(i,2*j)))/((A(i+d,2*j-1))-(A(i,2*j-1)));
24 end
25end
26for j=1:n/2
27 plot(C(:,2*j-1),C(:,2*j))
28 hold on
29end
30for j=1:n/4
31 name1(2*j-1,:)=[‘第’ num2str(j),‘次充电微分电容’];
32 name1(2*j,:)=[‘第’ num2str(j),‘次放电微分电容’];
33 legend(name1)
34 title(‘方法1:平均求导法’)
35end
36d1=150;
37figure(3)
38for i=1:length(A(:,1))-d1
39 for j=1:n/2
40 D(i,2*j-1)=A(i+d1/2,2*j-1);
41 D(i,2*j)=((A(i+d1,2*j))-(A(i,2*j)))/((A(i+d1,2*j-1))-(A(i,2*j-1)));
42 end
43end
44for j=1:n/2
45 plot(D(:,2*j-1),D(:,2*j))
46 hold on
47end
48for j=1:n/4
49 name2(2*j-1,:)=[‘第’ num2str(j),‘次充电微分电容’];
50 name2(2*j,:)=[‘第’ num2str(j),‘次放电微分电容’];
51 legend(name2)
52 title(‘方法2:交叉求导法’)
53end
54%方法3 将两者相加
55 figure(4)
56for i=1:min(length(A(:,1))-d,length(A(:,1))-d1)
57 for j=1:n/2
58 E(i,2*j-1)=0.5*(C(i,2*j-1)+D(i,2*j-1));
59 E(i,2*j)=0.5*(C(i,2*j)+D(i,2*j));
60 end
61end
62for j=1:n/2
63 plot(E(:,2*j-1),E(:,2*j))
64 hold on
65end
66for j=1:n/4
67 name3(2*j-1,:)=[‘第’ num2str(j),‘次放电微分电容’];
68 name3(2*j,:)=[‘第’ num2str(j),‘次充电微分电容’];
69 legend(name3)
70 title(‘方法3:两者方法取均值’)
71end
72figure(5)
73for j=1:n/2 % 同时比较三种方法求出的第一周充放电曲线的微分电容
74 plot(C(:,2*j-1),C(:,2*j),‘g’)
75 hold on
76 plot(D(:,2*j-1),D(:,2*j),‘b’)
77 hold on
78 plot(E(:,2*j-1),E(:,2*j),‘m’)
79 legend(‘方法1’,‘方法2’,‘方法3’)
80 title(‘三种方法比较’)
81end
不需要懂电化学知识和数学原理,尤其矩阵运算方面的知识,只需要将你的数据拷入到excel表格中,按电压-容量(或比容量,都可以,二者无所谓),有一条曲线就粘贴一次“电压-容量”,有多条曲线就粘贴多次。多说无益,我们直接上图吧。
图2 将充放电数据拷入Excel文件
为了验证脚本的可信性,我们分峰形比较简单和多对峰分别讨论。
1.1 简单峰(LiFePO4)
LiFePO4 是一种成熟的电极材料,目前被比亚迪,宁德时代等各大电池厂商大量使用。磷酸铁锂有一个平坦的工作电压平台,但可逆容量不甚高,下图是我们曾经做的一次掺杂,可见充放电平台基本上保持不变。现在利用我们编写的Matlab脚本程序,自动读取该曲线的Excel数据文件,计算它的微分电容曲线。
图3 改性的磷酸铁锂的充放电曲线(研究对象)
利用我们编写的Matlab脚本,对方法1、方法2、方法3进行了验证,其结果如图4所示。
图4 三种方法的微分容量曲线
(点击图片,可放大查阅)
可见,三种方法几乎没有明显差别(放电的小峰正是由于掺杂引起的),这主要是步长d,d1都取得较小。如果得不到较好的结果,请直接尝试修改不同的步长值。另外,如果步长较大时,推荐使用方法3,因为方法1和2会分别产生一个负的或正的误差,方法3采用两者均值,能在一定程度上可以消除数据处理带来的误差。
(这是一个广告)
上述的验证结果表明:我们编写的Matlab脚本对简单峰的识别是非常成功的,那么如果是多条曲线,而且是多个充放电平台(多峰)曲线的复杂情况呢?
1.2 多峰多曲线
图5是一种具有多个充放电平台的充放电曲线,不用改脚本,直接将充放电的数据拷入到excel表格中,用Matlab读入后,运行即可。
运行结果:
图5 具有多平台的充放电曲线(研究对象)
图6 多平台充放电曲线的微分求导结果
(点击图片,可放大查看)
对比可见,除了主要的峰形,3.2V等处的小峰也清晰可见,这有助于对充放电机理的深刻理解。所以该脚本对于多对峰、多条曲线的处理能力也是很不错的。唯一要注意的是,如果d取得较大,可能会造成曲线中峰的起止位置发生左右漂移,人为地制造出极化,为此,可将第39行(即第5行,下面只是节选代码)的d1除以2。
1d1=150;
2figure(3)
3for i=1:length(A(:,1))-d1
4 for j=1:n/2
5 D(i,2*j-1)=A(i+d1/2,2*j-1);
6 D(i,2*j)=((A(i+d1,2*j))-(A(i,2*j)))/((A(i+d1,2*j-1))-(A(i,2*j-1)));
7 end
8end
说了这么多,如果某些同学习惯在origin中作图,怎样导出微分后的数据呢,只需加一条输出语句‘xlswrite’即可,具体用法请找“度娘”(百度)。
我们提供了这个Matlab脚本,欢迎在本文下方留言,看大家的反响,如果有必要的话,后续谭编再出一个Python脚本。
如果你是个实用主义青年,只是在文章中单纯地用一下,上面的内容就够了,学到这一步就可以了,这个Matlab脚本足以应付此类曲线的数据处理。
但勤奋好学的你肯定不满足于此,肯定想要理解微分电容底层的电化学知识,那么请往下看。
细心地人可能早就发现,dQ/dV~V的峰形跟cv的是一样的,但具体为什么可能有些人并不理解,讲得稍微深刻一点的地方,一般是这么介绍的:
(公式采用【编辑之谈】公众号的【upub编辑器】)
后面呢?没了。那为什么微分电容和CV的结果二者一致呢?
事情得从一个原始的谁都知道,但绝大多数没怎么理解的东西说起,这个东西叫:平衡电势。
什么是平衡电势,百度上的定义是这样的:
这段话大家都觉得很有道理,也都读得很明白。那还是这个问题,(用人话讲)平衡电势到底是什么?
平衡电池指的是在某种状态下,一个物质(设为M)不从外回路得到/失去电子,变成自己的还原/氧化态(也就是M坚持做自己)的情况下,材料自由能的外在体现。
如果外部条件变化,这种平衡就会被打破,这正好就是贯通热力学和动力学的桥梁:
(公式采用【编辑之谈】公众号的【upub编辑器】)
为什么这么说呢?如果有外力,比如出现另外一个比它的氧化态还强的氧化剂,或比还原态还原性还强的还原剂,或者直接充放电(本质还是强行从材料夺电子或给电子)。
更形象点说,当外部氧化剂(设为O)的电位比M的高时,M就会被O夺走电子(热力学上说是这样,但具体能不能实现还要看这个过程有没有其他阻力,所以就有了所谓动力学的问题),这时候是不做功的.
但如果将二者隔开(设法隔开),并在中间架一根导线,就能让电子从外部流动,这就是成了电池。
但如果是人为地缓慢的提高电势,而不是直接给一个强的氧化剂去夺取电子,会怎么样呢?
开始时,电位降低,电子夺取不下来,外电路电流很小(从而电量,即容量也很小,q=it)。
当电位提高到到平衡电势时并稍加一个过电位克服极化(这可能又是一个谁都知道但大多数人理解得一般的概念,以后有机会开专题讲)的阻力,这时候M就会快速地变成它的氧化态,剧烈地向外给出电子,放电过程则正好相反。
如果这个电子出得去、回得来,那就可以做成二次电池反复利用;如果出得去回不来,那就只能做成一次干电池。
有了上面的概念,我们再来理解为什么微分电容和CV是一回事呢?
上面提到,人为地提高电势到平衡电位以上,会剧烈地夺取M上的电子,对外显示的就是电流/容量。而认为提高电势,即
(1)以一个横定的速度直接提高电势(CV);
(2)以一个横定的速度灌入电流(电势不是匀速上升)来实现,这就是恒电流充放电曲线。当然也可以既非恒电流也非恒电势,但不便于研究问题,用的不多。
如果是(1),当电势低于平衡电势时,M不会受影响,不会失去自身的电子。当电势到达平衡电势时,这是由于外力的存在,M体系内的能量发生变化,电子被外回路夺取,对外显示,就是出现了峰。如果走1圈,那就是循环伏安CV,只走半圈,那就是线性伏安LSV。所以本质上说,CV中出现峰值,是说材料在这个电位处被打破了平衡。至于出现多个峰,即可能由于不同电对中心(如Fe和Mn)的平衡电势本就不一样,也可能由于同一个电对(比如Fe)在材料中处的晶体位置不一样,这个位置影响了它的平衡电势。[1]
如果是(2),向M不断灌入电流时,电位也在发生变化,如果低于平衡电势,灌入的电流相当于直接给了一个导体正电荷,但它无法吸纳,就会使得的电位迅速变化,这就是充放电曲线中的类似于直线的部分(如图7中被蓝色框内的部分)。但当电势继续升高,接近第一个平衡电势,就会出现正电荷被吸收,导致电压升高得较慢,如第一个圈。如果第二个平衡电势处的M特别多,就会出现给多少正电荷都能吸收(M处于吃正电荷吃不饱的状态),就会使得电势基本维持了一个平台,而这时候,还是在向外回路剧烈给电子。
图 7 充放电曲线的特征分析
到这里就可以看出:不管是CV还是重放电曲线,充电到达平衡电势并超过它时,都会向外输出大量电子,电子最直观的体现就是电流增加,所以在CV曲线中会出现一个峰值,而在充放电曲线中会出现一个平台,二者的本质是完全一致的。做一个简单的微分变化:
(公式采用【编辑之谈】公众号的【upub编辑器】)
平衡电势负极处,会伴随着一个很大的电流I。
还有一种理解方式是:将上面的图形逆时针旋转90°(如下),即做成容量-电压曲线,你们发现了什么? 正是Q-V 曲线在每个V 处的斜率,而平台处正是曲线斜率最大的地方!
图 8 充放电曲线上斜率的物理意义
到这里,小编将手把手地帮你彻底了解了微分电容是怎么一回事,从而做到库里有粮,心里不慌,以不变应万变。如果还有不理解的地方欢迎在本文末尾留言提问。
如果你是个标准的化学学霸而对数学不感兴趣,那么到这里也就可以了,但是作为祖国新时代的大学生,我想你会忍不住看第3个问题。
答案是:不严谨,但是……。
导数和微分直接的关系是什么?变化量和微分之间的关系又是什么?
我们先看导数定义:
其中要求Δx趋于0,而这在我们采的数据点中是不成立的。导数也可以这样定义:
图9 微分的定义及其几何意义
可见,导数是微分的比值。而微分与变化量之间的关系为:
图10 微分与变化量之间的关系
变化量Δy等于微分dy以及和一个比dy更高阶的无穷小的和,所以dy只是Δy的主要部分。而在我们的dQ/dV 曲线的求法中,我们直接以ΔQ代替了dQ,这是不严谨的。
同时还有另一个地方也有问题:因为避免出现竖线(即出现很多0/0的不定型),我们对曲线上的点都做了一定的处理,比如跨步长取点。
这样实际上求出来的是两个点之间割线的斜率,而不是某一个点处的斜率。
那怎样完美的求微分电容曲线呢?理想的答案是有一台非常非常精密的充放电仪(目前一般实验室用的都在微安级别),做出十分光滑的充放电曲线,直接对该曲线严格按数学方法求导,便是真正的微分电容曲线。
这可能是“你想”而不是“理想”的状态吧?!
尽管如此,该文还是为计算微分电容曲线提供了可行的方法,在一般的数据处理中,已经足够了。
【参考文献】
[1] X. Pu, H. Wang,T. Yuan, S. Cao, S. Liu, L. Xu, H. Yang, X. Ai, Z. Chen, Y. Cao, Energy Stor.Mater. (2019) DOI 10.1016/j.ensm.2019.1002.1017.
本文提出的这3种微分求导方法,可以针对任何曲线,计算其微分曲线,可以从微分曲线中找到非常细微的变化。例如,从热重(TG)曲线数据,通过计算微分曲线得到相变温度、结晶水失水反应温度、脱水反应温度、分解反应温度、恒重温度等等。
大家可以尝试验证一下,从TG曲线数据计算其微分曲线,并与实验测得的一次微分DTG曲线对比,研究是否吻合?如果是,那我们可以不用做DTG曲线了!
有兴趣的网友,欢迎利用这两种方法,对您所遇到的任何实验数据曲线进行微分处理,验证一下谭编提出的这两种微分求导方法的可行性、普适性。
原创文章,作者:菜菜欧尼酱,如若转载,请注明来源华算科技,注明出处:https://www.v-suan.com/index.php/2023/11/17/1b7b286537/