打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
数字电源控制环路设计指导书
userphoto

2023.04.26 广东

关注

暗星归来注:本文非个人原创,所有知识来源于网络,在此要特别感谢杨帅大佬的视频、代码无私奉献和指点!

目录

第一章数控电源控制流程3

第二章数字控制环路知识4

第三章 数字控制电源环路设计5

3.1 在s域设计控制器5

3.2 在w域设计控制器5

3.3 直接在z域设计控制器5

第四章 数控电源环路设计实例7

4.1 在simulink中绘制功率级仿真模型7

4.2 提取ZOH、Hd传函9

4.3 获取采样电路的传函9

4.4 构建合并后的功率级传函Gp12

4.5 根据z域功率级传函设计z域中的控制器13

参考文献13

第一章 数控电源控制流程

如图1所示,为数字电源控制流程。

图1 数字电源控制流程

简单描述为:

① 在PWM计数器CTR等于某个值时PWM生成触发事件触发ADC转换

② ADC经过采样保持周期以后开始ADC转换

③ 经过ADC转换需要的周期以后,ADC转换完成

④ 进入ADC转换完成ADCEOC中断

⑤ 在ADCEOC_ISR中,运用控制算法计算下一周期PWM的比较值并装入PWM影子寄存器

⑥ 在PWM计数器CTR=0时,自动从影子寄存器更新新的比较值,如此往复。

  注意,根据奈奎斯特采样定理,ADC采样频率必须大于被采样信号的2倍,应用到系统中就是ADC采样频率必须大于系统带宽的2倍,在模拟控制中一般采样频率(开关频率)不低于系统带宽的10倍,在数字控制中,由于在Fs/2处相位会掉到-180°,因此数字控制中采样频率不应低于系统带宽的20倍。

  另外,由于ADC采样存在混叠效应,因此应在靠近ADC引脚上放置RC低通滤波器,其截止频率应设定为采样频率的一半,滤除高频杂波,降低混叠效应带来的影响。

第二章  数字控制环路知识

典型的数字控制模型如图2所示。

    图2 数字电源控制模型

其中:

Ts时ADC的采样频率对应的周期

从ADC采样到PWM更新的延时被描述为Hd(s) = e^(-s*Td)

零阶保持器ZOH的传递函数:ZOH(s) = (1 - e^-st)/s

LPF(s)为采样电路的低通滤波器传递函数

Gc(z)为离散控制z域的离散控制器传递函数

Gp(s)为功率级控制到输出的开环传递函数

K为采样的分压系数,即缩放系数

DSP中PWM模块每次写入PWM值都要在下个周期生效,PWM和ADC共同构成零阶保持器ZOH。由于ZOH的影响,会带来额外的相位裕量滞后,ADC采样时刻的选取会对相位有较大的影响,其在某个频率fx处造成的相位余量丢失计算公式为:

  式中,Fs是ADC的采样频率,Kd为采样点到CTR=0的时间与控制周期的比值,如向上计数模式下周期值=100,采样点=60,那么Kd=(100 – 60)/100 = 0.4。

例如:

  采样频率Fs = 100KHz,在频率fx=20KHz时

-在PWM CTR=0时开始采样,即Kd=1,那么在20KHz处相位丢失量=36°

-在PWM CTR=PRD/2处开始采样,即Kd=0.5,那么在20KHz处相位丢失量=18°

-在PWM CTR=2*PRD/3处开始采样,即Kd=1/3,那么在20KHz处相位丢失量=12°

   因此,应尽可能的在PWM周期的中后段触发ADC采样,可以轻松提升相位裕量。但需要注意,一定要在下一个周期开始之前将计算完成后的PWM值更新到影子寄存器中,否则就相当于Kd变得更大(此时Kd = (采样点到本周期的时间+下一个周期的时间)/(2 * PRD))。

第三章  数字控制电源环路设计

数字控制环路设计一般有3种方法,分别是:

① 根据开环传递函数在s域设计控制器,然后再离散到z域

② 直接在z域设计控制器

③ 将s域转换到虚拟的w域,在w域设计控制器,然后再变换到z域

下面将逐条介绍3中设计方法。

3.1 直接在s域设计

图3.1 s域设计控制器

  在s域设计完成控制器后,在控制器中加入采样频率通过适合的变换方式(典型的用双线性变换tustin)进行离散化,离散化以后再提取微分方程的系数,带入到控制算法程序中进行验证。这种设计方式比较符合模拟电源工程师的设计习惯,但由于没有考虑离散系统中存在的延迟和其他影响,会造成参数不够精确,往往需要多次重复设计优化参数才能达到目标。3.1表示了这种设计方式的依据。

3.2 在w域设计控制器

由于此种方式资料不多,暂不做介绍。

