暗星归来注:本文非个人原创,所有知识来源于网络,在此要特别感谢杨帅大佬的视频、代码无私奉献和指点!
目录
第一章数控电源控制流程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域控制器传递函数为:
联系客服