在二次充放电电池、分析电极、腐蚀电化学还有氧化还原电极的实验过程中,往往需要在测试电化学稳态阻抗谱(EIS)之后,还需要对其进行等效电路的拟合(EIS拟合)。经过物理化学家的不懈努力,EIS拟合目前已经发展成熟,许多的拟合软件已经商业化,并且也有很多的教程教导人们如何使用软件。但是一个EIS数据可以对应多个等效电路,因此选择等效电路成为了EIS拟合的一个很重要的点。等效电路的选择可以通过大量地阅读相关专业领域的文献来限定。但是如果是出现了不同于本领域的EIS图谱的时候,就需要到EIS的拟合底层逻辑里面去找寻解决办法。
因为EIS拟合现在已经发展成为一个应用层面的东西,所以我在入门的时候对于底层逻辑并没有研究很清楚就开始动手了。现在再研究EIS拟合的python源代码的时候,我对这个底层逻辑又有了从新的认识。所以写下这个文章来提醒自己和分享给大家。
EIS是改变频率的大小,在单个频率的位置给体系传入一个具有固定振幅的电压,记录体系传出的电流的变化,同时将这个电流和电压的关系通过欧姆定律换算为阻抗值。由于振幅的变化是很微弱同时是正负相消的,所以对体系的影响是很微弱,对体系的物理化学性质没有影响的,是一种近乎稳态的无损的测量方式。另外由于电压在其振幅范围内是随着频率交变变化的(高频就是变化快,低频就是变化慢),所以得到的电流及转换后的阻抗都是有频率变化的特性的。因此,EIS导出的数据是一组(频率,阻抗实部,阻抗虚部)。也可以从侧面的地说明,振幅的大小在结果中是不会直接反映出来的,是属于测试中的控制变量。越大的振幅,在同一频率下,可以提高电流的大小,增强阻抗的收集敏感度,但同时也增加了测试时间。
阻抗分为实部和虚部,实际阻抗的表达式:
Z
=
Z
′
+
j
Z
′
′
Z = Z^{\prime} + jZ^{\prime\prime}
Z=Z′+jZ′′
实部和虚部的值的平方和根号是模量:
∣
Z
∣
2
=
Z
′
2
+
Z
′
′
2
|Z|^{2} = Z^{\prime 2} + Z^{\prime\prime 2}
∣Z∣2=Z′2+Z′′2
虚部与实部的比是相位角的正切值:
tan
ϕ
=
−
Z
′
′
Z
′
\tan\phi = \frac{- Z^{\prime\prime}}{Z^{\prime}}
tanϕ=Z′−Z′′
EIS拟合的底层逻辑就是找到拟合阻抗表达式能够无限接近甚至等价于实际阻抗的表达式。
因此,为了这个目的,我们就要用到电路学上的数学等式进行变换:
在串联电路中,实际阻抗和各部分的元器件的阻抗的总和:
Z
=
Z
1
+
Z
2
+
⋯
+
Z
n
Z = Z_{1} + Z_{2} + \cdots + Z_{n}
Z=Z1+Z2+⋯+Zn
在并联电路中,实际阻抗和各部分的元器件的阻抗的倒数的总和的倒数:
Z
=
1
1
Z
1
+
1
Z
2
+
⋯
+
1
Z
n
Z = \frac{1}{\frac{1}{Z_{1}} + \frac{1}{Z_{2}} + \cdots + \frac{1}{Z_{n}}}
Z=Z11+Z21+⋯+Zn11
为了代入上述的表达式,我们就要知道每个元器件的阻抗表达式:
电阻,阻抗中电阻性越强,整体图形越偏X轴正轴(实部,Z′),因为频率是从大到小:
Z
=
R
Z = R
Z=R
纯电容,阻抗中电容性越强,整体图形越偏Y轴正轴(虚部,-Z′),因为频率是从大到小:
Z
=
1
C
×
j
2
π
f
Z = \frac{1}{C \times j2\pi f}
Z=C×j2πf1
非恒相位元件,是对电容的非恒相位变化的一个补充,当n=1的时候就是恒电容:
Z
C
P
E
=
1
j
(
2
π
f
Q
)
n
{Z_{CPE} = \frac{1}{j(2\pi fQ)^{n}}}
ZCPE=j(2πfQ)n1
Z
Q
=
1
Y
0
2
π
f
n
cos
n
π
2
−
j
1
Y
0
2
π
f
n
sin
n
π
2
{Z_{Q} = \frac{1}{Y_{0}2\pi f^{n}}\cos\frac{n\pi}{2} - j\frac{1}{Y_{0}2\pi f^{n}}\sin\frac{n\pi}{2}}
ZQ=Y02πfn1cos2nπ−jY02πfn1sin2nπ
电感,阻抗中电感性越强,整体图形越偏Y轴负轴(虚部,Z′),可能在最后出现第四象限的点,因为频率是从大到小:
Z
=
L
×
j
2
π
f
Z = L \times j2\pi f
Z=L×j2πf
Warburg阻抗,σ是Warburg系数,阻抗中Warburg表现为一条斜向上的直线,因为频率是从大到小:
Z
=
σ
2
π
f
(
1
−
j
)
Z = \frac{\sigma}{\sqrt{2\pi f}}(1 - j)
Z=2πfσ(1−j)
由于有了上面的这些电子元器件的单独表达式之后,我们可以在前人的研究的基础上,利用他们得出的经验模型,然后得到一个表达式。
得到的直观表达式:
Z
=
R
Ω
+
1
j
2
π
f
C
d
+
1
R
c
t
Z = R_{\Omega} + \frac{1}{j2\pi fC_{d} + \frac{1}{R_{ct}}}
Z=RΩ+j2πfCd+Rct11
将直观表达式转化为可以分拆实部和虚部的表达式:
Z
=
R
Ω
+
R
c
t
1
+
2
π
f
2
C
d
2
R
c
t
2
−
j
2
π
f
C
d
R
c
t
2
1
+
2
π
f
2
C
d
2
R
c
t
2
Z = R_{\Omega} + \frac{R_{ct}}{1 + 2\pi f^{2}C_{d}^{2}R_{ct}^{2}} - j\frac{2\pi fC_{d}R_{ct}^{2}}{1 + 2\pi f^{2}C_{d}^{2}R_{ct}^{2}}
Z=RΩ+1+2πf2Cd2Rct2Rct−j1+2πf2Cd2Rct22πfCdRct2
将要使用的拟合虚部表达式:
Z
data
′
′
=
2
π
f
C
d
R
c
t
2
1
+
2
π
f
2
C
d
2
R
c
t
2
Z_{\text{data}}^{\prime\prime} = \frac{2\pi fC_{d}R_{ct}^{2}}{1 + 2\pi f^{2}C_{d}^{2}R_{ct}^{2}}
Zdata′′=1+2πf2Cd2Rct22πfCdRct2
将要使用的实部表达式:
Z
data
′
=
R
Ω
+
R
c
t
1
+
2
π
f
2
C
d
2
R
c
t
2
Z_{\text{data}}^{\prime} = R_{\Omega} + \frac{R_{ct}}{1 + 2\pi f^{2}C_{d}^{2}R_{ct}^{2}}
Zdata′=RΩ+1+2πf2Cd2Rct2Rct
然后通过给定一些初始值,如RΩ、Rct、Cd。而2πf是用实验用的频率变化段(一个数列)。随后,通过非线性最小二乘回归法,不停地按一定规律增大或减少地变化RΩ、Rct、Cd等导出参数值,以实际的阻抗实部、阻抗虚部、2πf作为对象,拟合得到一个二维向量(Z′model , Z′′model)和方差χ2。
χ
2
=
∑
n
=
0
N
[
Z
data
′
(
ω
n
)
−
Z
model
′
(
ω
n
)
]
2
+
[
Z
data
′
′
(
ω
n
)
−
Z
model
′
′
(
ω
n
)
]
2
\chi^{2} = \sum\limits_{n = 0}^{N}\left\lbrack Z_{\text{data}}^{\prime}\left( \omega_{n} \right) - Z_{\text{model}}^{\prime}\left( \omega_{n} \right) \right\rbrack^{2} + \left\lbrack Z_{\text{data}}^{\prime\prime}\left( \omega_{n} \right) - Z_{\text{model}}^{\prime\prime}\left( \omega_{n} \right) \right\rbrack^{2}
χ2=n=0∑N[Zdata′(ωn)−Zmodel′(ωn)]2+[Zdata′′(ωn)−Zmodel′′(ωn)]2
如果χ2可以达到一个比较满意的值就可以输出(Z′model , Z′′model)的一个二维数组。同时输出RΩ、Rct、Cd的三个一维数组。这时候χ2如果足够小,拟合的能斯特图和实际的能斯特图可以达到比较好的重合效果。
要知道(Z′model , Z′′model)数组都是变化的,所以RΩ、Rct、Cd的三个一维数组也是变化的,最终导出RΩ、Rct、Cd的三个值是平均值,因此也会有三个值的标准差。在Zsimpwin中会显示每个RΩ、Rct、Cd的标准差值σ,如果有哪个值的标准差σ超出了预期(例如1),这时候我们就要以RΩ、Rct、Cd的输出值作为输入值,重新改变(一般是减少)RΩ、Rct、Cd的值输入到直观表达式中,再走一次最小二乘法拟合,直至RΩ、Rct、Cd的标准差值σ到达预期,同时RΩ、Rct、Cd的值有一定的物理意义(如溶液电阻不可能太大)。这时候RΩ、Rct、Cd就可以作为电极表面的平均变化过程的物理值来和其他情况相对比较。前提是其他情况也是有相似的拟合过程(初始输入值和直观表达式)。
上述的EIS拟合的底层逻辑说明了拟合的过程需要满足三次验证,一次是最小二乘法的χ2符合预期,另外一次是各个单位输出值的标准差值σ符合预期,最后一个是各个单位输出值在其物理意义内。
一个流程图
参考自:
https://www.baidu.com/link?url=w34yjUqRP3xeLsBePE382F7A96rANvX2EFM2lGcx07ju6U0WDP2hJoQbdbH2oBTvflZkWui5-obJQbWDBjY8yUpVsTVXWsAqFHJir5OKfvZq46JrywkX-oOOhIAQgeW4&wd=&eqid=c80b7eee0006c35b000000066009bbca
https://impedancepy.readthedocs.io/en/latest/circuit-elements.html