3.3 直接在z域设计控制器

  直接在z域设计控制器的思想,是将功率级开环传递函数、低通滤波器、零阶保持器、采样分析系数等合并到功率级传函中,然后将合并后的传函进行离散化到z域进行设计控制器。图3.3.1所示为s域的传函合并起来再离散化的模型。

图3.3.1 s域传函进行合并

式3.3展示了这种设计思想的理论设计依据。

  依据图3.3.1和式3.3,绘制出直接在z域设计控制器的模型,如图3.3.2所示。

图3.3.3 z域设计控制器模型

总体来说,直接在z域设计控制器的步骤如下:

① 根据功率级开环传函Gol(s)、采样电路传函Glpf(s)、零阶保持器传函ZOH(s)及采样频率Ts的影响,合并成功率级传函Gp(s)

② 将合并后的功率级传函通过双线性变换离散到z域Gp(z)

③ 依据闭环性能要求,在z域设计设计控制器

④ 提取微分方程系数,带入到软件控制器算法中进行验证、优化

这种设计方式,由于考虑到离散系统中特有的采样频率、采样延时、零阶保持器等因素,因此设计出来的控制器参数较为准确。

第四章  数控电源环路设计实例

  结合3.1到3.3节所属内容,直接在z域设计控制器更加符合实际参数,因此这里以直接在z域设计控制器为例进行讲解。这里我们以实际项目30A反激电源为例,该项目是双向反激拓扑,开关频率为180KHz,并由3相组成,每相相差120°,由于每相结构设计都一样,因此只取其中一相进行分析即可。

4.1 在simulink中绘制功率级仿真模型

  首先,依据原理图设计文件,在simulink中绘制仿真模型,完成后的模型如图4.1.1所示。

图4.1.1 功率级仿真模型

  将模型中的元件参数正确设置后,利用matlab中的脚本语言对该模型通过扫频法拟合出传递函数,其Matlab脚本语言如下:

%清除数据

clear all;

clc

% 开启多核仿真加快simulink仿真速度,括号里面是CPU的核心数目

parpool(6)

% 找到simulink仿真文件名

model = 'SinglePhase_Flyback_R2018a';

% 打开仿真文件

open_system(model);

% 找到添加扰动点和被控对象

ios = [...

    linio([model,'/Duty1'],1,'input'); ...

    linio([model,'/ILOAD'],1,'output')];

% 确定扫频范围

f = logspace(log10(10),log10(100000),50);%100Hz开始到100KHz,50个点

% 确定扫频值、扰动幅度、频率的单位

in = frest.Sinestream('Frequency',f,'Amplitude',1.5,...

    'FreqUnits','Hz');

% 获取仿真需要的时间

getSimulationTime(in)/0.02

% 开始频率响应仿真分析

[sysData,simlog] = frestimate(model,ios,in);

% 创建一个结构体

bopt               = bodeoptions;

% 打开栅格

bopt.Grid          = 'on';

% 打开相位匹配

bopt.PhaseMatching = 'on';

% 频率单位为Hz

bopt.FreqUnits     = 'Hz';

% 绘制伯德图

figure, bode(sysData,'*r',bopt)

% 创建一个结构体

bopt               = bodeoptions;

% 打开栅格

bopt.Grid          = 'on';

% 打开相位匹配

bopt.PhaseMatching = 'on';

% 频率单位为Hz

bopt.FreqUnits     = 'Hz';

% 以下为拟合传递函数

% 根据扫频得到的频率响应数据拟合传递函数

Gp_s = tfest(sysData,3,3) %这里假定有3个极点3个零点

% 绘制拟合的传递函数伯德图

figure, bode(sysData,'r*',Gp_s,bopt)

% 注意,命令行窗口显示的拟合匹配度在80%以上比较可靠可信

% 拟合出来的传递函数在命令行窗口中

  根据上述.m脚本文件,点击运行后matlab会自动根据设置的扫频范围、步长、扰动幅值进行频率响应扫描,并自动绘制出伯德图,然后调用tfest()工具去拟合出符合伯德图的s域传递函数,如果拟合后匹配度在90%以上,说明拟合的结果比较好,可以用来下一步使用,如果拟合的不好,可以修改拟合的极点、零点数目重新拟合直到拟合匹配度满意为止。由于扫频需要花较长的时间,此处不再赘述,图4.1.2所示为最终扫描后拟合的结果。

图4.1.2 扫频法拟合结果

  从图中可以看到,使用3零点3极点进行拟合匹配度达到了95.59%,说明拟合出的传递函数比较接近实际,可以用来设计控制器。同时,根据图4.1.2,拟合后的功率级开环传递函数如式4.1.1所示。

4.2 提取ZOH、Hd传函

ZOH的传递函数如式4.2.1所示,该公式为网络获取所得:

