ARTICLE DETAIL

资讯详情

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

锂电池CC-CV充电策略的Simulink仿真建模与参数整定

锂电池CC-CV充电策略的Simulink仿真建模与参数整定 1. 为什么CC-CV成了锂电池充电的事实标准——先搞懂电池在闹什么脾气锂离子电池这东西能量密度高、循环寿命理论上也不错但用起来是出了名的娇气。充电这事儿要是处理不好轻则容量衰减、内阻增大重则直接热失控。我见过不少刚接触电池仿真的人上来就把充电模型简化成一个恒流源往电池里灌电跑出来的SOC曲线倒是挺漂亮但拿这个模型去验证BMS策略基本是自欺欺人。真实锂电池的充电行为和理想的灌电流模型差得远。锂离子在负极石墨颗粒里的嵌入过程受固相扩散速率限制正极材料三元、磷酸铁锂等的晶体结构在高压状态下又趋于不稳定。这就导致电池在充电末端电压上升速度极快极化内阻急剧增大。如果这时候还按大电流猛灌负极表面很容易析出锂枝晶——这是电池内部短路的头号隐患。恒流恒压CC-CV充电策略本质上是给电池的脾气上了两道保险。第一段恒流CC阶段以设定电流快速补充电量一直充到电池端电压达到截止电压比如单节4.2V第二段恒压CV阶段端电压锁死不变电流自然衰减直到衰减到截止电流通常是0.05C~0.1C充电结束。整个过程避免了两件事一是避免电压超限导致正极结构破坏二是避免末端大电流导致负极析锂。用Simulink来做这个仿真模型价值在哪里实车或者BMS台架测试成本高、周期长而且很多极限工况比如低温充电、老化电池充电很难安全复现。仿真模型搭好之后你可以随意改电池容量、内阻、充电倍率、温度相关参数看CC-CV切换点怎么移动、充电时间怎么变化、极化电压怎么积累甚至可以拿来做充电策略的优化预研。这篇文章我会把模型架构、参数计算、控制逻辑、调试踩坑一条龙讲清楚面向的读者是电池系统工程师、BMS算法工程师以及正在做课程设计或毕业设计的同学。2. 仿真模型的顶层架构与信号流设计——别一上来就堆模块2.1 模型应该几分法顶层模块划分的基本思路我调试过的不少模型问题不在某个模块本身而在顶层结构。有些人习惯把整条充电链路画在一张大图纸上电阻、电容、开关、控制器全部摊平结果信号线绕得像毛线球参数改了这头那头不知道谁引用了它。我在搭这类模型时习惯性按物理对象做模块划分。顶层至少分四块电池本体模块用于描述端电压、SOC、内阻随工况的变化。充电控制模块负责CC-CV策略的切换逻辑与给定值计算。功率变换模块模拟充电机的输出特性受控制信号调节。测量与显示模块电压、电流、SOC、充电容量的记录与波形导出。这种划分方式的好处是每个模块能独立验证。比如我先单独给电池模块跑一个1C恒流放电看SOC从100%到0的曲线是否合理再单独测控制模块给定一个固定的电压/电流指令看切换逻辑是否灵敏。全部单点验证通过再连起来跑联合工况排查起来效率高得多。2.2 信号流方向这里最容易被初学者搞反充电模型的信号流方向是另外一个高频翻车点。电池端电压 开路电压 − 极化电压 − 欧姆压降注意符号。放电时端电压低于开路电压充电时端电压高于开路电压。有些仿真模型把压降方向搞反了充进去的电越多端电压越低这显然违背了电池的基本电气特性。正确的信号流应该是充电控制模块给出电流指令 → 功率变换模块等效为一阶惯性环节输出充电电流给电池模块 → 电池模块根据电流值、SOC、温度更新开路电压和内阻计算出端电压 → 端电压反馈给控制模块判断CC-CV切换是否到位 → 同时端电压和电流进入测量模块记录。这一条闭路顺序不能乱。我见过有人把控制模块放在测量模块后面也就是先量测端电压、再计算指令值虽然仿真也能跑出结果但物理意义上这个控制延迟是人为引入的并不符合真实充电机的运行逻辑。2.3 仿真步长与求解器选择的经验值锂电池充电模型是一个典型的刚性系统电池本身的动态相对较慢时间常数从几十秒到几分钟但控制器的PWM脉宽调制动态很快开关频率通常在10kHz以上。若你用定步长求解步长必须压到微秒级才捕捉得到PWM仿一小时充电会慢到怀疑人生。我的做法是分层解耦。控制模块里的PWM比较器用Pulse Generator按开关频率发出脉冲而电池模块本身的动态用变步长求解器跑。在Simulink中打开模型配置选择ode23t或ode15s这类刚性求解器相对容差设为1e-4最大步长限制在0.01s以内。这样既保证了控制信号的表示精度又不会让电池模块的慢动态拖垮整体仿真速度。一台普通笔记本跑完整段2小时充电大约几分钟内就能完成。3. 电池等效电路模型一阶RC与二阶RC别在这个环节敷衍3.1 等效电路模型到底在模拟什么电池不是一个纯电压源它内部有欧姆内阻电解液电阻、集流体接触电阻还有电化学极化与浓度极化。极化过程有记忆效应——突然改变电流端电压不会瞬间跳变到位而是会以一个指数形式逐渐趋近新稳态。经典做法是用RC网络来模拟这种弛豫行为。RC网络阶数越高拟合真实电池端电压瞬态响应的精度越高但参数辨识工作量也成倍上升。一阶RC模型只有一个极化电阻R_p和一个极化电容C_p适合做策略验证二阶RC增加了一个描述浓度极化的RC对精度更高但参数翻倍。到底怎么选我的判断标准很朴素如果是研究CC-CV充电切换策略这类以端电压为核心控制变量的场景二阶RC更踏实因为CC阶段的极化电压估计不准会直接影响CV阶段的切换时机判断。3.2 参数怎么来别指望手算用实验辨识电池模型参数的确定工程上用的最多的是HPPCHybrid Pulse Power Characterization测试法。做法是给电池施加特征脉冲电流记录端电压响应曲线再从曲线上分段提取参数电流脉冲瞬间的电压跳变 → 欧姆内阻R_0电流撤去后的电压弛豫段 → 极化电阻R_p和极化电容C_p不同SOC点重复上述操作 → 得到各参数随SOC变化的查找表在Simulink里我会把SOC从0到1分成20个点每个点用一维查找表存对应的R_0、R_p、C_p。注意充电和放电的极化特性往往不对称严格来说应该分别做充电方向的辨识实验。但很多研究论文里直接用放电参数替代充电参数——这在策略验证层面问题不算太大但如果你要精确评估充电末端电压过冲最好还是用充电方向参数。没有实验条件时也可以用文献值。比如对一款常见的NCM三元电芯2Ah容量常温下一阶RC模型的典型参数大约在R_0 30~60 mΩ、R_p 10~20 mΩ、C_p 1~3 kF这个量级。注意毫欧和千法同时出现时时间常数是R_p × C_p算出来是几十秒——这正好对应电池极化弛豫的主导时间尺度。3.3 开路电压与SOC的映射关系决定仿真精度的暗线很多人把OCV-SOC曲线当成一个线性关系来处理这是模型误差的主要来源之一。磷酸铁锂电池的OCV曲线在中段非常平坦电压基本不变只有接近0%和100%时变化剧烈而三元锂电池的OCV曲线相对线性但仍有明显的平台和拐点。在搭建Simulink模型时这一条曲线应该用Lookup Table模块做插值不能用一个多项式公式硬拟合全区间——高阶多项式的端点振荡会让你充电末端的电压预测严重失真。我习惯把OCV-SOC曲线做成50个数据点的查找表在CC阶段结束时能精确捕捉到端电压达到截止电压的瞬间。另外提醒一句OCV-SOC曲线本身也受温度影响。常温数据拿去做0℃低温充电仿真CV阶段的电流衰减行为会和实车明显不符。如果你的模型要覆盖低温工况OCV-SOC至少要做三个温度点-20℃、25℃、45℃的二维查找表。3.4 温度与老化参数这层复杂度你按需决定基础模型跑通之后很多工程师会想叠加温度影响和老化影响。说实话这一步做与不做取决于你的目标。如果只是想验证CC-CV策略逻辑本身常温新电池状态的固定参数完全够用但如果要评估快充策略对电池寿命的影响就不得不引入容量衰减和内阻增长模型。我在做长循环仿真时加了一个最简单的老化模型每完成一次100%充电循环容量乘以0.9998内阻乘以1.0002。这种粗粒度的处理虽然谈不上精准但能让你观察到几十个循环后充电时间的趋势性变化——对于策略层面的横向比较足够了。4. CC-CV控制核心状态切换与PI参数整定的Art4.1 切换逻辑比你想的更微妙CC到CV的切换条件教科书上写的是端电压达到截止电压即切换。但真实设备不会这么粗暴。如果你在CC阶段把电流死死顶在设定值一旦端电压触顶立即砍电流进入CV端电压会因为极化弛豫而短暂回落然后再缓慢爬升回目标值——这个过程会出现一个小小的电压凹陷虽然不影响最终结果但给CC阶段的电流调节器一个错误的反馈信号可能引起小幅振荡。更稳妥的做法是在接近截止电压时提前降电流。比如设定一个电压窗口当端电压达到截止电压 - 50mV时电流指令值从额定C倍率线性降低直到端电压正好贴合截止电压。窗口宽度、降流速率才是充电策略真正需要调的东西。4.2 PI参数整定拿频域设计思路不要瞎试CC阶段电流环和CV阶段电压环本质是两个单闭环PI控制器。我见过很多人直接双击PI模块改几个数就开跑波形振荡了就开始随手调——这不是工程方法。电流环的被控对象是功率变换电路动态较快PI参数可以整定得较激进。先把电流环单独拿出来给阶跃指令观察超调量与调节时间。一般把PI积分时间常数放在5~20ms量级比例增益取决于功率变换器的放大倍数。电压环的被控对象是电池内阻 极化RC网络动态比电流环慢一个数量级时间常数动辄几十秒。PI参数里积分时间必须大于极化时间常数否则电压环在充电末端会持续振荡。一种常用技巧是电压环PI参数取极化时间常数的0.8~1.2倍作为积分时间比例增益控制在较小的范围以保证稳定性。切换过程还有一个容易忽略的点当CC切换到CV时电流环的输出占空比与电压环的输出占空比必须做到无扰切换。否则切换瞬间占空比跳变电流会突变。无扰切换的具体做法是给两个PI控制器加抗积分饱和Anti-windup逻辑切换时用当前占空比初始化新投入环路的PI输出。4.3 一个值得复现的完整控制框图思路下面给出一个我在实际项目中用过的模块接线逻辑方便各位对照自己的模型结构电流给定计算模块根据充电阶段标志位输出电流指令。CC阶段为恒定值CV阶段由电压环PI输出换算。电压环PI输入是截止电压 - 实时端电压输出限幅到0 ~ 1C对应的电流指令值。电流环PI输入是电流指令与实际电流的偏差输出限幅到PWM占空比限值比如0.05~0.95。阶段切换模块检测端电压和电流阈值。端电压达到截止电压且持续超过2s切换标志位置为CV电流小于截止电流0.05C且持续超过2s充电结束标志位置位。我特别强调一下持续确认时间。如果不加这个时间窗口噪声信号或数值求解的微小抖动会让模式频繁切换模型跑出来的充电曲线会呈现锯齿状。5. 参数设定与工况输入容量、倍率、SOC初始值这些小细节5.1 额定参数与单位换算这是最枯燥但最重要的一步Simulink模型里最常翻车的不是模块配置而是单位不统一。一个2Ah的电芯0.5C充电就是1A。如果你的模型里电池容量用Ah存储而电流环给的是安培那么SOC计算模块就得多一道除法——把累计Ah除以额定Ah。很多人直接用一个积分模块算SOC结果忘记除以容量SOC跑出来瞬间爆表。我的做法是把所有物理量统一到SI基本单位容量用库仑Ah × 3600电流用安培功率用瓦。在模型的注释里写明每个信号的单位这看起来是老生常谈但确实能省下后面大量的排查时间。5.2 初始SOC与弛豫状态决定了仿真前几秒会不会起飞充电模型初始状态对仿真结果的影响远超很多人的直觉。如果你的模型从完全静置状态极化电压为零直接开始0.5C充电端电压会瞬间跳升一个欧姆压降然后缓慢爬升——这个瞬间跳升在采样率较低的示波器显示上看起来像电压突刺其实是正确的物理行为。但要注意如果你模拟的场景是DVA工况下某段循环中的一次充电电池起始状态并非完全弛豫——极化电压尚未完全消失初始端电压可能高于OCV。这时模型初始条件不设对前几分钟的波形就和实际对不上。在Simulink里解决办法是给两个RC网络的电容赋初始电压值建议在模型初始化回调函数中统一设置。5.3 截止电压与截止电流数值别照抄电芯规格书规格书上的4.2V是建议值实际仿真中你应该搞清楚你的模型里端电压定义在哪里。如果你用的是带欧姆内阻的电池模型端电压和OCV之间存在差值而规格书的截止电压对应的是电芯极柱电压即包含内阻压降的端电压。绝大多数模型的控制对象就是端电压这没问题但你在设置OCV-SOC曲线时要保证零电流下的OCV最大值略低于截止电压比如4.18V否则CV阶段电流永远衰减不到截止电流。截止电流的设置也讲究。太小充电时间会过度延长仿真跑起来浪费时间太大又会有相当一部分容量没充进去。折中考虑0.1C是模型验证阶段的首选值。精细化研究时再低到0.05C用仿真时间换容量精度。6. 仿真结果解读从波形图里读出充电行为的前世今生6.1 一条合格的CC-CV充电曲线长什么样跑完仿真先把三条核心曲线拉出来看端电压曲线、电流曲线、SOC曲线。合格的模型应该呈现以下特征第一阶段电流恒定在高位端电压从初始值持续爬升爬升斜率逐渐变陡——这是极化累积的结果。切换点端电压贴住截止电压同时电流开始平滑下降。注意电流不能跌落到0否则意味着切换逻辑出问题了。第二阶段电流按近似指数规律衰减衰减速度取决于电池极化时间常数。SOC曲线继续缓慢增长增速逐步放缓。充电终止电流到达截止电流的瞬间整个流程停止SOC定格在接近100%但略低于满充容量的值。如果端电压到达截止电压后电流剧烈振荡或者SOC在切换到CV后突然跳到100%这通常是控制参数或积分算法出问题的信号。6.2 充电容量与能量效率的计算口径做完一次完整充电仿真常见的考核指标有两个充电容量Ah和充电能量效率。充电容量直接对电流时间积分注意单位换算。能量效率则需要同时积分电压与电流的乘积得到充入能量然后把它与电池释放出来的能量做比。在Simulink里积分模块的初始条件要设置为0且你最好在仿真结束后用数据浏览器导出波形到MATLAB工作区在脚本里做精确积分而不是直接在Scope图上肉眼估。Scope显示的数值精度有限用于定性分析够用用于定量对比不够。6.3 对照实验验证模型可靠性的三个典型case模型搭好之后我建议至少做三组对照验证不同倍率验证 0.3C、0.5C、1C三组充电仿真。大倍率下CC段时间更短、切换到CV时极化电压更大、CV段电流衰减更慢——这是一个典型的正反馈关系如果CC段时间没有随倍率增大而缩短说明极化模型参数有问题。不同初始SOC验证 从20%、50%、80%分别起充。从高SOC起充时CC阶段应该极短或直接进入CV——这检验的是OCV-SOC曲线端点附近的插值精度。不同截止电压验证 把截止电压从4.2V调低到4.1V你看到的结果应该是充电容量下降但充电时间缩短。如果容量下降不明显说明你的SOC计算模块可能没考虑初始容量。这三组实验跑完模型基本可以拿来做策略比对了。7. 调试中容易踩的坑代数环、过冲、参数耦合逐个拆解7.1 代数环Simulink仿真卡死或报错的元凶第一次搭CC-CV控制模型十有八九会遇到代数环问题。现象是仿真一跑就报错或者干脆死循环转不出来。原因在于你的闭环反馈路径上存在一个瞬时信号传递电流指令 → 电池电流 → 端电压 → 反馈至控制器 → 电流指令如果在某一环节没有引入任何动态比如直接用增益模块传递电流指令而没有经过RC网络Simulink会识别出这是一个没有状态变量的瞬时闭环无法直接求解。解决代数环的常规做法有三个在环路中插入一个Memory模块打破瞬时传递或者在电流环给定通道上增加一个小时间常数的惯性环节用一阶惯性来模拟充电机的响应延时另外还可以启用求解器配置里的代数环求解选项。我个人的优先级是先加惯性环节更接近物理实际情况也能顺便把控制模型与实际充电机的输出特性对齐。7.2 CV阶段的电压过冲是怎么来的如果你在仿真中观察到端电压在切换瞬间明显越过截止电压比如冲到4.25V再回落这说明电压环的响应速度跟不上。原因通常是电压环比例增益太大CC阶段电流指令已经接近上限切换瞬间电压误差被放大输出直接打到限幅值。降低电压环比例增益可以缓解过冲但代价是CV阶段电流衰减变慢、充电时间拉长。更好的做法是在CC阶段的末端引入预降流机制当端电压接近截止电压的98%时电流指令就开始以斜坡速率下降。这样切换发生时电流已经不大电压继续爬升的惯性也就小得多。我的经验值是预降流斜坡长度为5~10秒具体数值与极化时间常数挂钩压降过猛反而会让CC段时间缩短过多损失充电速度。7.3 参数之间的耦合陷阱电池模型参数不是孤立的。R_0增大欧姆压降变大CC阶段端电压爬升速度变快导致CC段时间缩短、提前切入CV——但CV阶段电流衰减率并不受影响因为衰减率主要由极化RC时间常数决定。很多人把CV阶段电流衰减慢归结为R_0偏大实际上动R_p才有用。另外OCV-SOC曲线斜率和R_p也有耦合关系。在曲线平台区比如磷酸铁锂的中段SOC变化引起的OCV变化极小端电压几乎只由极化电压贡献此时CV阶段电流衰减速度会远慢于三元电池。如果你拿三元电池参数调试好的PI参数直接套到磷酸铁锂模型上大概率会出现CV阶段电流长时间不衰减的停滞现象。所以电池类型变了控制参数一定要重新整定。7.4 数值求解导致的微小振荡别急着动PI参数变步长求解器在快速切换点CC进入CV的瞬间容易产生数值振荡这种振荡的表现是电压波形的周期远小于实际电池动态的时间尺度。遇到这种波形先别怀疑PI参数试着把求解器最大步长调小一个数量级或者把相对容差收紧到1e-5——很多时候问题就解决了。如果收紧容差后振荡依然存在再考虑控制参数的微调。用这种先排查数值问题再调控制逻辑的顺序可以避免很多无效的PI参数试凑。8. 从仿真到工程应用这个模型还能往哪儿延伸跑通基础CC-CV模型只是第一步。实际工程中充电策略的复杂度远高于恒流转恒压。但把基础模型的信号流、参数结构、控制逻辑摸透之后往各个方向扩展就有了清晰的骨架。我目前最常用的延伸方向包括多阶段充电策略优化在CC阶段中间插入不同的阶梯电流比如先用1C快速冲到60%SOC再降到0.5C充电到80%最后CV收尾。模型的切换逻辑稍作修改就能支撑这种多级电流阶跃的实验。直流内阻在线辨识模拟在充电过程中周期性地叠加小幅电流脉冲从端电压响应反推R_0用仿真数据验证辨识算法的收敛性和抗噪声能力。与热模型耦合把I²R损耗作为热源输入到集总热容模型看连续快充下电池温升曲线判断是否需要降功率充电。与BMS状态机联合验证把Simulink电池模型作为被控对象接入你写的BMS充电状态机代码通过S-Function或代码生成在纯软件环境下完成策略测试——这比直接上车验证安全得多。最后说一点我个人的体会很多人搭仿真模型喜欢一步到位搞复杂但复杂模型一旦出错排查成本会呈指数级上升。CC-CV模型的价值不在模型本身而在于它是一个你可以完全掌控的可信基线——基线可信了你在它上面叠加的每一个高级功能才有讨论意义。
返回列表