ARTICLE DETAIL

资讯详情

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

双向DC-DC变换器Simulink建模与仿真:从控制策略到工程实践

双向DC-DC变换器Simulink建模与仿真:从控制策略到工程实践 双向DC-DC变换器这几年在储能、电动汽车、微电网里的地位越来越重做电源或电力电子方向的朋友几乎绕不开它。用Simulink做双向DC-DC的系统级仿真不只是搭个电路看波形那么简单它牵涉到控制策略设计、功率器件建模、环路参数整定以及从仿真到实物移植的衔接问题。这篇文章我把平时实际建模和调参的经验整理出来从整体思路到建模细节再到常见坑点尽量讲得能直接上手用。1. 整体设计与建模思路拆解1.1 为什么双向DC-DC适合用Simulink做系统级验证双向DC-DC变换器的核心特点是功率可以双向流动升压和降压两种工作模式之间的切换逻辑、电流方向变化、以及模式切换瞬间的动态过程都是纯硬件调试时比较棘手的问题。用Simulink做系统级仿真最大的好处是可以在同一套模型里同时观察功率电路行为和控制算法表现而且能随意暂停、回放、改参数这对于验证模式切换逻辑和环路稳定性特别有价值。另一个现实原因是现在很多公司的开发流程已经从硬件先行转向仿真先行。先用Simulink把控制策略、保护逻辑、状态机都验证清楚再往DSP或者单片机里移植能省下大量改板子和调硬件的成本。尤其是双向变换器这种涉及双向电流控制的拓扑控制器参数如果直接在实物上调容易炸MOS管而在仿真里可以大胆试错。Simulink做这类系统仿真有两条技术路线一是用Simscape Electrical原SimPowerSystems搭建物理电路模型优点是直观、器件参数设置精细适合做波形级验证二是完全用传递函数或状态空间方程搭建平均模型优点是速度快、适合做控制参数整定。实际工程中我建议两条路线配合使用先用平均模型把PI参数调到合理范围再用物理模型做详细的开关纹波和瞬态验证。1.2 双向DC-DC拓扑选型非隔离与隔离方案怎么选双向DC-DC的拓扑方案不少工程上最常用的是两类非隔离型的Buck/Boost对偶电路以及隔离型的双有源桥DAB或双向反激/正激。选择哪一种主要看应用场景的电压等级和隔离需求。非隔离双向Buck/Boost电路结构如图它本质上就是把Buck和Boost电路的对偶开关管组合在一起共用一个电感。这种拓扑结构简单、器件少、效率高适合电池电压和母线电压比较接近的场合比如电动车的12V低压系统与动力电池之间的能量转换或者储能系统中电池组与直流母线之间的接口。它的控制方式相对直观但缺点是输入输出不隔离且电压变换比不宜过大。隔离型方案中DAB是目前研究最热、工程应用增长最快的。它通过高频变压器实现电气隔离并且利用原副边全桥之间的移相角控制功率流动的方向和大小。DAB的优点是天然支持软开关ZVS效率高电压变换范围宽适合大功率场合比如充电桩、储能变流器。缺点是控制复杂而且对变压器漏感参数敏感建模仿真要精细一些。在Simulink建模时我的经验是如果是做系统级验证、储能策略调度这类偏上层的研究非隔离模型就够用了模型简单且仿真速度快如果研究重点是变换器本身的优化设计、软开关特性、效率提升那就必须用DAB或者CLLC这类隔离拓扑而且功率器件的开关特性参数要设置得比较仔细。1.3 建模前要理清的系统级需求拿到一个双向DC-DC仿真任务不要急着打开Simulink拖模块。前期必须把系统级需求理清楚否则后面返工的成本很高。我通常按以下几个维度梳理功率等级和电压等级输入电压范围、输出电压范围、额定功率。这决定了器件的选型参数也决定了控制器的增益范围。控制目标是恒压输出CV还是恒流输出CC或者是功率控制PQ。比如电池充电一般是CC-CV两段式放电时可能是恒功率。动态性能指标启动时间、负载突变时的超调量、调节时间、允许的电压/电流过冲。这些指标直接决定环路带宽和PI参数。工作模式切换需求是否需要在线从Buck切Boost切换条件是电压比较还是电流方向判断切换过程允许的暂态时间是多少。通信与保护逻辑是否需要模拟过压/过流/过温保护是否需要与上位机或电池管理系统BMS交互信号。把这些需求写成一个简单的技术规格表再开始建模后面每一步都有据可依不会做着做着偏离方向。这也是我见过很多新手项目翻车的核心原因——需求不清就开干最后模型和实际需求对不上。2. 核心控制策略与环路参数设计2.1 双向变换器的控制架构内环电流、外环电压双向DC-DC的控制架构工程上惯用的就是双闭环内环是电感电流环外环是输出电压或输出电流环。为什么要用双闭环而不是单电压环因为功率级本身是个二阶系统电感的电流不能突变只控制输出电压会导致动态响应慢而且在模式切换时容易产生过冲。内环电流环的响应速度快得多能把电感的动态行为管住外环电压环只需要稳住输出两者各司其职这也是工业电源中最经典的设计方案。以非隔离双向Buck/Boost为例升压模式Boost下控制对象是电感电流到输出电压的传递函数降压模式Buck下控制对象是占空比到输出电压或电感电流的传递函数。两个模式下系统的传递函数不同所以PI参数往往要分别整定或者在软件里做增益调度gain scheduling。在Simulink中搭建双闭环我习惯用离散控制模块而不是连续模块原因有两个一是离散控制器更接近DSP/单片机的实际实现方式参数可以直接对应到代码里的系数二是离散模型仿真速度更快不容易出现连续系统求解器带来的数值收敛问题。采样时间的设置要注意电流环的采样频率通常是开关频率的1/2到1/10电压环的采样频率再降一个数量级左右。2.2 PI参数的工程整定从传递函数到仿真微调PI参数的整定方法有很多但工程上最实用的还是建模算初值仿真微调的组合拳。以Boost模式为例在小信号模型下从占空比d到电感电流iL的传递函数可以近似为一个一阶惯性环节G_id(s) V_in / (s * L R_L)其中R_L是电感等效串联电阻一般在毫欧级别。电流环PI的目标就是让闭环带宽足够高典型的做法是让PI控制器的零点与功率级极点对消。已知功率级极点频率 f_p R_L / (2πL)那么PI的零点就放在这里附近。电流环穿越频率 f_ci 一般取开关频率的1/10到1/15。举个例子20kHz开关频率的Boost电流环带宽可以放在2kHz左右。有了带宽指标用零极点对消法可以估算Kp和Ki然后在Simulink里加上带宽限制的小惯性滤波环节逐步微调。我个人习惯的微调方法是先单独给电流环闭环给一个阶跃参考观察电流响应如果超调大就增大阻尼适当降低Kp如果响应慢就提高带宽增大Kp和Ki。电流环调稳后再闭合电压环。电压环的带宽经验值是电流环的1/5到1/10这样可以避免两个环路互相影响导致振荡。最后做负载突变测试加入阶跃负载观察输出电压的恢复时间和过冲再对电压环PI做微调。电压外环的PI参数可以参考从电流环闭环到输出电压的传递函数来初选但实际操作中我会直接用simulink的linmod或者Control System Toolbox提取系统线性化模型然后用sisotool来辅助整定效率高很多。2.3 模式切换与软启动容易被忽视的关键环节双向DC-DC的工程实现中Buck和Boost切换逻辑做不好硬件上很容易出问题。比如场景是系统先工作在Buck模式给电池充电然后突然切到Boost模式让电池放电如果切换逻辑不处理占空比跳变可能导致电感电流瞬间冲击触发过流保护甚至损坏器件。在Simulink里我通常用状态机Stateflow或简单的模式选择逻辑来实现切换判断。切换条件有两个维度一是电压比较比如母线电压跌到某个阈值以下判定需要切换二是电流方向指令根据功率流的方向给定模式指令。切换过程不能直接跳变需要做软过渡——常见的做法是在模式切换时让电流环的参考值iL_ref按斜坡从当前值线性过渡到目标值斜坡的斜率决定了冲击电流的大小。另外一个常被忽略的点是启动过程中的软启动。双向变换器启动时输出电容是零状态如果直接给满占空比硬件上基本等于短路的冲击电流。仿真模型里虽然不会烧器件但波形很难看而且会给后续调试带来误导。软启动的实现方式状态机里加一个启动阶段用计时器控制参考电压从0开始以斜坡上升到设定值配合电流环的限幅把启动冲击电流限制在合格范围内。在Simulink中用饱和模块Saturation限流用积分器或Rate Limiter实现斜坡都是非常成熟的做法。3. Simulink建模实操从功率电路到控制回路的完整实现3.1 功率电路建模要点器件参数与求解器设置在Simulink中搭功率电路如果做物理波形级仿真就用Simscape Electrical模块库。需要明确的一点是Simscape的功率器件模型和理想开关模型差别很大尤其是在导通压降、开关损耗、反向恢复这些细节上。如果只是验证控制策略用理想开关模型比如理想MOSFET仿真速度更快如果要做效率分析或者波形精度要求高就换成带导通电阻Ron和体二极管参数的物理模型。以非隔离双向Buck/Boost为例功率电路由两个MOSFETQ1高压侧、Q2低压侧和一个电感组成。Simscape Electrical的MOSFET模块需要设置的主要参数有导通电阻Ron、二极管压降Vf、击穿电压、栅极驱动电阻等。电感参数需要考虑饱和电流可以在仿真中通过加一个大的直流偏置后观察电感电流纹波来验证、寄生串联电阻会影响效率仿真结果。电容要设置ESR否则阻尼不足瞬态响应仿真会偏乐观。求解器设置是这个场景中最影响仿真成败的一个环节。Simscape Electrical物理模型在变步长求解器如ode23tb下能兼顾速度和精度但遇到开关频率高或死区时间短的情况可能需要限制最大步长。我的经验是最大步长设置为开关周期的1/100左右既不会太慢又能保证开关波形的精度。开关频率20kHz周期50微秒最大步长可以设0.5微秒仿真跑起来基本是无压力的。如果仿真发散或者出现非物理振荡优先检查求解器步长和功率器件参数是否合理。3.2 控制回路建模PWM调制、采样保持与离散PI控制回路在Simulink中通常用离散模块搭建。细分下来四块电压/电流采样、误差计算、PI控制器、PWM调制。采样环节要特别注意采样时刻与开关动作的同步问题。实际DSP中PWM的载波计数顶点一般会触发ADC采样这样采样到的电流是开关周期平均值附近的数值抗干扰能力强。仿真中要复现这个特性可以用Simulink的PWM GeneratorDC-DC模块它可以输出与载波同步的采样触发信号如PWM_TRIG引脚配合Unit Delay锁存采样值模拟真实DSP的采样行为。如果不做同步采样电流纹波会直接进入控制环路仿真结果可能出现异常的次谐波振荡。PI控制器在离散域下的实现我推荐用Integrator with limited output模块做积分限幅配合抗饱和Anti-windup机制。积分限幅的作用是防止PI输出超过PWM调制上限0~1否则会出现积分饱和导致负载突变时恢复极其缓慢。抗饱和的一个经典做法是在积分项输出达到限幅时把积分器的输入改为外部反馈的差值相当于刹车。Simulink自带的PID Controller模块中就有详细的抗饱和选项直接勾选即可。PWM调制环节如果用的是Simscape功率器件注意PWM信号需要通过一个Signal/Physical转换接口PS-Simulink Converter把Simulink域的PWM信号变成物理域信号。PWM频率和死区设置在PWM Generator模块中配置。死区时间虽然小但对仿真精度影响不小尤其是在分析桥臂直通风险时必须模拟真实死区。3.3 参数初始化与脚本化让整个仿真一键跑起来一个高质量的Simulink仿真基础是参数管理。我不太建议在Model Workspace里手动填参数因为一旦模型复杂了参数多了之后修改和追溯都很痛苦。更推荐的做法是用MATLAB脚本文件统一管理所有参数在仿真前用sim()命令或者回调函数自动加载参数到模型工作区。我通常的组织方式是这样的项目文件夹下建一个init_params.m脚本里面定义所有参数变量比如% 双向DCDC仿真参数初始化 V_in 48; % 输入电压V V_out 12; % 输出电压V P_rated 200; % 额定功率W f_sw 20e3; % 开关频率Hz L 33e-6; % 电感值H C_out 470e-6; % 输出电容F R_load V_out^2 / P_rated; % 额定负载电阻ohm % PI参数电流环 Kp_cc 0.8; % 电流环比例 Ki_cc 200; % 电流环积分 % PI参数电压环 Kp_cv 0.05; % 电压环比例 Ki_cv 20; % 电压环积分然后在模型的回调函数PreLoadFcn里写入init_params;这样每次打开模型或仿真前都会自动加载参数。用脚本管理参数的另一个好处是做参数扫描比如扫电感值、扫PI参数时非常简单写个循环批量跑仿真的sim命令在SimulationInput里传不同参数即可。仿真完之后数据记录也是要注意的一个环节。建议在模型中用To Workspace模块把关键的电压、电流、占空比、PI输出等信号记录到工作区然后用一段后处理脚本自动绘图。记录信号的时间步长需要注意如果模型中含开关纹波直接连续记录会导致数据量很大可以设置Decimation抽取比来降低数据率只记录控制环路的低频信息和PWM的平均行为。3.4 一个完整案例48V/12V双向Buck-Boost仿真搭建过程下面以一个48V母线到12V电池的双向Buck-Boost变换器为例把整个搭建过程串起来。这个案例的参数是额定功率200W开关频率20kHz电感33μH输出电容470μF。第一步搭功率电路。从Simscape Electrical模块库中拖入两个MOSFET和一个电感高压侧接48V直流电压源低压侧接12V电池或者用一个电阻负载代替注意两个MOSFET按照半桥连接方式放在电感的同一端。确保所有元件之间用物理连接线物理域连接并且给电源加合适的接地。第二步搭采样与控制。在低压侧电压端口并联一个Voltage Sensor在电感支路串联一个Current Sensor二者输出经过PS-Simulink Converter变成Simulink信号。控制回路中上文的双闭环结构通过Add误差、PI调节器、PWM Generator模块串联实现。这里有一个关键的逻辑模式切换时需要把PWM驱动信号分配给不同的MOSFET——Boost模式时PWM驱动低压侧Q2Buck模式时PWM驱动高压侧Q1。这个选择逻辑可以用一个简单的Switch模块根据模式信号0/1来选择PWM输出通道。第三步设置仿真参数。离散求解器固定步长50ns即开关周期的1/1000采样时间电流环为50μs即20kHz电压环为250μs4kHz。仿真时长设为0.1s足以观察启动和稳态波形。第四步启动模式测试。初始状态让变换器工作在Buck模式目标电压12V验证充电过程波形稳定后给一个负载阶跃比如从额定50%加载到100%记录输出电压跌落和恢复时间随后切换到Boost模式设置目标电流比如恒流10A放电观察模式切换之后的动态过程。整个过程都能在仿真波形中清晰看到特别是模式切换瞬间电流波形是否有冲击。4. 常见问题与排查技巧实录4.1 代数环问题为什么我的模型报Algebraic Loop错误Simulink建模中代数环是一个很典型又容易让新手困惑的问题。它的成因是模型中存在一个信号环某个模块的输入依赖于自身的输出没有经过任何delay单位延迟或memory模块来打破环路。在双向DCDC控制模型中最常见的代数环出现在电流采样→PI控制器→PWM→功率电路→电流采样这个回路中——如果采样信号没有经过Unit Delay直接参与当前控制周期的计算就会形成代数环。报错信息通常长这样An algebraic loop was detected in the model. Simulink will attempt to solve it numerically...这个报错对于仿真实测来说很麻烦数值求解器会尝试迭代求解代数环既拖慢了仿真速度也可能导致结果不收敛或者振荡。排查与解决的方法就一个核心思路在环路的某个位置插入一个单位延迟。在DCDC控制模型中最自然的位置就是采样之后。给电流采样信号加一个Unit Delay模块或者直接在离散PI控制器之前用零阶保持器不仅打破了代数环也更接近DSP的实际采样逻辑——DSP在同一PWM周期内不能立即用本周期的采样值去计算控制量必须等下一个周期。还有一个容易产生代数环的位置是PWM模块的输出接到MOSFET的G极同时MOSFET的导通状态影响了采样得到的电流。这种情况下可以用PWM Generator模块内部自带的锁存功能来隔离或者手动在PWM输出前加一个Memory模块。总之记住一句话仿真中处理代数环的通用思路就是用一个周期的延迟来模拟数字控制器的计算延迟。4.2 仿真速度太慢怎么把大模型跑得飞起物理模型仿真的最大痛点就是速度。一个含开关模型的DCDC变换器如果开关频率20kHz固定步长50ns仿真0.1秒的物理过程可能需要几万步迭代。在控制参数整定阶段这种速度是极其影响效率的。我的提速策略分三个层次。第一招用平均模型。把功率级开关用平均模型代替比如用Simscape的Average-Model DCDC Converter模块保留下面的控制回路。平均模型忽略开关纹波只模拟开关周期的平均值行为速度能快一个数量级以上。控制参数整定、系统稳定性分析、负载突变动态测试用平均模型就足够了。第二招在物理模型里适当放宽精度。如果必须保留开关模型就把步长放宽到开关周期的1/100左右比如20kHz开关频率用1μs步长虽然纹波精度略有损失但速度提上去很多同时把功率器件设置为理想开关模型或简化MOSFET模型。第三招并行仿真。如果要做多组参数扫描用MATLAB的parfor并行计算工具箱多核并行跑多组仿真效率成倍提升。速度优化有取舍。用平均模型调好的PI参数直接移植到开关模型时可能会有微小差异需要在开关模型下重新微调一次。但这比全程用开关模型快太多了。工程上的标准套路就是平均模型定参数开关模型验稳性。4.3 波形发散/NaN错误先查这五个地方仿着仿着波形跳到Inf或者NaN几乎每个做电源仿真的人都遇到过。我总结一个高频原因排查顺序按出现频率排序求解器步长过大导致开关瞬态无法解析。特别是SiC MOS管开关速度极快ns级步长必须小于开关瞬态时间否则数值不收敛。对策降低最大步长或改用变步长求解器。功率器件参数不合理。比如MOSFET的Ron设为0理论上导通时没有电阻限制电流就容易导致数值发散。对策给Ron设置一个小值比如几毫欧同理电容ESR不能设为0。PI参数过大导致控制量振荡发散。系统能提供的最大占空比是0~1PI输出超过这个范围后如果没有限幅在离散域就会出现控制量绝对值指数增长。对策给PI输出加Saturation限幅0.05~0.95并开启抗饱和。仿真模型中出现不连续信号直接跳变导致非线性求解器崩溃。比如开关切换瞬间PWM信号从0跳到1的速率很快若模型步长不够小或者求解器对不连续点处理不好就会报错。对策启用Simulink的Zero-Crossing Detection选项或者适当降低步长。参考电压或电流设置引起的瞬间冲击。启动时参考从0直接跳到目标值瞬间误差很大PI输出饱和冲击电流可能导致仿真发散。对策给参考信号加Rate Limiter斜坡软启动处理。4.4 模式切换失败/波形异常波形行为到底告诉了我们什么模式切换失败的典型现象是切换信号给了但输出电压或电流没有按照预期跟随或者切换瞬间出现长振荡。我遇到过最典型的一种场景是从Buck切换到Boost后输出电压没有建立起来电感电流一直趴在0附近。排查后发现问题出在PWM驱动信号分配上——切换逻辑中只切换了模式信号但没有同步切换PWM输出的MOSFET通道。在Buck模式下PWM驱动的是高压侧Q1低压侧Q2由互补信号驱动切换到Boost时PWM需要改为驱动低压侧Q2Q1由互补信号驱动。这个逻辑虽然简单但初学者建模时很容易只改了PI控制器的参考而忽略了驱动逻辑的切换。仿真波形是很好的调试工具。出现异常时我会同时观察四个波形输出电压波形、电感电流波形、PWM驱动信号波形尤其是两个MOSFET的Gate信号、模式切换标志信号。把这四条曲线放在一张图里基本上就能定位问题出在哪一环。比如PWM波形正常而电感电流没有响应问题大概率出在功率电路连接或器件参数如果电感电流有响应而输出电压不对那问题就在输出电容或负载参数如果两者都没有正常变化那就要回查控制环路。5. 从仿真到工程落地的关键衔接5.1 仿真模型与C代码生成固定步长与离散求解器是前提仿真验证完成之后很多项目的下一步是把控制算法生成C代码部署到DSP或MCU里。这个环节Simulink的Embedded Coder可以直接生成PAWM、ADC配置和PI控制器的C代码但有几个前提条件必须提前处理好否则代码生成环节会报一堆错误。最核心的一个前提是模型必须用固定步长离散求解器不能用变步长或连续求解器。因为真实代码中控制算法是定时器中断驱动的所有变量都是离散量。建模时把电流环和电压环的PI控制器都设置为离散时间采样周期固定然后用离散模块搭建。另外要注意的是数据类型的处理。生成C代码后Simulink默认会用double类型但在MCU上跑控制算法double运算速度远慢于定点数或单精度浮点。所以出代码前建议把控制回路的信号强制转换成single类型或定点数类型。Simulink中有Data Type Conversion模块可以指定信号类型也可以在全局设置中统一配置。代码生成与硬件对接还有几个细节要注意PWM输出模块要和MCU的定时器寄存器对应关系要正确ADC采样通道编号要与硬件一致启停和保护逻辑要映射到GPIO口。这些在仿真模型里体现不出来但在模型设计时就要留好接口比如把保护信号、使能信号都做成模型输入端口这样生成的代码才能和外围电路对上。5.2 硬件在环HIL前的模型简化思路硬件在环测试HIL是连接仿真和实物之间的桥梁。把控制算法部署到真实的控制器硬件上把功率电路留在仿真中跑先验证控制器在实时环境下的表现再上真实功率板。但这里有一个工程现实HIL测试中功率级模型需要实时运行通常运行在FPGA或高速处理器上。而完整的物理模型含全部开关细节在实时环境下跑不下来。所以做HIL之前需要对功率级模型做简化。我的经验是用开关平均模型代替详细的MOSFET开关瞬态只保留必要的开关逻辑和损耗特性控制回路的模型保留全细节因为那是我们要验证的对象。模型简化还有个思路把硬件保护逻辑过压、过流、过温从仿真模型里提取出来放到控制器代码中执行仿真模型只提供传感器信号。这样既验证了保护逻辑又简化了仿真模型。实际操作中我会把仿真模型中的保护判断部分全部删掉改为从模型输出端口直接送出电压电流信号由外部控制器做判断和处理。这样生成的代码就和真实系统更接近因为实机中保护逻辑本来就跑在控制器里。5.3 仿真数据与实验数据的对标校准技巧最后一个想分享的经验是仿真与实物的对标。仿真做得再漂亮最后还是要回到硬件验证。而仿真和实物对不上也是再常见不过的事情。如果你已经按前面的流程完成了仿真接下来做实验板时有一个技巧能大幅减少仿真与实物的差距把仿真中的非理想因素补齐。主要包括三块一是驱动电路的死区时间和传输延迟二是有源器件的导通压降和开关损耗三是PCB和线路的寄生参数电感、电容以及走线电阻。这些因素在仿真中如果不加仿真结果通常比实物好很多——启动过冲小、效率高等。在仿真里加入死区时间PWM Generator里直接配置、功率器件的Ron和VfMOSFET参数中设置、线路电阻在功率电路里加个小电阻之后仿真波形会贴近现实很多这样仿真的PI参数移植到实物后基本不需要大改。对标的技巧建议分三步走先把稳态波形对好比较仿真和实物的稳态电压/电流值、纹波大小误差在5%以内就可以接受再对动态响应给相同的负载阶跃比较超调量、恢复时间如果差异大优先检查环路采样延迟和PWM死区最后对效率曲线如果仿真效率比实测高了几个百分点多半是寄生参数和开关损耗没建模完全。在我接触过的项目里很多工程师做完仿真就直接上电路板结果一测一个不对然后回头改模型。其实仿真最大的价值不是完美预测实物而是帮你提前把控制策略和参数范围确定好减少盲调的次数。只要能保证仿真的控制逻辑正确、参数和实物误差可控它就已经完成了自己的使命。建议在做仿真时就预留出对标校准的接口比如把采样延迟、驱动延迟、死区这些非理想参数做成可配置的变量这样在调试实物的时候随时可以在仿真里复现实测现象快速定位问题在哪一环。
返回列表