ARTICLE DETAIL

资讯详情

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

Simulink蓄电池充放电仿真建模与波形分析

Simulink蓄电池充放电仿真建模与波形分析 做BMS或者储能控制的人应该都有过这种尴尬手里没有电池样机但又要验证充放电控制策略只能靠仿真。这次分享的“F蓄电池仿真Simulink”项目就是干这个的。我把一组被测蓄电池项目统一代号为F蓄电池参数按12V/100Ah标定在Simulink里搭成充电和放电两套仿真模型跑出完整的蓄电池电压电流波形图再拿波形去分析策略。简单说不需要真电池就能先看到充电时电压怎么爬升、电流怎么限流放电时电压怎么跌落、终止电压在哪里。适合BMS开发、储能系统调试、充放电策略设计也适合做课程设计和论文里的验证图。1. 为什么要在Simulink里给蓄电池建模1.1 “F蓄电池”在仿真里到底指什么很多朋友看到“F蓄电池”这个名字会以为是什么品牌型号其实在项目里它只是一个工程代号。我当时手头有一批待测电池不方便直接拆开做长时充放电实验就在Simulink里用“F蓄电池”作为被测对象命名。仿真里它采用一组典型参数标称电压12V、额定容量100Ah、初始SOC 50%充放电工作电流按0.1C到1C之间调节也就是10A到100A。这套参数的好处是可迁移性很强。如果后面要换磷酸铁锂或者三元锂不用推翻重来只要把OCV-SOC曲线、内阻和极化参数替换掉模型结构完全不变。所以“F蓄电池”本质上是一个参数可替换的通用蓄电池仿真对象标题里突出“充电与放电蓄电池电压电流波形图”就是要把这个对象在不同工况下的外部电气特性完整展示出来。1.2 能看充放电波形到底有什么价值很多人觉得蓄电池仿真无非是“给个电池模块、连个负载、看个图形”实际上它解决的问题非常具体。第一个价值是验证充电策略。电动车和储能PCS里最常见的CC-CV充电如果你不知道电池当前SOC和端电压的关系恒流阶段给的电流可能过大导致电压快速触顶仿真波形能提前暴露这个问题。第二个价值是估算放电能力。用不同倍率放电能看到平台期电压差多少终止电压之前有没有明显拐点。这对于设计负载切换策略、判断电池还能撑多久非常关键。第三个价值是给BMS算法联调。SOC估算、SOH诊断都要依赖电压电流波形作为输入有了仿真波形算法调试可以完全脱离真实电池进行效率高很多。另外Simulink里做蓄电池仿真还有一个容易被忽略的好处容易接入更复杂的系统。我做过的项目里蓄电池仿真的输出信号直接当作BMS控制器的输入后面再级联逆变器模型、电机模型整个系统在一个环境里闭环。由于模型能直接生成C代码波形验证通过后还可以把控制逻辑烧进控制器把“设计—仿真—代码”串成一条完整链路。这也是为什么Simulink在电池研发领域使用频率一直很高的原因。2. 建模前的准备选模型还是自己搭2.1 Simulink里有哪些蓄电池模型可以直接用把建模目标想清楚之后第一步就是选型。Simulink里做蓄电池仿真路径有好几条。最传统的是SimPowerSystems里的Battery模块现在并进Simscape Electrical了这个模块本身带内阻和极化效应输入是电流输出是SOC、端电压等适合大多数充放电仿真。再新一点的是Simscape Electrical里的“Battery (Table-Based)”模块它允许从实验数据里直接导入OCV-SOC关系表、内阻随SOC变化曲线精度更高适合做BMS算法验证。如果连工具箱都没有那就自己搭Thevenin等效电路模型用受控电压源、电阻、电容搭一个一阶RC电路也是完全可行的。我对F蓄电池仿真用的是Simscape Electrical里的Battery模块没有用太高阶的模型。原因后面说总之这个模块在精度和易用性之间平衡得比较好而且它本身支持SOC计算和OCV插值不需要自己写积分公式。2.2 关键参数怎么定下来参数整定是仿真的地基参数错了波形再漂亮也是错的。我在F蓄电池模型里用到的关键参数列表如下参数名称设置值说明标称电压12VF蓄电池单组电压额定容量100Ah参与SOC计算的基础初始SOC50%让充电和放电都有足够观察空间欧姆内阻R010mΩ决定电流突变瞬间的电压跳变幅度极化电阻R15mΩ影响平台期电压斜率极化电容C11000F与R1构成约5秒极化时间常数参数怎么来最可靠的方式是查电池规格书里的内阻值和标称容量OCV-SOC曲线用厂家资料的数据点做插值。我当时没有完整厂家数据就先按铅酸电池的通用规律设置后面根据实测波形微调。注意极化电容1000F看起来数值很大但这是等效电路里的参数不是超级电容那种概念毫欧级电阻配合千法拉级电容得到的时间常数才算合理。有一个容易踩的坑极化时间常数R1*C1不要设得太小。如果设成零点几秒仿真出来的电压曲线会像纯电阻一样没有电池特有的缓变特性波形看起来就很假。2.3 选型背后的原因为什么不用更复杂的模型老实说现在很多人一上来就上“二阶RC等效电路”甚至更复杂的电化学模型我也犹豫过。但最后选择Battery模块而不是自己搭二阶RC核心原因是仿真的目标是看充电和放电波形不是研究电池内部反应机理。Battery模块自带SOC计算和OCV插值不需要自己维护状态方程搭模型速度快而且对仿真步长更友好。如果是做高精度SOC估计的论文或者要研究电池老化特性再换成二阶RC模型也不迟。选模型有一条原则能解决问题就行不必把复杂度拉满。仿真工具是拿来用的不是拿来炫技的。3. 充电仿真恒流转恒压CC-CV波形如何搭出来3.1 一套能跑的充电仿真模型怎么搭充电仿真模型我在工程里命名成F_charge_sim.slx搭建步骤直接按顺序操作就能复现新建空白模型从Simscape Electrical库拖入Battery模块双击Battery模块设置标称电压12V、额定容量100Ah、初始SOC为50%拖入Controlled Current Source受控电流源接到电池正极方向作为充电电流注入用Step模块生成充电电流指令恒流阶段设为10A在电池端并联Voltage Sensor电压传感器信号经过PS-Simulink Converter转成普通信号后接入Scope用逻辑判断实现电压限压端电压到达14.4V时电流源输出被拉低。第6步是CC-CV充电的核心逻辑。电池电压未到达限压点时电流源输出恒定的10A一旦端电压接近14.4V电流源输出被电压环拉低这就模拟了实际充电器“先恒流、再限压”的过程。如果你用Simscape Electrical较新版本MATLAB命令窗口输入ssc_battery可以找到自带的Battery示例模型作为起点名称会根据版本略有不同但思路是一致的。3.2 关键配置初始SOC、仿真时长和求解器参数配置里有几个特别容易翻车的地方我逐个说。第一初始SOC不要设成0也不要设成100。设成0模型开始瞬间会出现SOC过低警告波形开头会有一段不真实的电压崩塌设成100SOC稍微上升就触顶CV阶段几乎看不到电流衰减过程。我实际用50%给充电过程留足空间。第二仿真时长要覆盖整个CC-CV过程。以10A给100Ah电池充电从50%到接近满电大约需要5小时如果仿真时间设太短只能看到恒流段看不到恒压段。我先设3600秒观察前1小时的恒流转恒压切换再视情况延长仿真时间看CV段完整趋势。第三求解器选择。纯电气模型如果求解步长不对电压电流会出现高频毛刺波形没法看。我一般选ode23tb相对容差设为1e-4最大步长限制在10秒以内跑出来的曲线足够平滑仿真速度也不会太慢。设置好这三个地方波形基本就靠谱了。3.3 充电波形图里的三个特征段把Scope里的波形拉出来看我总结了三个特征段这也是分析任何充电波形的通用方法。第一是起始瞬间。电流从0阶跃到10A端电压会有一个突跳原因很简单欧姆内阻R0上产生了压降此时V等于OCV加上I乘R0电压从空载OCV比如12.6V跳到12.7V左右。这个突跳越大说明电池内阻越大或者充电电流越大。第二是恒流充电的“平台爬坡段”。这个阶段SOC从50%往上走OCV随SOC增大而缓慢上升端电压呈一条斜线慢慢往上爬斜率由极化电阻和OCV曲线共同决定。铅酸电池在这个阶段电压上升比较平稳锂电也类似但斜率更缓。第三是CV限压段。端电压被限制在14.4V不再上升电流按指数规律衰减直到仿真结束。很多人第一次看到CV段电流曲线时觉得奇怪明明电压恒定为什么电流还在变因为随着SOC接近满电电池可吸收电流变小外部给进去的电流自然越来越小。这个指数衰减就是恒压充电最经典的特征也是判断充电策略是否正确的关键依据。4. 放电仿真负载拉载时的电压跌落与回升4.1 放电回路怎么搭恒流负载与电阻负载放电模型我在工程里命名成F_discharge_sim.slx搭建思路和充电类似但电流方向相反关键是让电流源变成“负载”的角色。这里有两个常用方案。方案一是直接用Controlled Current Source给一个负电流指令比如-20A模拟恒流放电。方案二是并联一个可变电阻通过Step信号切换电阻值模拟不同负载下的放电。如果目标是拿到“电压电流波形图”用恒流源最直观电流大小就是你设定的放电倍率。比如1C放电就是100A0.2C就是20A。我为了避免电池很快放空通常从0.2C开始跑也就是20A仿真时长设为3600秒正好能看到SOC从50%下降到30%左右的完整过程。电阻负载方案适合模拟真实用电设备比如电机启动瞬间的拉载但波形分析起来不如恒流源直观。4.2 放电波形解读突降段、平台段、终止电压放电波形和充电有点对称但细节差异明显。起始瞬间电流从0变成负的端电压立刻向下跳变同样是因为I乘R0压降只不过方向相反此时V等于OCV减去I乘R0。放电电流越大这个突降越明显这也是为什么大功率放电时电池端电压会明显被拉低。接着是平台段电压随SOC下降而缓慢降低。蓄电池在这个阶段能维持比较平稳的输出电压这是电池最“能干活”的阶段到了SOC比较低的时候OCV曲线开始陡降端电压进入快速下降段。如果设置了放电终止电压铅酸电池一般取9V到10.5V锂电按单串2.5V计算仿真会在电压低于该值时停止。我把终止电压对应的SOC也记录下来方便后面和真实电池对比。还有一个很有意思的现象当放电结束、电流归零时端电压会回升一截。这不是数据错误而是去掉负载后欧姆内阻上不再有压降极化电压也逐渐恢复所以电压从负载时的9.8V恢复到空载OCV的11.2V左右。这个现象在真电池上非常明显拿万用表量一块刚放完电的电池等几分钟再量电压会变高。仿真里这个恢复过程表现为一条指数上升的曲线反而印证了模型是合理的。4.3 改变放电倍率波形怎么变要理解蓄电池电压电流波形的本质我建议你做一个平行实验同样50%初始SOC分别用10A、50A、100A放电把三组波形叠加到同一张图里看。低倍率放电时平台期电压高且平稳端电压几乎贴着OCV曲线走大倍率放电时起始压降变大平台电压整体下移而且大电流加速SOC下降电压下降斜率更陡。我实测下来10A放电时端电压和OCV相差不到0.1V100A放电时电压比OCV低了将近1V。这个差距完全来自内阻压降。很多BMS里的“电压补偿”算法本质就是根据电流大小把这段压降补回到SOC估算里。做放电仿真时如果把不同倍率的波形都跑出来你对电池内阻的影响会有非常直观的理解。5. 充放电波形对比、常见坑点和排查方法5.1 充电与放电波形到底差在哪里把充电和放电波形放在一起看核心差异可以汇总成一张表对比项充电波形放电波形电流方向正流入电池负流出电池起始电压变化上跳I乘R0压降下跳I乘R0压降电压整体趋势缓慢上升缓慢下降末尾阶段恒压限流电流指数衰减快速下降至终止电压SOC变化上升下降极化电压方向使端电压高于OCV使端电压低于OCV这张表列出来以后波形图上的每一段就好理解了。我的习惯是拿到任意一张充放电波形图先定位起始突跳是上还是下判断电流方向再看整体趋势是爬升还是下降判断是充电还是放电最后看末尾是恒压限流还是快速跌落判断充电策略或放电终止条件是否合理。三步下来波形传达的信息基本就能读全。5.2 常见报错和波形异常排查仿真过程中最容易碰到的问题我整理成几个常见场景都是实际踩过的坑。问题一初始SOC设成0%仿真一开始就报SOC越界警告电压波形瞬间砸到接近0。原因是模型不允许SOC越界。解决方法是把初始SOC改成5%以上或者缩短仿真时长保证SOC不会耗尽。问题二波形出现明显高频振荡看起来很毛糙。原因多半是求解器步长太大或者用了不合适的固定步长求解器。我有一段时间用ode1固定步长0.1秒去跑电池回路波形锯齿非常严重。换成ode23tb后问题立刻消失。问题三充电时电压快速顶到14.4V电流衰减太快基本看不到恒流阶段。原因通常是电流给得过大或者初始SOC太高。解决方法是把电流降到0.1C初始SOC降到30%到50%充电波形会完整很多。问题四Scope里看到电压电流显示为NaN。原因一般是SOC在仿真过程中等于0或100模型内部查表越界。检查仿真时长和终止判断逻辑避免SOC触界即可。这四个坑里我印象最深的是第三个。一开始为了追求“波形明显”把充电电流设得特别大结果电压瞬间顶到限压点CV段占了绝大部分反而看不到CC段。后来把电流降到10A波形才有参考价值。做仿真不是把图跑出来就算完波形要能反映真实工况参数就得贴近实际。5.3 一点实用建议仿真完再和实测数据对一下最后分享一个我的工作习惯。每次跑完F蓄电池仿真我不会直接拿仿真波形去写报告而是找一组真实测量数据把两者放在同一张图里对比。仿真平台电压和实测偏差在0.2V以内我认为模型参数基本可信偏差大优先检查OCV-SOC曲线是否准确再检查内阻参数是否有温度影响没有修正。这种“仿真加实测”对比的习惯能及时暴露参数老化或者模型假设失效的问题。后面如果要做更完整的系统还可以把Battery模块输出接到BMS控制模型里一起验证SOC估算和均衡策略甚至直接生成C代码下到控制器跑闭环。Simulink这套流程最珍贵的地方在于模型、波形、代码可以全部串起来从设计到验证一步都不落下。
返回列表