1. 项目概述与整体设计思路
Boost和Buck电路是电力电子领域最基础的两种DC-DC变换拓扑,一个是升压,一个是降压,但把它们放在同一个仿真框架里做双闭环控制研究,就不是简单搭两个模型的事了。我最近刚完成这个项目的全流程仿真,从主电路参数计算、控制环路设计到Simulink模型搭建、波形调试一路走下来,踩了不少坑,也攒了不少可以直接复用的经验。这篇就把整个研究过程和细节完整捋一遍。
这个项目要解决的核心问题很明确:Boost和Buck电路都只有一个可控开关管,输出会受到输入电压波动和负载突变的影响,单环控制(只采样输出电压)虽然能稳住稳态,但动态响应慢,而且Boost电路在负载突变时输出容易过冲。双闭环控制,也就是内环电感电流环加外环输出电压环,是在这个场景下最常规也最实用的解决方案。内环对付快速变化的电流扰动,外环稳住输出电压精度,两者配合后系统的带宽和抗扰能力都会有明显提升。
建模仿真这个环节,选Simulink几乎是行业标准做法。Matlab/Simulink里既有Simscape Electrical这种物理建模工具包,可以直接拖功率器件和磁性元件,也可以用传递函数搭平均值模型做控制算法验证。我在这个项目里两套都用了,前面验证控制参数用平均值模型,速度快,PI参数大概心里有数之后再切到开关模型跑精细波形,这样效率最高。整篇文章涉及的物理建模、参数计算、PI整定、PWM生成、波形分析,都可以直接照着做。
1.1 为什么Boost和Buck要放一起做双闭环研究
很多人觉得Boost和Buck是两个独立电路,控制方法也各搞各的,其实它们的本质结构高度相似。对比一下就看明白了:Buck是开关管串联在输入端和电感之间,输入电压通过斩波后经LC滤波输出;Boost是电感串联在输入端,开关管并联在电感后面,通过控制电感储能和释放来实现升压。两者的被控对象都是电感电流和输出电压,传递函数也都是一阶系统带一个由LC决定的谐振极点,区别只在于Buck的占空比到输出的传递函数是线性的,Boost是非线性的,小信号模型里分母上多了一个与占空比相关的零点。
正是因为数学本质接近,双闭环控制可以共用同一套设计框架。外环用电压PI调节器生成电感电流参考值,内环用电流PI调节器生成占空比(Boost中还需要折算成合适的调制方式)。我在实际仿真中发现,只要把电流环带宽设为电压环带宽的5到10倍,两个环路基本不会互相打架,这个设计经验在Boost和Buck上都能直接套用。这个项目把两种拓扑放一起对照研究,最大的价值就在这里——参数整定方法论可以互相迁移。
1.2 双闭环相比单闭环的优势在哪里
单电压闭环的问题是:输出电压已经偏离了才去调节,属于"事后修正",而电感电流本身包含了负载变化和输入变化最直接的信息。举个例子,Boost电路负载突然加重时,输出电压会先掉下来,电压环才反应,中间这段滞后时间内电流可能已经冲到很高,严重时会触发过流保护甚至烧管子。
双闭环相当于把电感电流单独拎出来用一个环路去管。负载突变时,负载电流变化会立刻反映到电感电流上,电流内环第一时间把电流拉回设定值附近,不需要等输出电压掉下来再动。外环的电压PI只负责缓慢修正电流参考值,让输出电压逐步回到目标。这个"快慢分工"的思路在控制领域很常见,但对于Boost这种非最小相位系统(存在右半平面零点),内环的存在还能显著缓解响应初期输出下降的问题,这在实际仿真波形里可以看得很清楚。
2. 主电路原理与关键参数计算
2.1 Buck电路的工作原理与参数整定
Buck电路降压的原理很容易理解:开关管以一定频率开通和关断,把输入电压斩成方波,然后经过LC滤波器把方波平均值之外的谐波滤掉,负载上得到的就是平均电压。工作在连续导通模式(CCM)下,输出和输入的关系是 Vout = D × Vin,这里 D 是占空比。这个公式是Buck控制的基础。
电感和电容的取值决定了电流纹波和电压纹波。我常用的设计指标是电流纹波不超过满载电流的20%到40%,电压纹波不超过输出电压的1%到2%。电感量按这个公式算:
L_min = (Vin_max - Vout) × D_min / (fs × ΔI_L)这里 D_min 是最高输入电压对应的最小占空比,fs 是开关频率,ΔI_L 是允许的电流纹波峰值。电容按纹波电压要求来算,CCM下:
C_min = ΔI_L / (8 × fs × ΔVout)我这次仿真里设定输入48V,输出24V,开关频率50kHz,满载5A。按上面的公式,电感算出来大约是96uH左右,我取了120uH,留出一点裕量;电流纹波设计为0.8A,电容按1%纹波电压算出来大概是67uF,实际取100uF。这些参数放到Simulink里跑出来的纹波都在预期范围内。
2.2 Boost电路的工作原理与参数整定
Boost升压电路的工作原理可以这样理解:开关管导通时,输入电压直接加在电感上,电感电流线性上升,相当于给电感充磁;开关管关断时,电感电流不能突变,会通过二极管流向负载端,这时电感上的感应电压和输入电压串联叠加,输出端电压就被抬高了。CCM下输出和输入的关系是 Vout = Vin / (1 - D),因为D只能是0到1,所以输出永远大于等于输入。
Boost的储能元件计算思路和Buck类似,但公式不同。电感量主要看最大输入电流时的纹波要求:
L_min = Vin_min × D_max / (fs × ΔI_L)输出电容要考虑两个因素:一个是电压纹波要求,另一个是负载突变时电容需要提供能量缓冲。纹波要求对应的电容计算公式是:
C_min = I_out × D_max / (fs × ΔVout)我仿真里Boost设计参数是输入12V,输出24V,开关频率50kHz,满载2A。输入最低10V对应的最大占空比 D_max 算下来大概是0.58,允许电流纹波0.6A,电感约需要190uH,我取220uH。电容按输出纹波0.1V(约0.4%)计算,需要约230uF,我取470uF。Boost对电容容量的需求比Buck大的原因也在这里,开关管关断期间,输出全靠电容维持,电容太小电压跌落就会很明显。
2.3 双闭环控制架构与PI调节器设计
双闭环的架构一句话就能说清:电压外环的输出是电流内环的参考值,电流内环的输出通过调制生成开关管的PWM占空比。采样对象分别是输出电压和电感电流,两个PI调节器串联工作。
电压外环PI的作用是保证输出电压稳态精度和较低的超调量,输出限幅要限制在允许的最大电感电流范围。电流内环PI的作用是快速追踪电感电流变化,输出限幅要限制在PWM占空比的合理范围(Boost通常是0.1~0.9,Buck可以到0到1)。
PI参数整定我整体采用"由内到外、分层整定"的思路。先单独设计电流内环,把电流环的响应速度调够快,然后再加电压外环,慢慢调整电压环的PI参数。项目中把电流环的截止频率设置在开关频率的1/10左右,也就是5kHz附近,电压环的截止频率设置在500Hz到1kHz左右。这样电压环和电流环之间隔开5到10倍频程,环路之间的耦合影响几乎可以忽略。
3. Simulink模型搭建与核心实现
3.1 两种建模方式的选择:平均值模型与开关模型
Simulink里做电力电子仿真有两种主流方式,一个是平均值模型,一个是开关模型,很多人一上来就建开关模型,其实效率很低。平均值模型忽略开关纹波,把开关管和二极管等效成一个受控电压源和受控电流源,输出电压和电流的关系直接按占空比的线性或非线性函数来建立。这个模型跑起来非常快,几分钟就能跑完好几秒的仿真,特别适合调PI参数和验证算法逻辑。
开关模型则是用Simscape Electrical里的MOSFET、Diode、电感、电容等物理器件搭建真实电路,每个开关周期都能仿真出来,波形里能看到完整的电流纹波和电压纹波,更贴近实际。缺点是仿真速度慢,而且参数不合适时很容易不收敛。
我的建议是两条腿走路:先用平均值模型把PI参数调好,再用开关模型验证。这样既快又不失真,还能互相印证。下面讲的就是两套模型的搭建方式。
3.2 平均值模型搭建(用于PI参数快速整定)
平均值模型的重点在于把开关网络的平均行为用公式表达。对Buck电路,开关网络的平均输出电压是 D×Vin,平均电流是 D×I_L;对Boost电路,开关网络的平均输入电流是 1/(1-D) 折算到输出侧的电流关系,输出电压平均值是 Vin/(1-D)。
具体搭法如下:用Vin乘以脉冲信号的平均占空比D得到前级的电压源输入到LC网络,电感串联一个小电阻模拟铜阻,负载用可变电阻模拟突加突卸。控制部分用电压采样模块(直接节点电压)、电流采样模块(串联电流测量),误差信号进PI调节器,限幅之后作为占空比给到受控源。这个模型里没有任何开关器件,仿真速度和稳定性都很好。
整个模型的Simulink实现大致是这个逻辑:
Verr = Vref - Vmeas Iref = PI_voltage(Verr) Ierr = Iref - Imeas D = PI_current(Ierr)两个PI调节器串联之后,把D送给受控源。电流内环饱和限幅对Buck设为0.95,对Boost设为0.9,防止出现过大的占空比导致电感饱和。
3.3 开关模型搭建(用于精确波形验证)
开关模型用Simscape Electrical搭建,Buck电路具体是这样:直流电源接入一个N沟道MOSFET作为开关管,后接电感和二极管续流,再后面是电容和负载电阻。MOSFET的驱动端接PWM信号,PWM信号由控制回路计算出的占空比经过PWM Generator模块生成。Boost电路拓扑稍微换一下,电感放在输入端,MOSFET并联在电感后面,二极管和电容组成输出级。
这里有几个关键设置需要注意。第一个是求解器:我在仿真里使用的开关电源模型,如果开关频率是50kHz,连续求解器建议选 ode23tb 或 ode15s,这两个对刚性系统的处理能力比较强,不容易出现不收敛。第二个是PWM生成方式:Simulink里的PWM Generator模块只需输入占空比和开关频率,输出的Pulse宽度信号直接连接MOSFET的g端即可。第三个是杂散参数:电感要加串联等效电阻,电容要加等效串联电阻(ESR),否则波形会偏理想化,和实际差别很大。
我这次仿真里给电感设的是10mΩ内阻,电容ESR设的是20mΩ,虽然电阻很小,但对阻尼和纹波仿真结果的真实性影响显著,尤其反映在启动过冲和负载阶跃响应的波形上。
3.4 电流采样与PWM调制细节
电流内环的效果很大程度上取决于怎么采样电感电流。在开关模型里,有两种常用做法:一是用Simscape里的Current Sensor模块串联进电感支路;二是把电感所在的支路信号引出,通过滤波后送入控制环。但要注意,开关纹波很大,直接采样进PI调节器会导致占空比波动,我在仿真里对采样电流加了一个一阶低通滤波器,截止频率设在20kHz左右,把50kHz的开关纹波滤掉,保留电流的基波和主频段信息,控制就更平稳。
PWM调制频率选择上,Buck和Boost都用50kHz,这个频率对于MOSFET和仿真速度都是折中方案。频率太高,仿真步长必须缩小,跑同样时长的时间成本成倍上升;频率太低,电感体积大,电流纹波明显。50kHz对我来说熟练度和仿真稳定性都是最佳点。
还有一点很多人会忽略:PWM Generator模块输入的占空比需要经过单位换算。Simulink里PWM Generator在连续模式下输入范围是0到1,如果PI调节器的输出限幅设的不是这个范围,很容易出现调制比不对、输出电压偏低的"灵异现象"。我专门给PI输出端加了一个饱和限幅和增益校准,保证进入PWM模块的信号严格落在0到1之间。
3.5 双闭环模型整体连接与信号路由
整体模型我把主电路部分放在一个Subsystem里,控制部分放在另一个Subsystem里,输入输出通过Goto/From标签连接,避免模型线缆密集到看不清。控制部分内部结构是:Vref常量送入求和器与Vmeas求差,进入电压PI,限幅得到Iref;Iref与Imeas求差,进入电流PI,限幅得到D;D进PWM模块,PWM信号进主电路。
主电路里输出电压和电感电流的测量信号通过From标签回传到控制侧。模型跑起来之后,用Scope把输出电压、电感电流、占空比、参考电流四个信号同时显示出来。
需要注意的细节是初始状态。Boost电路在启动时输出电容上没有电压,如果直接把Vmeas反馈到电压环里,PI调节器一开始就会饱和输出最大占空比,电感电流可能冲到很高。我做了两步处理:第一步是给输出电容设置初始电压(和输入电压相同,模拟预充状态)或者给参考电压做一个斜坡上升;第二步是给电流PI输出加软启动限制,让占空比从较小值开始逐步放开。处理之后启动过冲和电流冲击明显小了很多。
4. 仿真结果与分析
4.1 稳态波形与关键指标验证
模型搭好后先跑稳态,不加载任何扰动。Buck电路输入48V输出24V,实测输出平均电压24.02V,电压纹波大约180mV,在我设计指标的1%以内。电感电流平均值接近负载电流5A,纹波约0.65A,也符合设计预期。Boost电路输入12V输出24V,实测输出24.05V,纹波大约210mV,电感电流平均值在5A左右,纹波约0.5A,都在设计范围内。
两个电路的开关管两端电压波形都符合理论预期:Buck开关管承受最大反向电压等于输入电压48V,Boost开关管承受的最大电压等于输出电压24V(严格说是输出二极管反向恢复电压,大概在30V以下),这说明主电路的参数和拓扑结构都是合理的。
功率开关的占空比波形稳定,Buck稳定在0.5附近,Boost稳定在0.5附近,和理论公式 Vout=Vin/(1-D) 反推回来的基本一致,控制环路没有明显的稳态误差。
4.2 负载突变动态响应对比
接下来做动态测试。我给负载电阻在仿真运行到0.03秒时从满载变为半载,再在0.06秒时从半载跳回满载,观察双闭环控制下的动态响应。
Buck电路的负载突变响应让人满意:满载切换到半载时,输出电压上冲约250mV(约1%),经过约1.5ms恢复;半载切回满载时,电压跌落约300mV,恢复时间约2ms。电感电流在切换瞬间有快速的调节动作,电流内环明显参与了制约,没有出现明显的电流尖峰。
Boost电路的负载突变响应更有看点。由于Boost是非最小相位系统,满载切半载时理论上会出现输出电压先继续上冲再回落的"反向"现象。在双闭环控制下,这个反向变化被电流内环抑制了很多,实测上冲量约420mV,恢复时间约3ms。如果只用单电压环,这个上冲量至少会翻一倍。对比实验我做过多次,结果很稳定,这也是双闭环在Boost电路里价值的最直观体现。
4.3 输入电压扰动下的鲁棒性分析
电源系统常见的工况是输入电压波动。我模拟了两种情况:Buck输入电压从48V阶跃到54V再回到48V;Boost输入电压从12V阶跃到9V再回到12V,观察系统的抵抗能力。
Buck在输入电压阶跃时刻,输出电压出现了约150mV的偏离,2ms内恢复。调整过程中,占空比自动从0.5下调到0.44左右,抵消输入升高的影响,这正是双闭环中的电压外环在发挥自动调节作用。
Boost的输入电压骤降是它不太友好的工况之一。12V掉到9V时,输出电压瞬时跌落约500mV,恢复时间大概4ms。但这期间电感电流被电流内环控制得很平稳,没有冲击到大电流。我用单电压环做过同样的测试,跌落幅度和恢复时间都有明显恶化。这个对比实验强烈说明了电流内环对Boost系统鲁棒性的重要贡献。
5. 常见问题与排查技巧实录
5.1 仿真报错与不收敛问题
电力电子仿真最常见的问题之一是"Simulink cannot solve the algebraic loop"或者仿真直接卡死在某个时间点。我这里总结一下处理经验。
第一种情况是代数环。控制回路里如果测量信号和占空比信号之间存在没有延迟环节的直通通路,就容易出现代数环。最简单的解决办法是在PI调节器输出和PWM模块之间插入一个Memory模块或单位延迟(Unit Delay)。虽然会引入一个步长的延迟,但在50kHz开关频率下,一个步长的延迟对控制品质的影响可以忽略。
第二种情况是数值刚性。连续仿真用默认的ode45很容易不收敛,因为电力电子电路天然存在非常快的时间常数(开关切换瞬间的电压电流变化率极高)。我建议直接用 ode23tb 或者 ode15s,配置上把最大步长设置为开关周期的1/50,也就是1e-6秒左右,这样既能保证精度,又能兼顾仿真速度。
下面是几个我实际遇到的报错场景和解决方案的速查表。
| 报错/现象 | 原因 | 处理方法 |
|---|---|---|
| Algebraic loop detected | 控制环存在直通路径 | 在PI输出后插入Memory模块 |
| Solver failed to converge | 步长过大或模型太刚性 | 改用ode23tb,最大步长设为1e-6 |
| NaN出现在波形中 | PI积分器初始状态过大,或模型中有除零 | 检查PI初始条件和积分增益,增加限幅 |
| 输出电压一直偏低 | PWM占空比范围不对 | 检查PI输出限幅是否在0到1之间 |
| 电流波形发散 | 电流PI参数过大,或采样滤波不足 | 降低电流环比例增益,增加电流采样滤波 |
5.2 启动冲击电流过大的处理
Boost电路启动时的冲击电流是个很容易让人头疼的问题。模型刚跑起来,控制还没建立起来,输出电容相当于直接通过电感充电,电感电流在极短时间内冲得很高。这个冲击电流让你无法判断控制器到底调得好不好,因为每次启动波形都是充满毛刺的。
我做了三件事来缓解启动冲击。第一件是把输出电压参考源从阶跃改为斜坡,斜坡时间设在2ms左右,让电压环的输出不要一开始就饱和。第二件是给电流内环加软启动限幅,把电流参考值的最大值从稳定值的50%开始逐步放开到100%。第三件是在输出电容上设置初始电压,让电容预先充到接近输入电压的值,再开始PWM调制。这些处理做完之后,启动过冲和电流冲击都在可控范围内,调试参数时也更容易看清控制环路的真实响应。
5.3 PI参数整定的实操心得
最后聊一下PI参数整定的一些心得。很多人调PI毫无章法,乱试一通。我给出我的经验方法:先把电流内环单独调,把电压外环断开,直接把电流参考值设成固定值,观察电感电流的实际追踪情况。先把P调到系统响应快速但不过度振荡,再逐步加I消除稳态误差。电流环调好后,再接电压外环。电压环的P开始尽量小,加一点就观察一下阶跃响应,找到临界振荡点再把P退到临界值的1/3到1/5,然后再加I处理稳态误差。
我这个项目最终用到的参数大概是这样:Buck电压环P=0.5,I=150;电流环P=2,I=300。Boost电压环P=0.3,I=120;电流环P=1.5,I=200。注意这个值只在我这个具体拓扑和参数下有效,鼠标一样的参数放在不同电压电流等级的电路上差别会很大,关键还是要掌握整定的方法。
还有个容易被忽略的小细节:电流采样信号的滤波时间常数要是加得太大,会在电流环里引入额外延迟,导致环路不稳定。我用的一阶低通滤波器截止频率放在20kHz,时间常数大约是8微秒,这个值相对电流环的响应时间常数来说还比较小,不影响稳定性,又能有效滤除50kHz的开关纹波。
5.4 仿真时长与步长的平衡技巧
仿真时长和步长的平衡也是提升满意度的关键点。我一般先把仿真停止时间设定在0.1秒左右,跑一次看波形,确认稳态后再逐步加长到0.3秒,用来观察多段扰动。固定步长设置为1e-7秒当然更精确,但跑起来太慢。我的经验是,在观察启动和动态响应的关键时间段(比如0到0.02秒)用较小的最大步长来提高精度,后面稳态阶段用较大的步长,可以通过修改求解器的可变步长上限来实现。这个方法操作不复杂,但能让仿真效率明显提升。
此外,如果仿真跑完之后想更细致地观察某个时间段的波形,可以设置输出的采样时间(Output Times),把关注的时间段单独提出来细化输出,不需要重跑整个仿真。
6. 个人经验总结
这个项目做下来,最大的体会是:双闭环控制的核心难点其实不在Simulink操作,而在于参数整定时对两个环路带宽分配的理解。只要想清楚"内环电流快、外环电压慢"这个原则,很多问题都能顺着理出来。另外在实际建模时,别偷懒直接上开关模型,先花十分钟搭平均值模型把PI参数调好,后面所有工作都会顺利很多。从项目扩展角度看,这套双闭环设计思路完全可以平移到其它拓扑,比如同步Buck、双向Buck-Boost、以及带耦合电感的Boost变换器,原理相通,只是被控对象模型和调制方式有差异。第一步先把Buck和Boost这两条腿走稳,后面路就宽了。