数字电源环路补偿(3)

本文详细介绍了数字电源环路补偿在LLC变换器中的实现,包括使用DSP进行控制、FPID传递函数的应用、系统控制周期的影响以及不同补偿器的性能比较。作者通过理论分析和实验验证了控制周期选择、负载跳变影响及不同工况稳定性的重要性。
摘要由CSDN通过智能技术生成

前两篇

数字电源环路补偿(1)-CSDN博客

数字电源环路补偿(2)-CSDN博客

叭叭叭讲了一大堆原理,所以这节实际操作一下


首先各类补偿器的传递函数已经知道了,怎么使用模拟电路搭建也说明了,这里主要是使用DSP数字控制,方便验证修改。

假设我们的FPID传递函数如下:

使用tusin(双线性变换法):

其中Ts为系统控制周期,我这里取10kHz,也是就100us。

那么可以得到z域传递函数:

这个写成代码形式就是如下:

为了分析系统控制周期对系统的影响,这里我画几组不同Ts的伯德图如下:

对应的阶跃响应如下:

可以看到,最低要求就是控制频率得是你系统截止频率2倍频以上,推荐20倍频,这样可靠性才能得到保证。否则太低的话,你控制效果虽然不会像上面这样阶梯状,但准确度和响应表现都会大打折扣。

用一组仿真和理论对比图简单明了说明关系:

可以看到截止频率为10khz时,20khz表现已经不怎么能接受了(其实还好),但仿真都这个样子了,实际只会更糟糕。所以取高就好,但Ts边界效应又很明显,100k和1M和连续的表现其实都差不了多少,所以取一个合适的值即可。


好了,上实验平台,LLC变换器:

实验平台参数为400V/48V/480W,控制器使用STM32H7,之前博客介绍过。

这里直接给代码吧:

积分器:

typedef struct {
    float x1;
    float y1;
} DTI_Sys;

static float DTI(float x0,DTI_Sys* DTI_p)
{
    float temp;

    temp=(x0+DTI_p->x1)/2;
    temp=temp*Sys_Ts+DTI_p->y1;
    DTI_p->x1=x0;
    DTI_p->y1=temp;
    return temp;
}

低通器:

typedef struct {
    float x1;
    float y1;
    float wp;
} LPF_Sys;

static float LPF(float x0,LPF_Sys* LPF_p)
{
    float temp;

    temp=(x0+LPF_p->x1)*LPF_p->wp;
    temp-=(LPF_p->wp-2*Sys_Fs)*LPF_p->y1;
    temp/=(LPF_p->wp+2*Sys_Fs);
    LPF_p->x1=x0;
    LPF_p->y1=temp;
    return temp;
}

FPID:

static float FPID3(float x0)
{
    static float x1;
    static float x2;
    static float y1;
    static float y2;

    float temp;

    temp=(FPID3_P+FPID3_D*FPID3_N+Sys_Ts/2*(FPID3_N*FPID3_P+FPID3_I)+FPID3_I*FPID3_N*Sys_Ts*Sys_Ts/4)*x0 \
            +2*(FPID3_I*FPID3_N*Sys_Ts*Sys_Ts/4-FPID3_D*FPID3_N-FPID3_P)*x1 \
            +(FPID3_P+FPID3_D*FPID3_N-Sys_Ts/2*(FPID3_N*FPID3_P+FPID3_I)+FPID3_I*FPID3_N*Sys_Ts*Sys_Ts/4)*x2;

    temp=temp+2*y1-(1-FPID3_N*Sys_Ts/2)*y2;
    temp=temp/(1+FPID3_N*Sys_Ts/2);

    temp= temp>FPID3_Max ? FPID3_Max:temp;
    temp= temp<FPID3_Min ? FPID3_Min:temp;

    y1=temp;
    y2=y1;
    x1=x0;
    x2=x1;

    return y1;
}

一型补偿器:

float Type_1_compensator_Control(float X)
{
    float Yn;

    V_loop.Xdata_1=V_loop.Xdata_0;
    V_loop.Xdata_0=X;

    Yn=V_Type_1_compensator_a1*V_loop.Xdata_0+V_Type_1_compensator_a2*V_loop.Xdata_1-V_Type_1_compensator_b2*V_loop.Ydata_1;
    Yn=Yn/V_Type_1_compensator_b1;

    if(Yn>PWM_Fs_Max) Yn=PWM_Fs_Max;
    else if(Yn<PWM_Fs_Min) Yn=PWM_Fs_Min;

    V_loop.Ydata_1=Yn;

    return Yn;
}

二型补偿器:

float Type_2_compensator_Control(float X)
{
    float Yn;

    V_loop.Xdata_2=V_loop.Xdata_1;
    V_loop.Xdata_1=V_loop.Xdata_0;
    V_loop.Xdata_0=X;

    Yn=V_Type_2_compensator_a1*V_loop.Xdata_0+V_Type_2_compensator_a2*V_loop.Xdata_1+V_Type_2_compensator_a3*V_loop.Xdata_2-V_Type_2_compensator_b2*V_loop.Ydata_1-V_Type_2_compensator_b3*V_loop.Ydata_2;
    Yn=Yn/V_Type_2_compensator_b1;

    if(Yn>PWM_Fs_Max) Yn=PWM_Fs_Max;
    else if(Yn<PWM_Fs_Min) Yn=PWM_Fs_Min;

    V_loop.Ydata_2=V_loop.Ydata_1;
    V_loop.Ydata_1=Yn;

    return Yn;
}

关键代码就这些,其实很简单,就是传递函数的编写。


直接展示实验结果:


1、电压控制在负载跳变情况下的影响分析

控制框图以及负载跳变扰动如上,那么有如下表达式:

Zol为系统开环输出阻抗,定义为下图:

因此有下式:

可以看到,对于电压型变换器,负载跳变时Co以及ESR影响较大,其响应时间与fc有关。

上面公式画图直观表现如下:


2、不同工况稳定性分析

不同工况Hfv不同,其零极点分布也不同,例如右图LLC电路其RHPZ随着功率上升频率降低,大大限制了补偿器设计,因此设计补偿器应该按照最坏工况下设计。

上图为Hfv零极点分布图,可以看到系统随着输出功率上升各个零极点都在变换。

这里利用奈奎斯特图进行稳定性分析:

450W和50W情况下,同样一个控制器,显然一个不稳定一个稳定。画出其理论响应图:

通过实验也可看到,一套控制程序左半部分还稳定,负载跳变完成后就振荡了(进行了输出限幅)。


3、暂态效果分析

直接上表格吧,直观点

补偿器类型

截止频率

离散周期

超调量

响应时间

幅值裕度

相位裕度

Type-1

100Hz

100us

3.064%

7.6ms

6.85dB

18.2°

Type-1

500Hz

100us

N/A

N/A

-7.01dB

-18.6°

Type-1

100Hz

50us

2.778%

7.6ms

7.01dB

18.6°

Type-2

100Hz

100us

0%

15.4ms

21.6dB

53°

Type-2

500Hz

100us

12.037%

10.08ms

3.54dB

7.38°

Type-2

100Hz

50us

0%

15.4ms

21.8dB

53.2°

通过以下理论波形图和实物实验都能双向验证。


结束,希望我的博客对你学习电源控制有帮助。

  • 19
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值