根据ZOH的传递函数,在matlab中构建,脚本语言如下所示:

Gzoh = tf(1, [Ts/2 1]);

Hd的传递函数如式4.2.2所示,该公式为网络获取所得。

Hd(s) = e^-sTd

式中,Td为控制周期,对于本项目Td=1/Fs=1/180000=5.55us

4.3 获取采样电路的传函

  本例中,由于被控量是低压侧的电流,采样电路较为复杂,手工推导计算过于麻烦,因此,这里我们采用仿真软件进行搭建采样电路,然后同样适用扫频法得到频率响应数据,再根据频率响应数据用matlab去拟合传递函数。对于只有电阻电容的采样电路,可以直接适用simulink进行获取传递函数,由于此项目中采样电路使用到了运放,无法在simulink中搭建(使用物理模型可以搭建,但无法做扫频),因此这里使用仿真软件PLECS根据原理图设计文件搭建电路,PLECS中搭建完成的电路如图4.3.1所示。

图4.3.1 PLECS搭建采样电路

  搭建完成后,在PLECS中进行扫频分析,扫频后绘制的伯德图如图4.3.2所示。

  将PLECS仿真得到的频率响应数据导出为csv格式的文件,将csv文件转换为xls文件。使用TI官方提供的一个脚本文件,导入刚刚得到的xls文件进行拟合从而得到采样电路的传递函数,其脚本文件可见下图所示:

%Read the FRA Plant data from the excel sheet%

Freq=xlsread('FRAData.xlsx','Sheet1','A2:A102');

Phase_H=xlsread('FRAData.xlsx','Sheet1','C2:C102');

Mag_H=xlsread('FRAData.xlsx','Sheet1','B2:B102');

%Convert the FRA data to a bode object in MATLAB%

Mag_H=(10.^(Mag_H./20));

Phase_H=pi.*Phase_H./180;

Plant_Bode_Obj=frd(Mag_H.*exp(i*(Phase_H)),Freq,'FrequencyUnit','Hz');

%Curve fit the data to get a transfer function%

% user may choose to fit 3p3z or any other depending on what works best%

[Hn,Hd] = invfreqs(Mag_H.*exp(i*(Phase_H)),(2*pi).*Freq,2,3); %using 2z3P

H = tf(Hn,Hd);

% plot both the measured and curve fitted TF to compare accuracy

figure(1);bode(H,Plant_Bode_Obj);title('Control-to-Output Measured Vs Curve Fitted');

legend('Curve Fitted','Measured')

%call sisotool to design the compensation with the transfer function%

sisotool(H)

  根据上面的.m脚本文件,得到采样电路的低通滤波器的传递函数,拟合出来的效果图如图4.3.3所示。

图4.3.3 matlab拟合PLECS仿真的伯德图数据

  可以看到,使用2Z3P拟合匹配度还是挺高的(这个脚本语言不显示拟合的匹配度,差评),拟合完成后,由于脚本语言最后调用了sisotool工具,matlab自动打开了单输入单输出工具,在单输入单输出工具界面,点解左侧栏中的G即可看到拟合得到的传递函数,如图4.3.4所示。

图4.3.4 matlab拟合完成后sisotool界面

也可以直接在matlab命令行窗口输入Disp(H)进行查看拟合得到的传递函数,如图4.3.5所示。

4.4 构建合并后的功率级传函Gp

  根据3.3 直接在z域设计控制器小节中所述,通过乘法将Gol(s)、ZOH(s)、Hd(s)、LPF(s)合并为功率级的传递函数Gp(s),合并时需要注意要插入采样频率周期Ts,在matlab中的实现方式如下所示:

% 插入采样频率周期后进行合并功率级传函

Gp_s = Gzoh_s * Hd_s * Glpf_s * tf(Gol_s,'inputdelay',Ts);

然后,通过双线性变换将s域的功率级传函变换到z域,在matlab中的实现方式如下所示:

Gp_z = c2d(Gp_s, Ts, 'zoh');

如此便得到了z域中功率级的传递函数。

4.5 根据z域功率级传函设计z域中的控制器

将得到的z域功率级传函导入单输入单输出工具箱,即可很方便的设计控制器,在matlab中的实现方式如下:

%Call control tool

controlSystemDesigner(Gp_z);

    打开后的单输入单输出工具界面后,左侧侧边栏的G即为z域功率级传函,C为设计的控制器,设计完成后即可提取控制器C的差分方程系数带入到算法中进行验证。

例如,最后设计完成后的z域控制器传递函数为:

参考文献

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【干货】Σ-Δ转换用于电机控制
基于中颖SH79F081的电动自行车控制器设计
过采样技术
PWM逆变器是什么?
ADC
使用PID控制器控制线性伺服电机
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服