之前做储能变换器方案验证时,我在仿真模型里被一个问题反复折磨:电池充电到中后期,恒流值明明没超,端电压却一路往上顶,稍不留神就碰到过充保护点。后来把整个充放电系统的控制逻辑拆开从头捋了一遍,才反应过来——问题不在某个PI参数是否最优,而是三阶段的控制策略从一开始就没理清楚。这篇博文就基于一个蓄电池充放电系统仿真项目,围绕PI电压电流双环控制,重点讲恒流充电、恒压充电、恒压放电三种工作模式的设计逻辑、切换实现和调试心得。内容覆盖控制思路、无扰切换、参数整定流程,以及我实际调试时趟过的一些坑,适合正在做电池充放电模拟、储能变换器控制或者充电电源设计的同行参考。
1. 三种工作模式背后的电池特性与场景逻辑
领导或需求方常问一个问题:既然有电流环又有电压环,为什么不直接给定一个电压参考,靠调节器自动限流?这里的关键在于,三模式的划分不是控制器自己的需求,而是电池这个“被控对象”本身的物理特性决定的。电池不是普通电阻负载,端电压会随充放电深度漂移,内部极化、温升都在影响特性。如果只用一个恒压参考去“怼”它,早期阶段电流很容易失控。所以搞清楚三种模式的来源,是后续控制器设计的前提。
1.1 恒流充电:低SOC阶段为什么要锁住电流
刚接上电池时SOC低,端电压低、内阻也小。此时以恒压源直接充电,初期电流可能远超电池能承受的倍率。电池充放电能力一般用C倍率衡量,比如1C对容量1Ah的电池就是1A电流。超出额定倍率,轻则发热加剧,重则诱发析锂(锂电)或析气鼓包(铅酸)。恒流充电阶段就是把充电电流钉在安全值上,比如0.5C或1C,让端电压随充电进度自然上升。
这个阶段占整个充电过程的电量比例非常大。一般锂电池充电流程就是CC-CV,前面近80%的电量都是在恒流阶段灌进去的。在控制上,恒流充电意味着电流环给定一个固定参考值,电压环在旁待命。仿真里直接把这个阶段的电流参考写死,很容易验证:启动瞬间电感电流会有一段爬升,控制器只要把PI调稳,电流基本就是一条直线。要注意的是,恒流给定值不能超过电池允许的倍率,否则后面即便到了恒压段,电池也已经吃了暗亏。
1.2 恒压充电:电压环接管的意义
电池充到一定SOC后,端电压接近阈值。此时继续恒流,端电压会越过过充保护点,电化学体系内部副反应加剧。所以恒流阶段走到末端,必须把控制量换成电压:设定一个恒压目标,让充电电流按照电池吸收能力自然衰减。这个过程在示波器上会看到电流曲线从恒流值往下掉,形成一个很典型的“膝盖形”过渡,也就是CC-CV切换点。
恒压充电阶段的电流自然衰减,其实非常契合电化学特性:越接近满电,充电速率本就该降下来。在仿真模型中,电压环需要实时检测电池端电压,输出一个电流参考给内环。随着电流衰减到某个截止值(比如0.05C),就可以判充结束。恒压模式最怕的是电压参考设定过高,一旦超过电池最高电压,即使有电压闭环,也存在长期浮充析气的风险。因此仿真里保护逻辑分两个层次:一个由电压环闭环控制,一个由比较器直接强制切断或报警。
1.3 恒压放电:母线稳压才是真需求
恒压放电听起来像“把电池电压放恒定”,实际不是。电池端电压在放电过程中本来就会下降,不可能靠控制把它顶住——否则违反物理规律。这里的恒压,指的是变换器输出侧(比如直流母线、负载端)电压保持恒定。储能系统放电给逆变器或负载供电时,母线电压如果大幅波动,后级设备没法正常工作。所以这个模式下电压环反馈的是母线电容电压,参考值是母线目标电压,内环电流方向反转成放电方向,能量从电池流向母线。
跟恒压充电放在一起对比,能看出同一个“恒压”词义下反馈点完全不同:充电恒压反馈电池端电压,放电恒压反馈母线/输出电容电压。在仿真模型里,这两个电压环不能简单共用一个调节器,否则反馈信号接错,方向直接反掉。常见做法是通过模式标志切换反馈源和参考值,恒压放电时电压环输出限幅为最大放电电流,符号取负(相对充电方向)。
| 工作模式 | 电压环反馈 | 电压环参考 | 电流环参考来源 | 电流方向 |
|---|---|---|---|---|
| 恒流充电 | 不参与(或限幅) | 无 | 直接给定恒定电流参考 | 正向(电池吸收) |
| 恒压充电 | 电池端电压 | 电压目标值 | 电压环输出 | 正向(电池吸收) |
| 恒压放电 | 母线电压 | 母线目标值 | 电压环输出 | 反向(电池释放) |
2. 双环PI控制的结构逻辑与参数划分
三种模式确认后,控制器怎么搭的问题就摆上来了。蓄电池充放电系统里最经典的做法是电压电流双环PI控制。为什么不是单电压环或者单纯电流环?这得从电池这个被控对象的特性说起。
2.1 电压外环加电流内环:两个环各管什么
如果只用电流环,电流可以稳定,但电压没法控制,恒压模式做不了。如果只用电压环,问题更明显:电压直接调节占空比,中间少了电流这个约束,负载瞬变时电流尖峰根本拦不住。蓄电池对电流冲击很敏感,过流一次就伤一次寿命。双环架构的本质是“用内环保护电流,用外环满足电压/电流精度需求”。
实际信号流里,内环是电流PI调节器,它接收电流参考值,输出占空比控制变换器。外环是电压PI调节器,它接收电压参考,输出电流参考给内环。电压环可以把电池看成“会漂移的容性负载”来整定,电流环则直接用占空比控制电感电流。整个控制形成一个链条:电压参考 -> 电压环 -> 电流参考 -> 电流环 -> 占空比 -> 变换器 -> 电压反馈。这层关系理清后,仿真建模才不容易把信号线接乱。
打个比方:电压环相当于项目管理层,只关心“最终电压是不是稳在目标附近”;电流环相当于现场执行团队,关心“流过的电流是不是严格按指令走”。管理层下目标,执行层保安全,这套架构的基本逻辑就是“各管一段”。
2.2 带宽划分原则:内环快,外环稳
双环控制能不能稳定工作,一个关键指标是带宽划分。电流内环要快,这样才能快速抑制输入扰动、限制电流尖峰;电压外环不需要也不应该比电流环快,否则外环一感到电压误差就给内环猛加电流参考,内环还没跟上,整个回路就容易振荡。
工程上常用经验值是:电流环带宽取开关频率的1/5到1/10,电压环带宽取电流环的1/3到1/5。比如开关频率20kHz时,电流环带宽可以取2kHz,电压环带宽取400Hz到600Hz。这个比例不是拍脑袋定的,本质是保证两个环在工作频率附近不会产生明显耦合——内环已经“消化”了高频扰动,外环看到的被控对象近似成一个低带宽的受控电流源,外环设计自然就简化了。
仿真调试时,如果发现系统出现低频振荡,第一怀疑对象就是带宽比。我遇到过的情况是母线电压低频摆动,后来发现外环带宽跟内环拉得太近,两个环在相近频段抢主导权,振荡就来了。把外环带宽降下来之后,系统立马消停。这条排查链可以作为双环调试的“一号排查项”。
2.3 PI参数初值怎么估算
很多人仿真时直接盲目给PI参数——随机试,然后看波形调。其实可以先做一版合理初值估算,再进仿真精调。以双向Buck-Boost为例,电流内环的被控对象是电感电流对占空比的传递函数,近似由电感L、电阻R和母线电压决定。要设计穿越频率为f_ci的电流环,Kp可以按 L乘2π乘f_ci再除输入输出电压增益这个思路估算,Ki则取Kp除以一个较大的时间常数,保证低频增益够高。
至于电压外环,它控制的是电容电压(或电池端电压),在电流内环已经闭环的前提下,被控对象很像一个“受控电流源给电容充电”的模型。因此电压环的Kp可以按 C乘2π乘f_cv 估算,Ki同样给一个相对小的初值。具体数值不同拓扑会差不少,但仿真里完全可以把估算值当起点,之后扫Kp和Ki,观察阶跃响应、超调和恢复时间。
这里有个小技巧:调参顺序务必是“先内环后外环”。先把电流环单独闭环(给恒定电流参考),调好电流波形;再把外环接上,逐步加大电压环增益。顺序反了会非常难定位问题——波形乱了根本分不清是内环没稳还是外环叠加出来的。我见过不少同行直接在双环全开状态下调整参数,结果改来改去都是在给错误耦合打补丁。
3. 模式切换的衔接逻辑与无扰实现
三种模式分别能稳定工作,只算走完了第一步。真正的难点在切换:恒流转恒压、恒压转放电、放电转回充电,任何一个切换点处理不好,都会在波形上留下电流尖峰或电压过冲。这部分我在仿真实操里花的时间比搭主电路还多。
3.1 最容易被忽略的“切换跳变”问题
用状态机直接切换模式,看起来很简单:模式标志一变,PI参考和反馈都换掉。但对仿真里的蓄电池来说,这种粗暴切换往往伴随瞬间冲击。原因是切换前调节器的积分器里存了不少“账”,比如恒流充电阶段电压环积分器因为电压误差长期为正,输出早就顶到限幅;切到恒压模式那一刻,这个积分数值还会顺着新参数参与调节,直接导致电流参考跳变。现实中这种跳变轻则引起电压过冲,重则触发保护。
所以做模式切换的目标早就不是“切得对”,而是“切得没感觉”——学名叫无扰切换(bumpless transfer)。实现手段从两个维度下手:一是对调节器输出和积分器做限幅与处理,二是设计自动切换逻辑,让切换点在控制环路内部自然发生,而不是靠外部硬切。仿真时可以在切换瞬间打一个示波器光标,重点看电流参考和实际电流有没有阶跃毛刺。
3.2 恒流转恒压的min取小自动切换
恒流转恒压这个切换点,其实可以做到完全不需要外部信号仲裁。经典做法是用一个取最小函数:电流参考 = min(最大充电电流, 电压环输出)。
恒流阶段,电池电压还没到目标值,电压环拼命往上积分,输出被限幅钳在最大电流附近,min取到的是最大充电电流,系统表现为恒流。随着电压逼近目标,电压环输出逐渐回落到最大电流之下,min自然改选电压环输出,系统平滑转为恒压。整个过程没有切换标志、没有模式跳变,完全靠信号大小关系自动完成。这也是工业充电模块“恒流恒压自动切换”的标准做法。
要让这个机制稳定,电压环必须配抗积分饱和,否则恒流阶段电压环积分器会长时间饱和在最大电流附近,等到电压真正到达目标时,积分器还会按旧轨迹“冲”一段,导致过冲。通常做法是给电压环输出加限幅,并让积分器在输出限幅时停止积分(或者采用反馈抗饱和结构)。仿真里我一般直接在调节器模块中勾选限幅和抗饱和选项,再配合一点开关逻辑做兜底,实测下来从恒流切到恒压的波形平滑很多。
3.3 充放电方向反转与状态机建模
恒压放电和充电的切换不像CC-CV这么“自动化”,因为电流参考方向要反转,电压环反馈点也要换(充电反馈电池端电压,放电反馈母线电压)。我的做法是搭一个模式状态机,模式标志决定两件事:一是电压环的反馈信号源和参考值,二是电流参考限幅的符号。恒压放电模式下,电压环参考为母线目标电压,反馈为母线电容电压采样,输出限幅到最大放电电流且方向取负。此时电流环参考为负,能量自动从电池侧流向母线侧。
仿真建模上,状态机可以用逻辑模块组合实现,也可以直接用状态流工具。关键点是切换瞬间处理好两个状态之间的信号连续性。我通常会让切换动作分两步:第一步先让电流参考降到一个很小值(比如0.01倍额定),等电流环执行到位后,第二步再做反馈源和限幅方向的切换。这样虽然多一个节拍,但换来的是母线电压和电感电流都不跳变,对后续硬件移植更友好。如果一味追求“一步到位”,你得花大量精力去调切换时刻的积分器初值,反而得不偿失。
4. 仿真建模要点与调参实操流程
控制策略讲清楚后,开始说模型本身。我用的仿真环境是MATLAB/Simulink,元件库自带的电力电子模型足够搭建验证系统。搭建过程中的很多细节会直接影响控制效果,值得逐一说明。
4.1 主电路拓扑与关键器件参数
主电路采用双向Buck-Boost(也叫两象限半桥变换器),结构简单,适合做电池侧电压和母线电压之间的双向变换。仿真参数上,我建议一开始不要追求高开关频率,先用20kHz这种常规频率把控制逻辑验证通,逻辑跑通了再考虑工程化。一组可复用的初值如下:电池侧电感L取1mH,母线电容C取1mF,开关频率20kHz,仿真步长建议设到开关周期的1/10以内(比如5e-6秒),既能控制仿真时间又不至于丢失PWM细节。
双向变换器的PWM驱动有互补逻辑,充电和放电对应的占空比路径不同,但控制层面只需要让电流环输出落到调制模块的占空比信号上。高侧和低侧开关的互补死区在仿真里可以设置一下,虽然仿真模型不像硬件那么容易直通,但养成习惯对后续硬件化有好处。
4.2 电池模型的化简与SOC计算
蓄电池建模不需要太复杂。仿真验证控制策略时,用受控电压源加内阻的简化模型就足够:开路电压(OCV)随SOC变化,查表或线性近似,内阻按电池规格给一个常数,再叠加简单的SOC积分计算(SOC等于初始SOC减去对时间积分的电流除以额定容量)。电池电压随SOC缓慢变化这个特性,恰恰是验证CC-CV切换是否生效的关键——如果用一个电压固定的理想电池,电压闭环永远不会有误差,恒流转恒压的切换逻辑也无法触发。
另一个细节是电池模型的内阻不能忽略。不同SOC下内阻变化、充放电极化等因素会造成端电压与OCV之间有偏差,这种偏差正是恒压模式需要闭环消除的对象。仿真时可以在电池端电压反馈通道上加一个一阶低通滤波,滤除开关纹波,避免电压环因为纹波过大而误动作。滤波时间常数要比电流环时间常数小一个数量级,不然会给双环串入额外相移。
4.3 从内环到外环的整定流程
调参我坚持三步走,每一步都有明确的验证标准。
第一步,内环单闭环。断开电压环,给电流参考一个阶跃(从0.2倍额定跳到0.8倍额定),观察电感电流阶跃响应。目标是电流超调小于5%,上升时间在5到10个开关周期左右。这一步如果调不好,后面外环加上去一定乱。
第二步,接上电压环,但只做恒压充电模式。给定电压参考阶跃,观察电池端电压跟踪响应。此时检查重点不是快速到达目标,而是不能有明显超调——电池电压一旦超调超过阈值,保护逻辑就会切断系统。电压环的Kp从这个位置开始逐步加大,每加大一次观察有没有振荡,直到带宽接近设计值为止。
第三步,三模式级联。恒流给定固定值跑一段,等电池电压到达CC-CV切换点,自动转恒压;然后切除充电源,切换放电模式,看母线电压在带载阶跃下的恢复情况。整体波形符合预期后,再回来微调外环Ki,把稳态误差消掉。
| 调节器 | 初值方向 | 主要影响 | 调试优先级 |
|---|---|---|---|
| 电流环Kp | 估算后取小 | 电流响应快慢 | 1 |
| 电流环Ki | 小值起步 | 电流稳态误差 | 2 |
| 电压环Kp | 估算后取小 | 电压环带宽 | 3 |
| 电压环Ki | 小值起步 | 电压稳态误差 | 4 |
4.4 三种模式级联的验证步骤
参数整定完毕,我建议做一个完整的工况验证脚本,把三种模式按时间序列串起来跑:0到2秒恒流充电,电池电压从低SOC区往上爬;2秒左右电压达到CC-CV切换阈值,自动切恒压充电;4秒时切断充电回路,切换恒压放电模式,带一个阶跃负载;观察5秒内母线电压恢复情况。这个脚本可以在一次仿真里把三个模式从头到尾验证一遍。
验证时不要只盯稳态波形,重点看三个时刻:CC切CV的瞬间,电流参考是否平滑;充电切放电的瞬间,电感电流方向是否快速反转且没有尖峰;放电带载阶跃的瞬间,母线电压跌落幅度和恢复时间是否符合设计指标。这三个时刻几乎覆盖了所有容易出问题的地方,每次改动参数跑同一套脚本对比,效率很高。
5. 调试中踩过的坑与排查链路
下面几个问题都是我在这个仿真系统上实际遇到过、并且花了时间才定位的。写出来给同行做个参照,遇到类似波形不用从头试。
5.1 双环带宽重叠导致的低频震荡
现象是恒压充电模式下,电池端电压和电感电流上叠加了一个大约100Hz到200Hz的低频振荡,幅值不小,像呼吸一样来回波动。一开始怀疑是电池模型的问题,换了更精细的模型依旧如此。排查链路是这样的:第一,把外环断开,给内环固定参考,电流波形非常干净,说明内环没问题;第二,把外环接上但外环Kp大幅减小,振荡消失,说明根源在外环参与后;第三,对比内外环带宽,发现电流环取3kHz,电压环取2.5kHz,两个环在相近频段都把手伸得很长,耦合之后产生了拍频性质的振荡。把电压环带宽降到600Hz,振荡立刻消失。
这个案例给我最大的印象是:双环控制中带宽比不是单纯的理论要求,它是实实在在的稳定性边界。内环必须比外环快一个量级以上,外环才有资格把内环看成“理想电流源”。
5.2 恒流转恒压瞬间的电压过冲
现象是恒流充电阶段一切正常,到CC-CV切换点后,电池端电压在切换瞬间冲过了设定值,过冲幅度接近500mV,然后才慢慢回落。这是典型的切换瞬间控制连续性被破坏。排查下来发现,恒流阶段电压环因为电压误差长期存在,积分器一直在累积,即便输出被限幅钳住,积分器本身没有停下来。切换那一刻积分器里存了很大的“势能”,退出恒流模式时它继续作用,把电流参考推到了一个过大的值,电压自然蹿上去。
处理方法是给电压环开抗积分饱和,我用的方案是:把限幅后的实际输出与原积分器输出做差值,反馈回去抑制积分,这样输出钳在最大电流时,积分器就自动停止累加。同时,在模式切换使能信号上加了积分器初值重置,两者一起作用后,过冲从接近500mV降到50mV以内。这个案例再次印证:min取小自动切换只是手段,如果调节器本身没有抗饱和能力,切换逻辑再漂亮也白搭。
5.3 放电启动瞬间的母线跌落
现象是恒压放电模式下,负载从空载切换到满载的瞬间,母线电压跌落了差不多10%,恢复时间接近几十毫秒,这在恒压源要求高的场合不能接受。排查链路:先看电流环,负载阶跃瞬间电流环能快速跟上,说明内环没问题;再看电压环,母线电容电压在阶跃瞬间跌落后,电压环输出电流参考,但要经过一个不小的电容充电过程才能把母线电压顶回来。本质是电压环响应速度受限于带宽。
解决思路有两层:一是适度提高电压环带宽(但要保持在内外环带宽比的安全范围内);二是做负载电流前馈——把负载电流信号直接加到电流环参考上,让内环在母线电压还没明显跌落前就预先补上电流。仿真结果表明前馈对跌落深度和恢复时间都有明显改善。这个做法在实际产品里也常用,仿真阶段验证清楚后,后面移植到硬件会省很多事。
最后说一点个人体会。做这个仿真项目,我对三模式切换最大的感受是:控制策略的价值往往不在单一模式下的稳态精度,而在于不同模式之间衔接的平顺度。波形上看起来只是一小段过渡,背后却隐藏着积分器状态、限幅逻辑、带宽划分和反馈选通的一整套配合。如果你的仿真模型也卡在某个切换点上反复振荡,不妨按这个顺序自查:先看带宽比,再看抗积分饱和,再确认切换时的反馈源,多数问题都出在这三处。下一步我打算把这套策略扩展到更多模式(比如脉冲充电或功率限制模式),并在硬件平台上验证,进度合适再来分享。