PSIM反激变换器的EMI分析及优化

使用PSIM进行反激式开关电源的EMI干扰分析与仿真,PSIM是一种电力电子专用的仿真软件,使用上手方便,操作和 Multisim 等其他仿真软件差不多。

🔥电路搭建

主电路

  • 主电路如上,反激电路为主体
  • 包含原边的RCD吸收电路、副边二极管的RC吸收电路,变压器、MOSFET、副边二极管的都是非理想型。MOSFET本身参数中极间电容设置为0,其极间电容在电路中用并联电容形式表现,更直观。
  • 电路输入是311V直流,输出是5V,DCM断续模式
  • 一些参数在图中已有显示,其他重要参数配置如下:
    MOSFET参数
    变压器参数
    副边二极管参数
    驱动电路如下:
    驱动电路
  • 使用比较器进行PWM波调制,直流源5V,三角波10kHz,10V(占空比0.5),调制出0.5占空比的PWM方波。
  • 信号转能量的转换器使用的是多模式的,可以用于非理想MOSFET的驱动,也可以设置驱动电阻(无法直接通过电阻元件连接信号和栅极)。转换器一段接MOSFET栅极,另一端接源极。

🔥RCD吸收电路

  • 我们先看看非理想状态下开关管漏源电压:
    无RCD
  • 可以看得到每次关断,电压分为带尖峰的高频震荡1(如此命名方便后面再次提到),和低频的震荡2。前者是通过变压器原边漏感Lk和MOSFET的Cds谐振得到,后者则由于进入断续状态,原边励磁Lm和Lk一起与Cds震荡得到,L明显增加了所以震荡频率大大下降。
  • 启用主电路图左上角的那部分RCD电路:
    RCD吸收电路效果
  • 很明显,震荡1的尖峰从2k降低至1.75k以下,而且后续的震荡1振幅衰减明显,达到了不错的效果,这只是其中一种参数配置的结果,可以有更好的吸收效果。

🔥MOSFET驱动电阻

开关控制器

  • 停用RCD电路,打开上图的开关控制器(转换器)的面板
    栅极驱动电阻
  • 设置驱动电阻,可以取极小的数值如0.00000001代表没有驱动电阻,得到图像就是之前的没有RCD吸收电路的效果,我们加上不同大小的Rg。
  • 对两次的尖峰部分进行FFT(傅里叶)分析,得到如下图像,绿色是没有Rg的图像,相比之下使用足够大的Rg能使谐波明显减少:
    驱动电阻效果FFT
  • 结合驱动电阻和RCD吸收电路,得到如下效果:
    RCD电路+Rg100Ω

🔥RC吸收电路

  • 我们先看看漏源极电压和副边二极管电压的波形:
    漏源极电压和副边二极管电压
  • 可以看到MOSFET导通的时候二极管处于震荡1,有别于MOSFET的震荡1,这是变压器副边漏感Lk2和二极管结电容Cj谐振导致的,可以看得这个电路条件下其震荡频率比较高,振幅也比较剧烈。
  • 将电路还原为最初的样子,启用副边的RC电路,我们使用不同的C和R值进行比较,接着截取了各自副边二极管电压震荡部分的波形:
    不同C的RC电路效果
    不同R的RC电路效果
  • 可以看到无论RC电路对震荡的削弱作用很显著

🔥变压器漏感

  • 之前提到,各种震荡都有变压器漏感参与其中,如果我们调节漏感会得到如下结果(MOSFET漏源极电压):
    改变变压器漏感效果
  • 可见合适的漏感很重要,有的取值可以大大消减震荡,而有的取值尖峰幅值将非常夸张。

🔥抖频

  • 抖频是指改变驱动信号频率,使之在一个范围内不断改变,这可以让谐振无法完全地作用,降低一些频段谐波幅值,将其较合理地分摊给其他频段。
  • 在PSIM实现抖频的方法是使用如下电路:
    抖频电路
  • 最左边的是C模块即C语言模块,其输出和输入引脚可以自定义,也可以像这样加上引脚文字说明,输出是浮点型。
  • 中间的模块是方波(可变频)产生器,其D脚输入的是0-1之间的占空比值。dalay是输出延迟,我们不需要直接接地,freq引脚输入的就是频率值。
  • 用这个电路代替之前的PWM调制电路。主电路方便起见在原始状态下(第一张图)将MOSFET设为理想型(外面的极间电容保留),副边二极管也去掉并联的结电容,其他不变。
  • C模块编程界面
  • C模块界面如上,在上面设置好输出2个(占空比和频率)
  • 现在说说C模块如何编程,打开模块面板,除了文件引用,就是三个函数和详细的说明,三个函数如下:
void SimulationStep(
        double t, double delt, double *in, double *out,
         int *pnError, char * szErrorMsg,
         void ** reserved_UserData, int reserved_ThreadIndex, void * reserved_AppPtr)
{

}
void SimulationBegin(
        const char *szId, int nInputCount, int nOutputCount,
         int nParameterCount, const char ** pszParameters,
         int *pnError, char * szErrorMsg,
         void ** reserved_UserData, int reserved_ThreadIndex, void * reserved_AppPtr)
{

}
void SimulationEnd(const char *szId, void ** reserved_UserData, int reserved_ThreadIndex, void * reserved_AppPtr)
{

}
  • 第一个SimulationStep函数将在仿真步长每一步都进行一次,也就是我们动态抖频需要进行的位置,第二个和第三个函数将分别在仿真开始和结束进行一次,这次没用到就可以删除。
  • 模块的输入和输出分别放在inout两个数组里面,对应各个引脚
  • 本次的代码如下:
#include <Stdlib.h>
#include <String.h>
#include <math.h>
#include <Psim.h>

// PLACE GLOBAL VARIABLES OR USER FUNCTIONS HERE...
int mosfre = 10000;		//固定频率
int fre = mosfre;		//当前频率
int direction = 1;		//加或者减频率
int step = 1000;			//步长
int uplim = 5000;		//向上抖频限制
int downlim = 5000;		//向下抖频限制

void SimulationStep(
        double t, double delt, double *in, double *out,
         int *pnError, char * szErrorMsg,
         void ** reserved_UserData, int reserved_ThreadIndex, void * reserved_AppPtr)
{
// ENTER YOUR CODE HERE...
    if (fre > (mosfre + uplim)){
        direction = -1;}
    else if (fre < (mosfre - downlim)){
        direction = 1;}
    fre += step * direction;
    out[1] = fre;
    out[0] = 0.5;
}
  • 代码逻辑很简单,就不再赘述。编程完按下检查代码进行编译,没有报错就退出面板,用探针检测方波波形:
    抖频方波波形
  • 这次在10kHz为基准上下抖动5kHz,对整个漏源极电压波形进行FFT分析,得到如下对比效果:
    抖频效果(漏源极电压Uds)
  • 看到波形有密有疏,说明成功实现。
    抖频效果_FFT
  • 可以看到从电压波形的角度,抖频的部分尖峰高于原来没有抖频的波形,而一部分是低于后者,这就需要RCD吸收电路等其他措施来消除更高尖峰的影响。
  • 而从FFT分析的角度,中间部分数值较高的频段在加入抖频后会大大削弱,右边一簇小高峰也完全抹平,取而代之的是中频段有相当部分的数值有一定的上升,但是都在可接受范围内。也就是抖频达到了目的。
  • Copyrights © 2023-2025 LegendLeo Chen
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信