为升压转换器设计自抗扰控制
此示例说明如何为在 Simulink® 中使用 Simscape™ Electrical™ 组件建模的直流-直流升压转换器设计自抗扰控制 (ADRC)。在此示例中,您还将 ADRC 控制性能与在线性化被控对象模型上调节的 PID 控制器性能进行比较。
通常,您使用 PID 控制器控制电力电子系统,这些控制器的增益是使用具有线性化被控对象模型的 PID 调节工具调节的。您可以通过以下方式为线性化被控对象模型设计 PID 控制器。
估计一定频率范围内的被控对象频率响应。有关示例,请参阅Design Controller for Boost Converter Model Using Frequency Response Data。
使用 System Identification Toolbox™ 软件估计被控对象线性模型的参数。有关示例,请参阅Design Controller for Power Electronics Model Using Simulated I/O Data。
尽管您可以在较宽的工作范围内调节 PID 控制器,但设计试验和调节 PID 增益需要大量的工作。使用 ADRC,您可以获得非线性控制器,并以更简单的设置和更少的调节工作实现更好的性能。
升压转换器模型
此示例使用 DC-DC 升压转换器模型,通过对源电压进行控制斩波或开关操作,将一种 DC 电压转换为另一种通常更高的 DC 电压。
mdl = 'scdBoostConverterADRC';
open_system(mdl)
此模型包含一个控制器可变子系统,该可变子系统具有两个选择项:ADRC 控制器和 PID 控制器。ADRC Controller
子系统设置为默认活动变体。该模型还包括一个手动开关,用于在开环和闭环配置中操作该模型。默认情况下,它设置为开环配置。
该模型使用由脉冲宽度调制 (PWM) 信号驱动的 MOSFET 进行开关操作。该控制器根据参考值和输出电压信号调节 PWM 占空比 。占空比将输出电压 调节到参考值 。
Simscape Electrical 软件具有适用于多种电力电子系统的预定义模块。此模型包含一个可变子系统,该可变子系统具有两个版本的升压转换器模型:
Boost Converter Circuit
子系统使用电力组件构造。电路组件的参数基于 [1]。Boost Converter Block
子系统使用 Boost Converter 模块构造,并配置为具有与升压转换器电路相同的参数。有关此模块的详细信息,请参阅 Boost Converter (Simscape Electrical)。默认情况下,该模型使用此子系统。
设计 ADRC 控制器
ADRC 是功能强大的工具,适用于具有未知动态特性以及内外部扰动的被控对象的控制器设计。该模块将未知动态特性和扰动建模为被控对象的扩张状态,并使用观测器对其进行估计。通过该模块,您仅使用控制算法的几个关键调节参数即可设计控制器:
模型阶数类型(一阶或二阶)
模型响应的临界增益
控制器和观测器带宽
此外,您还要指定时域参数以匹配被控对象模型的时域。在此示例中,该参数设置为离散时间,采样时间为 5e-6
秒。以下各节描述如何找到在此模型的 ADRC 模块参数中指定的其余调节参数。
模型阶数和临界增益
要确定模型阶数,请在开环配置中对被控对象模型进行仿真。使用 0.5 的阶跃输入作为占空比来驱动被控对象模型。
set_param(mdl,'SignalLoggingName','openLoopSim'); sim(mdl); figure; Ref = getElement(openLoopSim,'Ref'); Vout = getElement(openLoopSim,'Output Voltage'); plot(Ref.Values.Time,Ref.Values.Data... ,Vout.Values.Time,Vout.Values.Data) grid on xlabel('Time (s)') ylabel('Output Voltage (V)') legend('Ref','Output')
要确定临界增益值 b0
,您可以在阶跃参考输入后 0.0005 秒的短时间间隔内检查输出电压响应。
x = Vout.Values.Time(1:20091); y = Vout.Values.Data(1:20091); figure plot(x,y) xlabel('Time (s)') ylabel('Output Voltage (V)') grid on
由于此曲线包含开关的影响,因此使用 polyfit
可更好地逼近此时间范围内的输出电压。
[p,~,mu] = polyfit(x,y,3); f = polyval(p,x,[],mu); figure; plot(x,y,x,f) grid on xlabel('Time (s)') ylabel('Output Voltage (V)') legend('Data','Polyfit','Location','best')
f(end)
ans = 7.9240
输出电压显示出二阶动态系统的典型形状。因此,为模型类型参数选择二阶。根据输出电压波形,您可以通过二阶响应逼近 来确定临界增益。
在 0.0005 秒的持续时间内,输出电压变化了约 7.8594V。
控制器带宽和观测器带宽
控制器带宽通常取决于频域或时域的性能设定。在此示例中,控制器带宽 为 2500 弧度/秒。观测器需要比控制器收敛得更快。通常,观测器带宽设置为 的 5 到 10 倍。在此示例中,。
将手动开关切换到在闭环配置中操作模型。
set_param('scdBoostConverterADRC/Manual Switch','sw','0')
仿真模型。
set_param(mdl,'SignalLoggingName','adrcSim'); sim(mdl); Vref = getElement(adrcSim,'Vref'); Vout_adrc = getElement(adrcSim,'Output Voltage'); figure; plot(Vref.Values.Time,Vref.Values.Data... ,Vout_adrc.Values.Time,Vout_adrc.Values.Data) grid on xlim([0 0.03]) xlabel('Time (s)') ylabel('Output Voltage (V)') legend('Vref','Output')
ADRC 和 PID 控制器的性能比较
您可以使用具有线路扰动和负载扰动的仿真来检查经过调节的控制器的性能。该模型使用以下扰动。
t = 0.075 秒时的线路扰动,这会将输入电压从 5 V 增加到 10 V。
t = 0.09 秒时的负载扰动,这会将负载电阻从 3 欧姆增加到 6 欧姆。
您可以比较使用 ADRC 控制器和 PID 控制器控制的升压转换器的输出电压。PID 控制器是在相同工作点 = 18 V 下,基于使用频率响应估计获得的线性被控对象模型进行调节的。
使用 PID Controller
子系统对模型进行仿真。
set_param([mdl,'/Controller'],'LabelModeActiveChoice','PID') set_param(mdl,'SignalLoggingName','pidSim'); sim(mdl); Vout_pid = getElement(pidSim,'Output Voltage');
比较两个控制器的性能。
figure; plot(Vout_adrc.Values.Time,Vout_adrc.Values.Data... ,Vout_pid.Values.Time,Vout_pid.Values.Data) grid on xlabel('Time (s)') ylabel('Output Voltage (V)') legend('Vout (ADRC)','Vout (PID)')
相比 PID 控制器,ADRC 控制器将初始瞬态驱动到稳态的速度要快得多。您可以进一步放大以仔细查看两个控制器在扰动下的表现。
figure; plot(Vout_adrc.Values.Time,Vout_adrc.Values.Data... ,Vout_pid.Values.Time,Vout_pid.Values.Data) grid on xlim([0.06 0.1]) xlabel('Time (s)') ylabel('Output Voltage (V)') legend('Vout (ADRC)','Vout (PID)')
如果使用的是 ADRC 控制器,在每次扰动后,输出电压会更快地收敛到标称的 18 V。通过简单的调节过程,ADRC 控制器在标称工作点的性能优于经过调节的 PID 控制器。
此外,ADRC 控制器适用于各种工作点。因此,不需要像 PID 控制器那样进行重新调节。例如,您可以将控制器的性能与 12 V 的参考电压进行比较。
将 设置为 12 V 并仿真模型。
set_param([mdl,'/Vref'],'Value','12') set_param(mdl,'SignalLoggingName','pidSim2'); sim(mdl); Vout_pid2 = getElement(pidSim2,'Output Voltage'); set_param(mdl,'SignalLoggingName','adrcSim2'); set_param([mdl,'/Controller'],'LabelModeActiveChoice','ADRC') sim(mdl); Vout_adrc2 = getElement(adrcSim2,'Output Voltage');
比较性能。
figure; plot(Vout_adrc2.Values.Time,Vout_adrc2.Values.Data... ,Vout_pid2.Values.Time,Vout_pid2.Values.Data) grid on xlabel('Time (s)') ylabel('Output Voltage (V)') legend('Vout (ADRC)','Vout (PID)','Location','best')
figure; plot(Vout_adrc2.Values.Time,Vout_adrc2.Values.Data... ,Vout_pid2.Values.Time,Vout_pid2.Values.Data) grid on xlim([0.06 0.1]) xlabel('Time (s)') ylabel('Output Voltage (V)') legend('Vout (ADRC)','Vout (PID)')
与前面的场景一样,ADRC 控制器比 PID 控制器收敛得更快。
您可以将参考电压设置为原始 18 V 以外的值。ADRC 控制器易于调节,在各种工作点的性能都远优于 PID 控制器。
关闭模型。
close_system(mdl,0);
参考资料
[1] Lee, S. W."Practical Feedback Loop Analysis for Voltage-Mode Boost Converter."Application Report No. SLVA633.Texas Instruments.January 2014. www.ti.com/lit/an/slva633/slva633.pdf
另请参阅
Active Disturbance Rejection Control