ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

PSCAD锂电池建模实践:二阶等效电路模型搭建与验证

PSCAD锂电池建模实践:二阶等效电路模型搭建与验证 搞PSCAD锂电池仿真的朋友我特别懂你这份焦虑。先说结论PSCAD官方库和公开模型库里确实没有那种“装完就能用”的锂电池标准模型网上搜一圈下来的东西大半是论文里的要么只有原理图没有文件要么发出来的版本和自己装的软件对不上。但这不代表做不了我把自己从摸索到跑通的过程完整写出来从建模思路到参数获取再到PSCAD里动手实现和报错排查一步一步讲清楚。这篇东西主要面向两类人刚开始接触储能仿真、希望在PSCAD里搭电池模型做并网验证的研究生以及做工程项目的电气工程师需要在系统级仿真里加入电池动态而不是简单的恒压源。1. 先搞清楚PSCAD里缺的是什么才能知道自己要搭什么1.1 官方库的真实情况PSCAD自带的Master Library里和储能相关的元件其实不少像光伏阵列、风机、蓄电池Battery元件都有。但原装这个蓄电池元件你要看清楚它的本质它本质上是一个电压源加一个定值内阻参数里能设置额定电压、容量和内阻但它是用理想化的线性关系来描述充放电行为。换句话说它没有完整的端电压动态特性不随SOC荷电状态非线性变化也没有极化效应、浓度极化、温升这些电化学特征。如果你只是做最简单的“电池接个逆变器”这种系统级别演示原装元件凑合能用。但我试过之后就放弃了因为在做并网控制时电池端电压在SOC不同区间的变化直接影响到DC母线电压的稳定性和逆变器控制策略的效果。用一个恒定内阻模型去设计控制器到了真实验证阶段会出现较大的偏差尤其是SOC接近上限或者下限的时候模型端电压不下降控制器的响应姿态完全不对。1.2 从求助帖看到的两种典型需求在各种仿真论坛和技术群里我观察到求助PSCAD锂电池模型的用户大致分两类一类是做微电网、直流配电网或新能源并网的整体系统仿真需要电池作为储能单元配合光伏、风机、负荷一起工作。这类用户的核心诉求是电池模型要有合理的充放电外特性电压电流关系要真实能够响应控制信号但内部电化学细节不一定要多精细。另一类是专门研究电池本身或BMS电池管理系统算法的比如SOC估算、均衡控制、热管理会希望模型能够输出SOC、端电压、电流等内部状态甚至需要模型支持不同温度和老化程度的模拟。我分享的方案主要针对第一类用的方法是“等效电路模型加自定义元件”这在电池仿真领域是被广泛验证过的工程做法。对于第二类需求等效电路模型也能覆盖一部分比如SOC估算算法验证只要模型能给出精确的SOC曲线就够了。2. 锂电池建模思路的取舍为什么我选中了Thevenin模型2.1 三种主流模型选型对比锂电池仿真模型在学术和工程上大致分三个派别电化学模型、等效电路模型和数据驱动模型。电化学模型以准二维P2D模型为代表它从锂离子浓度分布、电极动力学出发物理意义最强精度最高但解算复杂包含大量偏微分方程仿真计算量非常大在PSCAD这种以电磁暂态仿真为主的平台里跑很吃力而且PSCAD自带的脚本环境对偏微分方程的求解支持也很别扭。数据驱动模型其实就是各种神经网络、支持向量机拟合电池外特性好处是精度上限高但极度依赖训练数据而且算出来的结果往往缺乏物理可解释性工程上验证起来不放心。等效电路模型走的是中间路线用电阻、电容这些基本电路元件来描述电池的动态行为在精度和复杂度之间做到了平衡。具体又分为Rint模型、一阶RC模型和二阶RC模型。Rint模型就是官方蓄电池那种一个理想电压源串一个内阻结构太简单没法模拟电池充放电过程中的极化效应动态响应基本没有。一阶RC模型加了一组RC并联网络能模拟电池的快速极化过程在SOC变化不太剧烈的情况下精度还可以。二阶RC模型再加一组RC网络分别模拟电化学极化和浓度极化一个负责快动态一个负责慢动态充放电切换时的瞬态响应描述得更好。2.2 二阶Thevenin模型的数学描述我最后选用的是二阶Thevenin等效电路模型它的电路拓扑简单直观而且PSCAD的自定义元件用脚本实现起来很顺手。数学上可以用以下关系来描述端电压由开路电压OCV减去欧姆内阻上的压降再减去两个RC网络上的极化电压得到。其中OCV不是常量它是SOC的非线性函数R0是欧姆内阻主要来自电解液电阻和电极接触电阻R1、C1构成快动态RC网络对应电化学极化R2、C2构成慢动态RC网络对应浓差极化。把SOC作为状态变量来积分初始SOC可以设定电流对时间的积分除以电池容量得到SOC变化量。因此整个模型实际上是一个连续时间状态空间模型两个极化电压各是一个一阶微分方程SOC也是一个积分关系这三个状态是模型的核心。PSCAD里做这种连续系统非常合适因为EMTDC仿真本身是固定步长的时域积分只要你把微分方程写成状态方程的形式放到自定义元件的脚本里由仿真内核在每个时间步调用就可以得到稳定的数值解。需要注意的是时间步长DT的选择对RC网络的时间常数有要求比如快动态时间常数是R1乘以C1慢动态是R2乘以C2时间步长应该比最小时间常数小一个数量级以上否则数值解会失真甚至发散。我记得第一次搭好的模型时间步长设置成50微秒仿真某个工况时突然发散查了半天发现是快动态时间常数只有几十毫秒和步长的比例不够虽然不至于发散但在波形上出现高频抖动。后来把步长调到20微秒就正常了。这个经验后面在报错排查部分会专门说。3. 核心难点电池参数怎么来怎么拟合才能用3.1 没有实验数据时怎么办很多人搭建等效电路模型卡在参数获取上。我手里没有电池测试柜也做不了HPPC混合脉冲功率特性实验这时候有两个替代方案一是找公开论文里的参数不少电池建模论文会在附录或者正文里给出辨识后的参数表格注意看用的是哪种电池、额定容量是多少、SOC范围是多少尽量选和自己仿真场景接近的千万不要跨电池类型乱套参数。二是如果手头有锂电池的实测充放电数据哪怕是手机电池或者电动工具电池的数据也可以用来拟合。方法是在固定SOC点施加一个电流脉冲记录端电压的瞬变响应。电压瞬间跳变的部分对应欧姆内阻R0之后缓慢变化的部分用指数函数拟合可以分出快慢两个RC环节的参数。我自己当时是在一篇研究磷酸铁锂电池建模的论文里找到了一份1.2Ah单体电池的参数表格涵盖了从SOC等于5%到95%每隔10%的R0、R1、C1、R2、C2值还有一个OCV-SOC对应表。拿来直接用在后续和实际系统仿真的对比中发现SOC在30%到80%区间内端电压误差可以控制在比较小的范围内这个精度对系统级仿真完全够用。3.2 OCV-SOC曲线拟合的实操细节OCV-SOC曲线是模型里最重要的静态特性处理不好整个模型都失真。拟合这条曲线的思路很简单先做一个小电流恒流充放电或者间歇静置法测量得到一组SOC点的开路电压值然后用插值的方式把这条曲线变成连续函数。在PSCAD里实现这条曲线我用了分段线性插值。编写脚本时将SOC以5%为间隔分成若干区间每个区间内电压随SOC线性变化。这里的技巧是避免采用纯数学的高次多项式拟合那样在曲线端点容易出现过冲现象也就是著名的Runge现象。举个例子一个9次多项式强行穿过10个数据点在两个端点之间会出现明显震荡插值出来的OCV值反而比表格原始数据更离谱。分段线性虽然看起来简单粗暴但胜在稳定可靠而且模型计算开销小PSCAD跑起来不吃力。另外要注意SOC不能真的充到0%或者100%实际电池的SOC工作范围通常是10%到90%超出这个范围OCV曲线变化极其剧烈模型数值上容易出现溢出。我在模型里限定了SOC的上下阈值超过阈值就停止积分防止仿真中出现负SOC这种物理上不可能的情况。4. PSCAD自定义元件搭建实战4.1 从建壳子到写脚本的完整步骤PSCAD里创建自定义元件我是按照“先定义外观、再定义端口和参数、最后写脚本代码”的顺序来的。打开元件编辑器后先把元件的图形外观画出来推荐在图形里画出中间的正负号标志和输入输出箭头这样放到画布里拖动接线时一眼就能认出方向。接着定义输入输出端口。我的模型需要输入外部电流信号同时输出端电压、SOC和两个极化电压。端口类型必须定义正确输入端口接控制信号输出端口接测量或者控制系统的其他部分。我在这里踩过一个坑把输出端口类型选成了Electrical Output导致后面的信号接到示波器时出现类型不匹配的报错。实际上在PSCAD中自定义元件内部的逻辑计算应该用的是Control类型的信号端口电气量需要走专门的电气接口。改过来之后一切就正常了。元件参数定义要覆盖电池容量Q、初始SOC、串联单体数N、并联单体数M、OCV-SOC查表数组、以及不同SOC下的R0/R1/C1/R2/C2数组。参数的类型建议用数组类型这样在元件图标的参数框里可以直接输入一组数脚本里通过索引访问。数组参数定义时要注意维度一致性如果SOC分20个点那么其他数组也应该有20个元素我在仿真中就因为一次手误把R1数组少输入了一个值导致在某个SOC点查表时越界报错。4.2 脚本代码的结构与积分实现脚本部分是整个自定义元件的心脏。PSCAD自定义元件支持DSD脚本和Fortran脚本当前主流版本通常采用Fortran来实现自定义计算逻辑。核心结构是定义局部变量、状态变量然后在主计算函数内按顺序执行一遍查表、计算更新、输出赋值。查表我用了一个内部函数先判断输入的SOC处于哪个区间然后按区间线性插值得到对应的开路电压和各个阻抗参数。这样做的优势是代码清晰易懂而且即使以后要修改参数只需要改参数表的位置不用动核心代码。积分更新我用的是前向欧拉法。对SOC来说SOC等于初始值减去电流对时间积分的累积公式里如果是放电电流为正SOC减少充电电流为负SOC增加。对两个极化电压来说每一时刻的变化率等于负的极化电压除以对应时间常数再加上电流除以对应电容。前向欧拉法相当于用上一时刻的值加上变化率乘以时间步长来更新当前时刻的值精度上对系统级仿真足够。因为在PSCAD的固定步长环境下前向欧拉法的稳定条件是时间步长要小于最小RC时间常数的二分之一这个条件在时间常数远大于仿真步长的时候完全满足。写脚本过程中还有一点必须留意在脚本里要特判电流输入端口初始时刻可能出现未定义的数值。我在模型里加了一个初始化判断在仿真起始的第一个时间步里把极化电压初始化为0SOC用参数里设定的初始值。如果没有这个处理仿真在开始的第一个毫秒里电压波形会出现一个突兀的跳变看起来像是数值振荡其实就是初始状态没有设置好。5. 那些折磨人的PSCAD报错排查实录5.1 最常见的几类报错速查表PSCAD报错可以说是劝退新手的第一大杀手。我把实操里遇到过的高频报错整理成一个速查表对应的解决办法都是自己试出来或者翻手册确认过的。报错现象常见原因解决办法元件脚本在编译时提示Unrecognized variable脚本内部使用的变量名没有在声明区声明把所有局部变量、状态变量、参数变量逐一检查并填写到Declarations仿真开始后提示Illegal argument in function call查表函数的索引超出了数组长度检查SOC对应区间是否在表范围内检查数组维度是否和SOC点数一致输出到一个示波器上的信号数量不对自定义元件的输出端口定义数量和脚本里实际SET_OUTPUT的变量数量不匹配核对元件编辑器中Output端口数量和脚本输出赋值语句是否一一对应提示Multiple connections to output port同一个输出端口被接了两根线在画布里删除多余的连线确保每个输出端口只连出一条信号线仿真过程中波形发散提示Integration failure时间步长过大或者模型中出现除零缩小仿真步长检查RC时间常数和步长比例查找是否存在除以0的情况比如SOC等于0时某些参数公式分母会出现05.2 三个特别容易踩的深坑第一个坑是数组参数输入时维度对不上。PSCAD数组参数输入界面比较原始输入一个数组要用花括号或者空格分隔的形式写在参数框里很多人在复制论文参数表时容易漏掉一个数字。这个报错很隐蔽因为你看到的错误信息可能只是“数组越界”或者“下标无效”不仔细排查根本想不到是参数个数少了。第二个坑是自定义元件端口类型选择。我前面提到过当时把电池端电压输出口定义成了电气输出口结果接给示波器时提示类型错误。后来我把模型内部计算相关的信号端口都定义为Control类型只有需要参与电气回路连接时才使用电气接口这个问题就消失了。记住一个原则自定义元件如果只是做控制策略里的计算模块信号类型全程用Control如果要做真正的电气元件接入主电路那就要用电气端口并搭配内部电气节点。第三个坑是仿真步长和模型快速动态之间的适配。我当时做好模型后做并网运行仿真逆变器开关频率是5kHzPSCAD电路部分要求步长在10微秒量级才能较准确模拟PWM波形。但我的RC快动态时间常数比较小步长如果放松就会在极化电压上出现高频锯齿。后来我把主仿真步长定在20微秒同时把RC网络输出做了一次简单的滤波模型的稳定性和损耗都在可接受范围内。在实际操作里我还遇到过一次很无语的问题模型在某个版本的PSCAD里能跑换到另一台电脑的低版本软件里报错。排查下来是自定义元件脚本里使用了高版本特有的内置函数低版本不识别。如果你的模型要分享给别人用建议尽量减少对特定版本函数的依赖或者在发布前在低版本环境里做一次兼容性验证。6. 模型搭好之后怎么验证它是否靠谱6.1 恒流充放电验证法模型搭完不验证等于白搭。我第一个验证实验是恒流充放电在模型输入端加一个恒定的放电电流观察SOC从100%下降到10%的整个过程同时记录端电压曲线。正常情况下的曲线特征是起始段有一个瞬时压降这是欧姆内阻的作用随后电压缓慢下降中间平缓段对应电池的主要工作区间接近放电末期电压加速下降这是OCV曲线尾部陡降的体现。这个简单实验能一次性验证多个方面SOC是否随时间线性下降、欧姆压降是否和设定内阻吻合、RC动态是否在电流突变时呈现指数响应。如果这几个基本特征都符合模型的静态和动态特性基本就是对的。6.2 动态工况和并网接入验证第二步做动态工况验证。我在PSCAD里用一个可控电流源给电池灌入一个带波动的电流信号模拟实际系统中的功率波动。观察端电压波形时重点看电流突变后电压是否出现了两个时间尺度的指数响应先快后慢这就是二阶RC模型区别于简单RC模型的特征。第三步验证才是真正的实战我把电池模型接入了一个直流母线配合DC/DC变换器做恒压控制验证在有闭环控制的情况下整个系统能否正常工作。这时候模型输出的SOC和端电压就直接参与控制器的反馈计算了。实测发现相比官方自带蓄电池元件二阶Thevenin模型在负载突变的工况下直流母线电压波动更接近实际情况控制器的调节动作也更合理不会出现因为模型过度简化而导致的控制器参数设计偏差。7. 一点个人实操体会从“到处找模型找不到”到最后“自己搭了一个能用”我最大的体会是PSCAD本身不做电池模型并不算缺陷它的定位本来就是一个开放的电磁暂态仿真平台你在里面搭控制逻辑、搭自定义元件本身就是PSCAD玩法的一部分。锂电池模型这类东西生态上就是“文件少、参考散、参数难找”指望下载一个文件拿来就用的捷径基本不存在反倒是花点时间把等效电路模型吃透之后什么拓扑、什么类型的电池都不怕了。最后分享两个小技巧一是参数不要追求一步到位先用一组公开论文参数把模型跑通再慢慢优化二是每次修改参数前把仿真结果保存下来这样对比不同参数对波形影响的时候就能快速定位问题。这套流程我后来重复用了好几次不管是做单体电池、电池组还是接入系统级的储能仿真都能够快速迭代起来。
返回列表