开关电源环路设计—补偿器与功率级建模仿真

好久不见,上一次写专栏还是在21年,不过都删了😂,这回简单讲讲自己理解的如何设计开关电源的电压和电流环路的补偿器,先用几个仿真软件做做仿真,最后贴一张实际做过的用示波器扫出来的结果。如果有错误请指出哦~
本文内容参考有UP主:電源那些事儿、电力电子电机硕博士和木修于淋的视频以及Edward Lee的 《混合式數位與全數位電源控制實戰》和《开关电源环路设计》两本书。软件用到了Simplis、Matlab和PLECS。那我们开始吧~
在设计环路之前首先得对系统功率级建模然后得到系统的传递函数,根据传递函数的零极点位置再设计补偿器,这里获取系统功率级的传递函数是个蛮重要的,我看过的书上一般都是用什么小信号模型还是状态空间平均来进行建模,但是因为没有读过研究生也没学过自控这门课这里还是不太懂,我一般会采用Simulink或者Simplis获取系统的Bode Plot然后用Matlab拟合出一个传递函数,也不需要复杂的公式计算,还是对像我这种菜鸟还是很友好的。那么获取功率级的Bode Plot我一般喜欢使用Simplis,主要是Simulink实在是太慢了,PLECS还没有导出数据,按理说除了移相全桥和DAB(其实应该可以,没有去深究),像是LLC还是简单的Buck与Boost都可以用Simplis很快速方便的得到一个Bode Plot。下面就以一个Buck为例做一个演示。
首先用Simplis搭出一个开环的Buck:

这里应该很好理解,经典的电压模式Buck控制器(SG3525或者TL494)与Mos驱动和Buck的基本结构。使用POP分析+AC分析。

可以看到这里有一个LC滤波器的双极点,在输出电容ESR位置有一个零点。首先把这个数据复制导出为一个TXT文档。

然后保存命名为Data.txt,接着打开Matlab用以下脚本拟合出系统的传递函数:

这里由于系统是个二阶系统,tfest函数第二个参数写2就可以,运行就可以得到拟合出来的系统传递函数和Bode Plot。可以看到几乎是一样的。

接着就是设计我们的补偿器,根据图里可以看出来,在900Hz位置有一个双极点,212KHz位置有一个零点,开关频率是70KHz,系统频宽就设计为一个7KHz差不多。补偿器的双零点位置就是在900Hz,因为系统的带宽相比于ESR零点位置不是很高,高频极点就放在35KHz,即二分之一开关频率处差不多。两个极点位置就是调整P.M(相位裕度)和频宽了。根据Edward的书上说F Original公式为:F0 = Vramp * Fc / Vin,那么这里F0位置就选择140Hz,输入电压设计为50V.剩下一个极点就是我们调整相位裕度的。先选择4KHz的极点看看效果。

可以看到频宽偏低,P.M偏低,接着调整参数为25KHz,结果如下:

Wp:140Hz 25KHz 35KHz Wz:900Hz
相位裕度差不多但是频宽略高(9KHz了)。那么减小Wp0 增大Wp1看看结果

可以看到在110Hz的Wp0,30KHz的WP1,系统频宽是7.13KHz,P.M是55.8度,效果不错。这里也可以对比一下PI控制器效果如何:

调了一阵子只有这个参数P.M比较高,也就是系统稳定。再调要么系统太慢要么系统不稳定,可以看到PI控制器在相近P.M下频宽只有1.23KHz,所以要向达到最佳动态响应还是要根据实际设计Type-2 或者Type-3的补偿器。
补偿器零极点设计完成后我们可以通过Matlab看看我们的补偿器传递函数是什么样子的:

在PLECS里搭建好系统框图后,直接使用这个传递函数看看效果,参数与Simplis相同:

这边R1是25欧,输出电压30V,R3负载是5欧来测试动态响应。以下是仿真结果:


可以看到调整时间在3ms内,且超调很小,瞬时跌落与过冲0.5V。可以通过以上传递函数直接Bilinear-Transform得到数字的3P3Z补偿器使用,也可以用脚本算出来模拟的Type-3的RC参数:

在Simplis效果如下:


和直接补偿器传递函数得到的结果相差不大。
以上方式还可以扩展至对平均电流模式的控制,以下是例子:





可以看出个位数PWM周期就实现了收敛,且对2KHz的Reference也完美的进行了跟踪。下面这张图是我实际做的一个,因为设计的是50V实际36V输入,相位裕度偏大和频宽会有些偏低:

那今天内容基本就差不多了,简单地把自己了解的环路设计做个总结,有错误有问题还请指出哦~