多图预警,非战斗人员迅速撤离!
写在前面
教程是根据Mathworks公司的有源功率因数校正教程(点这里跳转)和那日沙等老师编著的《电力电子、电机控制系统的建模及仿真》等改写的,设计思路基本与之一致,嫌看文章麻烦的同学可以直接跳转看视频和查阅相关书籍。Simulink仿真部分对视频内容展示的仿真电路做了一点简化,Saber仿真部分完全参考教材。在这篇教程中,我会详细撰写仿真电路的设计过程,包括仿真中控制器的各个参数如何获得。通过这系列教程,希望你能了解:
(1)PFC电路的基本工作原理;
(2)PFC电路的构成和参数设计;
(3)使用Simulink中的Control Design工具箱对系统做频率响应估计;
(4)控制器参数整定的大致思路;
(5)使用MATLAB的PID Tuner工具整定PID控制器参数。
希望这篇文章能帮助到你。如有不足之处虚心接受批评和建议,另希望转载的同学注明下出处,谢谢!
特别地,教程内容完全开源,不会用于商业用途。也请不要将教程中的内容用作商业用途。
目录
第二章 仿真模型搭建与控制参数整定
2.1 Simulink开环仿真模型搭建与测试
2.2Simulink电流闭环仿真模型搭建与测试
2.3Simulink电压闭环仿真模型搭建与测试
2.4 基于UC3854的Boost PFC电路在Saber中的仿真
2.5 关于仿真文件和一些小问题
第二章 仿真模型搭建与控制参数整定
仿真的运行环境为Matlab Ra(SImulink 8.7),建议不要使用过旧的版本,可能会与教程的操作步骤差距较大。
2.1 Simulink开环仿真模型搭建与测试
接下来,使用Simulink搭建仿真模型。首先,搭建开环的仿真模型,如图2-1所示。
模型采用Physics signal库中的元件搭建,部分元件来源如下:
图2-1中封装的子系统均为测量模块。
其中部分元件的选取位置:
注意Physics Signal和Simulink Signal并不兼容,需要PS-S和S-PS转换模块建立联系。
搭建好后修改电感和电容参数:
MOSFET驱动模块:思路是三角波与占空比数值比较;Rate Transation模块用于仿真时速率转换,请先设置转换速率为Tsc,这将在后面用于破解代数环;MOSFET模块驱动接受的是double型变量,需要对bool型变量输出的比较模块加入数据转换;比例K用于抬升数值到MOSFET的导通电压。在下方还有阶跃模块,在0.01s时产生由0到1的阶跃信号,是为了在0.01s前让PWM控制器先不起作用,让电路具有一定的初始状态(电路缓冲)再让MOSFET工作。
在Mathworks提供的教程中(点击跳转),驱动部分是用一个带触发还原的积分模块实现三角波生成,其原理思路与之相同。
对求解器信息作如下配置,交流源旁边的Solver模块:
以及仿真参数配置,采用定步长的离散算法,设置步长为Ts:
在图2-1中,我们先将120V交流源注释掉(右键交流源模块,点击Comment out),然后测试下直流开环状态的输出情况。提前运行第一章中编写的m文件(在同系列第一章文章的最后),然后运行仿真。
考虑有的同学不看第一章,这里再粘贴下m文件的代码。
%% Power Factor Correction (PFC) Continuous Conduction Mode Boost Converter%% Copyright The MathWorks, Inc.clc;clear all;%% 设计指标参数Line_Voltage_Peak = 120*sqrt(2); % 交流输入电压峰值 [V]f_line = 60; % 输入电源频率 [Hz]Voref= 400;% 输出电压给定参考值 [V]Power= 1e3;% 最大稳态输出功率 [W]R = 200;% 电阻负载阻值 [Ohms]del_V= 10; % 输出电压纹波峰峰值 [V]IndCurrRipple = 8; % 电感电流纹波比例 [%]Conv_efficiency= 92; % Boost变换器额定效率 [%]f_sw= 50e3;% 开关频率 [Hz] Ts = 1/(100*f_sw); % 电路采样时间 [sec]Tsc = 1/(50*f_sw); % 控制器采样时间 [sec]t_holdup = 16.6e-3; % 输出保持电压(340V)的保持时间 [sec]%% 变换器参数Duty = (Voref-Line_Voltage_Peak)/Voref; % 占空比计算I_in_peakmax = 2*(Power/(Conv_efficiency*0.01))/Line_Voltage_Peak;% 输入电流峰值%% 电感参数计算del_I = (IndCurrRipple/100)*I_in_peakmax; % 电感电流纹波L = (Line_Voltage_Peak*Duty)/(f_sw*del_I);% 电感值%% 电容参数计算C = max((2*Power*t_holdup)/((Voref)^2-340^2),Power/(2*pi*f_line*del_V*Voref));% 电容值
初次运行会遇到这样的报错:
看最后一条红色标记的,是阻止仿真运行的报错。报错提示我们模块与电路的仿真速率不同,需要在Simulink信号侧插入速率转换模块。点击报错前蓝色字体的模块链接跳转到模块处。
速率不匹配是我们在手动离散化仿真中经常遇到的报错,需要我们根据报错,在提示的地方适当插入速率转换模块,或者修改部分模块的采样速率使得仿真正确运行。
这里物理系统的仿真步长是Ts,而MOSFET Driver中三角波后面的速率模块输步长为Tsc(同样如下图设置),即控制系统仿真步长为Tsc,因而在PWM波输出处增加一速率转换模块,转换为Ts。
再次运行仿真,若参数设置正确,占空比为0.72时,输出电压约为430V左右。观察到系统还有小幅度振荡,我们取0.4s时作为开环系统的稳态时间。
2.2Simulink电流闭环仿真模型搭建与测试
我们在2.1节模型的基础上,继续搭建闭环系统。第一章的基础知识中介绍了PFC的基本框图,这是一个包含电流环和电压环的双闭环系统。对于这样的双闭环系统,我们一般先调试内环,再调试外环。
在这一系统中,内环是电流环。控制回路是由MOSFET的控制端变量(占空比)到电感电流(),通过控制占空比使得电感电流跟踪参考给定值。整定控制器的流程一般是:获得系统的传递函数,根据传递函数绘制频率响应曲线,选择合适的补偿器校正系统,调试补偿器参数直至满足闭环系统的性能要求。这里我们不讨论“盲调”方法整定控制器参数,因此需要获得从占空比到电感电流的系统频率响应,方法至少是以下两种:数学建模法:利用小信号平均模型等手动计算求解传递函数;还有就是频率响应估计(又称“扫频法”):通过对输入端在稳态工作点处施加一定的扰动测量输出端输出来估计系统频率响应。这篇教程介绍第二种方法获得系统特性,第一种方法有兴趣的同学可以检索相关论文。
接下来,我们设计电流环的控制回路,并整定回路控制器参数。首先需要获取占空比到电感电流的系统频率响应,我们利用Simulink的Control Design工具箱来对系统做频率响应估计。
首先,我们需要设置扰动输入点和输出测量点。扰动输入点在占空比输入处,输出测量点在电感电流的测量模块输出处。设置方法是右键信号的Simulink连线,选择Linear Analysis Points→Input Perturbation/Output Measurement。
注意电路的电源输入还是120V直流电源,我们需要测试占空比到电感电流的系统特性,其他输入源一定是恒值,不可以有扰动。设置好测试点后,我们启动线性分析工具,在菜单栏选择Analysis→Control Design→Frequency Response Estimation…,进入线性化分析工具界面:
进入线性化分析工具界面,我们需要设置稳态工作点和扰动信号。首先是稳态工作点:在上一节的仿真结果中,我们认为电路在0.4s达到稳态,我们把稳态工作点设置在0.4s处,设置方法是在Operating Point处下拉选择Take Simulation Snapshot,在Simulation snapshot times处输入0.4,然后点击Take Snapshots,获得0.4s处的系统快照。
需要稍等一会,等系统仿真运行完成会获得如下结果:
接下来设置输入扰动信号:在Input signal处下拉选择Fixed Sample Time Sinestream... (因为我们在系统中采用的是定步长离散算法)。
设置步长,需要与仿真步长完全一致,即m文件中的Ts变量,为2e-7。
进入正弦信号设置窗口,按照下图顺序,先改变显示单位为赫兹Hz,再添加信号的频率范围,输入10-15000Hz,其余设置采用默认值。
如果弹出警告信息直接关闭即可。在窗口上拖拽选中所有频率点,我们来设置频率点的幅值:
选中后效果如下,修改Amplitude为0.036,点击确定
回到线性分析工具界面,变化如下:
解释一下扰动信号的两个关键参数:频率范围和幅值。扰动信号是一段余弦扫频信号,称为啁啾信号,信号的频率范围和幅值是其参数。频率范围的选取与我们的系统带宽有关:频率范围一定要大于系统带宽2-3倍。而系统带宽的选取大致有这样一个经验规律:内环带宽=(1/10~1/5)开关频率,外环带宽=(1/10~1/5)内环带宽。从内到外越来越慢。我们设置的电路开关频率在50kHz,因此电流环的带宽在5kHz左右,我们的扫频范围在10Hz~15kHz,来观察系统特性。而幅值的选取要既能使系统有一定的响应,又不能使系统偏离正常的稳态工作点,扰动信号的幅值选取一般是稳态工作点的5%~10%。稳态工作点处的占空比为0.72,这里取幅值为0.72*5%=0.036。
系统带宽是整定控制器时的一个重要参数,后面还会继续讨论。
接下来我们开始运行频率响应估计,运行ESTIMATE→Bode,获取系统估计的Bode图。注意系统频率响应估计会占用计算机大量的运算能力和时间,需要耐心的等待,在仿真运行时可以先干会儿别的。(我的测试机型CPU为i5-3317U,大致需要4-5小时才能运行完成。)
运行完成后我们会获得频率响应估计的Bode图:
我们将Linear Analysis Workspace中估计生成的结果estsys1拖入MATLAB Workspace,用于接下来设计控制器参数。
接下来启动PID Tuner工具,我们来设计补偿器参数。在MATLAB命令行窗口输入:
pidTuner
下拉Plant菜单,导入估计得到的系统estsys1.
导入完成后,我们修改补偿器类型:这里选用PI控制器就足够稳定控制系统了;选择分析域为频域;然后导入开环系统的Bode图:
关掉不需要的阶跃图。我们选择带宽为5000Hz,注意这里频域的单位是rad/s,我们需要换算下,,我们也可以稍微取大一点,取32400rad/s。然后相位裕度取60°。
观察Bode图,可以看到系统基本满足整定要求。
注意带宽是一个很重要的参数,带宽是幅频曲线与0dB的交截处的频率点,带宽过低可能会使得低频增益过低,不能很好地实现稳态的准确追踪;带宽过高可能会引入高频噪声。相位裕度是相频曲线在穿越频率点处与-180°直线之间的距离,要留有最少45°,相位裕度过低系统状态变化时可能会有严重的振荡。上图中不能体现幅值裕度,幅值裕度是相频曲线与-180°直线交截处频率点,幅频曲线与0dB之间的距离。经验上,一般相位裕度留有60°(最少也要45°),幅频裕度留有15dB,由于频率响应本身是估计的,准确度不高,裕度不够可能在稍有偏差的情况下系统就会变得不稳定。
我们还可以直接利用工具读取裕度数值,点击Show Parameters即可。
整定完成后,我们在右下方读取PI补偿器的参数值。
在Mathworks提供的教程中(点击跳转),是利用PI控制器中Tune工具调整的,因为软件问题我所配置的环境不能正确导入估计的频率响应,这里教程采用了不同的方法,思路是一致的。
接下来我们搭建电流环闭环系统。将原先0.72固定占空比输入改为下图所示
开环稳态时iL值约为7.266A,输入电压有效值120V,将输入量单位化,求得差值之后经PI调节器得到占空比。其中PI控制器设计如图,为带限幅的离散PI控制器,其中增益模块按照上方控制器的整定参数设置;输出限幅为上限0.99,下限0.01。
我们先将MOSFET驱动中的序列模块输出转换速率修改步长为Ts,由于接入的iL,Vs1信号为物理电路的仿真步长为Ts,避免仿真速率不匹配报错。
尝试运行下仿真,还是报了错。
这里系统遇到了代数环,上方给出了环路提示,大概是这样:
物理系统都是由求解器负责输入输出,因而与控制回路构成了代数环。代数环在系统初始状态设置不当时很容易遇到求解不收敛的情况。打破代数环的方法可以添加单位延时和Memory模块等方法,这里按照Mathworks提供的教程中(点击跳转)给出的方案这么处理:我们对物理回路和控制回路设计两个不同的求解步长,在控制器的采样输入端加入单位延时环节和速率转换器来打破代数环。下图是修改后的模型和仿真步长分布,注意相同颜色区域内的所有模块仿真步长要统一,否则运行仿真会提示报错。(记得修改MOSFET驱动里三角波模块后转换速率为Tsc)
全部设置好后,再挂接一个示波器观察电感电流波形,运行仿真。
可以看到,电感电流经过初始状态的短暂冲击之后,很快就跟随跟定稳定下来;输出电压在0.45s左右进入稳态,我们认为电路的稳态时间在0.5s。电流闭环设计完成。
2.3Simulink电压闭环仿真模型搭建与测试
我们还需要稳定输出电压达到技术指标的电压要求。接下来我们设计电压环,完成双闭环设计。同样地,我们需要获取系统频率响应,选择补偿器类型并整定补偿器参数。
在电压环,我们需要获取从电压控制器控制端(暂且称为)到输出电压的系统频率响应。同样地,也可以绘制系统框图来求解系统的传递函数,这里依然使用Control Design工具箱估计频率响应。
根据上面的框图,修改下控制部分模块。我们认为,稳态时的控制指令为单位1。按照上一节的方法,设置扰动输入点和输出测量点。扰动输入点在电压控制器控制端,输出测量点在输出电压的测量模块输出处。
设置好后依然按照上一节的方法,启动线性分析工具,设置稳态工作点和扰动信号。启动线性分析工具后,在设置稳态工作点时注意,在上一节的电流环仿真测试中,我们认为0.5s是系统的稳态时间,因此在设置稳态工作点时设置快照时间为0.5s,获取下系统快照。
快照仿真结束后,设置扰动信号。同样,步长与系统仿真步长一致;修改频率单位为赫兹Hz,但扫频的频率范围应修改为10Hz~5000Hz(带宽一定比电流环带宽低),扰动信号幅值应修改为1*10%=0.1(我们设计稳态时指令为1)。
都设置好后 ,会出现下图的状态,运行频率响应估计,点击下图的Bode,注意不要点错。运行过程需要很长时间,慢慢等候。
运行完成后出现下图界面,同样地,将估计好的频率响应estsys2从Linear Analysis Workspace中拖入MATLAB Workspace,准备用于系统校正。
启动PID Tuner工具,下拉Plant菜单,导入估计得到的系统estsys2.修改补偿器类型为PI控制器,选择分析域为频域,然后导入开环系统的Bode图。我们选择带宽为55Hz,换算到单位为rad/s,,取345rad/s。然后相位裕度取60°。观察下裕度指标是否合适。
得到控制器参数后,搭建电压闭环控制模块。
同样,我们需要对输出电压单位化处理;电压参考给定设置为一个阶跃信号,来验证下系统的动态性能。阶跃信号设置为:阶跃时间1.5s,初始值1,终值1.3。PI控制器仍为带输出限幅的离散PI控制器,限幅值为下限-20,上限20,结构与电流环PI控制器完全一致。
在Mathworks提供的教程中(点击跳转),对输入电压的采样处理更为复杂。官方教程对输入电压锁相后得到相位,再经过三角函数运算和取绝对值运算得到输入电压的控制指令。这样做的目的是为了适应宽范围电压输入。而当前教程提供的方式只能运行在120V有效值的交流电源情况。
我们再来添加一些标签,便于后续观察输出。
设置下示波器。
仿真全局步长分布,注意相同颜色区域内的所有模块仿真步长要统一,否则运行仿真会提示报错。
设置完成后,将仿真时间调整为2.5s,运行仿真。从示波器的下面两幅图可以看出电压电流能够实现对给定参考值的跟踪。
我们将直流输入源改为交流输入源,看看电路能否实现功率因数校正。同时,设置示波器输出到工作区,便于后续的FFT分析。
运行仿真,可以看到输入电流波形正弦度很高,且与电压同相位。
使用Simulink中的powergui模块,双击打开,找到FFT工具,运行分析。
可以看到THD已经到了比较低的水平,控制器实现了功率因数校正。(注意FFT工具可能会运行失败/报错,关掉在重新运行下就可以了。)
2.4 基于UC3854的Boost PFC电路在Saber中的仿真
在实际的PFC电路中,我们常用IC控制电路,通过设计好IC的外围元件接入电路实现PFC。代表性的实现Boost PFC in CCM的IC有UC3854、L4981等,这里我们简单了解下UC3854在Saber中的仿真。
由于到这里篇幅已经非常长了,我们不再把Saber软件使用的具体过程详细介绍,只给出仿真界面截图,具体请参考那日沙等老师编著的《电力电子、电机控制系统的建模及仿真》,这是一本非常好的Saber软件入门教材。
关于UC3854电路外围元件的具体设计过程这里也不再给出,请参考TI的官方文档,给出了非常详细的设计过程。
UC3854数据手册(我是按照这上面的框图修改的):/cn/lit/ds/symlink/uc3854.pdf?ts=1612070162392&ref_url=https%253A%252F%%252Fproduct%252Fcn%252FUC3854
UC3854应用手册(上面给出了外围电路原件参数的详细整定过程):/cn/lit/an/slua144/slua144.pdf?ts=1612070154839&ref_url=https%253A%252F%%252Fproduct%252Fcn%252FUC3854
其他关于UC3854的支持信息请参阅:/product/cn/UC3854
这里我的Saber软件版本为,仿真图如下。
请注意,这个仿真图与《电力电子、电机控制系统的建模及仿真》所给示例元器件数值一致,但在器件连接上有所出入,个人认为教材提供的仿真图有误。我按照TI的官方文档作了修改,请注意交叉导线是否有节点连接。另外,我去掉了电源处的采样电阻,因为这个电阻会导致仿真不能收敛,在后续测量中可通过输入电源的节点测量获取输入电流。
仿真结果如下。
这个效果没有Simulink中的看起来那么好,与教材提供的仿真效果也有不小的差距。在这里我偷了懒,没有具体设计元器件参数,有兴趣的伙计们可以试一试。Saber软件与实际较为接近,但对元器件参数设计要求非常高,稍有不慎仿真就会出现问题,得不到结果,在参数调试时需要有些耐心。
2.5 关于仿真文件和一些小问题
仿真文件我在CSDN论坛中以0积分的形式提供,给出链接:/download/guo201k/14976097
两个小问题:
Q1:在电压环的带宽设计中,我们按照Mathworks提供的官方教程取了55Hz,这是电流环带宽的几乎0.01倍,这与之前提到的经验参数取值有些不符?
实际有兴趣的伙计可以试一下电压环带宽设计到500Hz会是什么样的情况。这里我贴一下我的仿真结果。
可以看到,虽然系统稳定,但是在进入稳态前系统会有很大的振荡。经过比对,带宽更高时确实能更快地准确贴近给定,但优势极其微弱(因为没快多少),而较大的振荡对电路元器件造成的冲击也是我们要权衡的地方。因此,教程中给出的经验取值只能作为参考,在设计中不要死板的照搬。这些参数都不是绝对的,需要根据仿真的结果权衡参数的调整方向。
Q2:为什么不用常用的Power System Blockset(PSB)模块搭建而用Physics Signal物理模块搭建?
其实我用PSB模块搭建过,按道理来说过程是几乎一致的。但不知道是不是系统元件过于理想化,在开环仿真的时候就有幅度不小的振铃;在整定完电流环设计电压环时,估计出来的频率响应用普通的PI控制器不能使得系统稳定。另外,我尝试把ESR也补充进去,没有起到什么效果。可能是这个过程我有什么地方操作失误了,以后有时间再调整试试,欢迎有兴趣的伙计补充下。
还有什么问题欢迎在留言区一起探讨。初次写这样的技术类文章,尤其控制理论等知识基础还比较薄弱,文章中肯定有不少错误,欢迎指出。
单相Boost功率因数校正电路(PFC)设计与仿真(Simulink Saber):第二章 仿真模型搭建与控制参数整定