使用 PWM 为 BLDC 转速控制设计自抗扰控制
此示例说明如何设计在 Simulink® 中使用 Simscape™ Electrical™ 组件建模的无刷 DC (BLDC) 电机的转速的自抗扰控制 (ADRC)。
在此示例中,您还将 ADRC 控制器与 PID 控制器的控制性能进行比较。尽管您可以在较宽的工作范围内调节 PID 控制器,但设计试验和调节 PID 增益需要大量的工作。使用 ADRC,您可以获得非线性控制器,并以更简单的设置和更少的调节工作实现更好的性能。
BLDC 电机模型
与有刷电机相比,BLDC 电机具有众多优势,例如效率更高、维护成本更低。该 BLDC 电机的转速通过实现 PWM 控制来进行控制。为了控制电机转速,使用脉冲宽度调制 (PWM) 来调制理想的 DC 电压源,并通过三相逆变器发送以驱动 BLDC 电机。此模型基于使用 PWM 进行 BLDC 转速控制视频中讨论的模型。
mdl = 'BLDCMotorADRC';
open_system(mdl)
此模型包含一个控制器可变子系统,该可变子系统具有两个选择项:ADRC 控制器和 PID 控制器。ADRC Controller
子系统设置为默认活动变体。该模型还包括一个手动开关,用于在开环和闭环配置中操作该模型。默认情况下,它设置为开环配置。
在此模型中,通过直接调制相电压来实现 PWM 控制。PWM Generator 模块在 Commutation Logic 子系统下使用。根据此逻辑,PWM Generator 模块的输出控制 500 V DC 电源电压脉冲的通断,以根据转子所在的扇区为正确的相位提供能量。
设计 ADRC 控制器
ADRC 是功能强大的工具,适用于具有未知动态特性以及内外部扰动的被控对象的控制器设计。该模块将未知动态特性和扰动建模为被控对象的扩张状态,并使用观测器对其进行估计。通过该模块,您仅使用控制算法的几个关键调节参数即可设计控制器:
模型阶数类型(一阶或二阶)
模型响应的临界增益
控制器和观测器带宽
此外,您还要指定时域参数以匹配被控对象模型的时域。在此示例中,该参数设置为离散时间,采样时间等于随模型提供的 Ts_motor
变量。以下各节描述如何找到在此模型的 ADRC 模块参数中指定的其余调节参数。
模型阶数和临界增益
要确定模型阶数,请在开环配置中对被控对象模型进行仿真。假设占空比的饱和界限为 0 到 1,并使用 0.5 的阶跃输入作为占空比来驱动被控对象模型。
set_param(mdl,'SignalLoggingName','openLoopSim'); sim(mdl); stepRef = getElement(openLoopSim,'stepRef'); speedOut = getElement(openLoopSim,'Measured speed'); figure; plot(stepRef.Values.Time,stepRef.Values.Data... ,speedOut.Values.Time,speedOut.Values.Data) grid on xlabel('Time (s)') ylabel('Speed (RPM)') legend('Ref','Output')
要确定临界增益值 b0
,请在阶跃参考输入后的 0.00075 秒短时间间隔内检查转速响应。
x = speedOut.Values.Time(1:16); y = speedOut.Values.Data(1:16); figure plot(x,y) xlabel('Time (s)') ylabel('Speed(RPM)') grid on
y(end)
ans = 3.1542
转速响应显示出二阶动态系统的典型形状。因此,为模型类型参数选择二阶。根据测得的转速,您可以通过二阶响应逼近 来确定临界增益。在 0.0005 秒的持续时间内,转速变化了 3.1542 rpm。
a = 2*y(end)/(x(end)^2); b0 = a/0.5;
控制器带宽和观测器带宽
控制器带宽通常取决于频域或时域的性能设定。在此示例中,控制器带宽 设置为 1000 弧度/秒。
通常,观测器带宽 设置为 的 5 到 10 倍,以便观测器比控制器收敛得要快。在此示例中,指定观测器带宽与控制器带宽相同。这样您便可以利用观测器过滤掉通过 PWM 控制的 BLDC 电机中存在的过多开关噪声。下图显示了当观测器带宽设置为 1000 弧度/秒和 5000 弧度/秒时的 ADRC 控制器输出占空比信号。
您可以看到,当观测器带宽为 1000 弧度/秒时,相比带宽为 5000 弧度/秒时,ADRC 模块输出信号的噪声要小得多。具有这样的噪声占空比输出会使控制器在实际系统中无法使用。
虽然减小观测器带宽减少了 ADRC 模块输出信号中的振荡,但进一步减小 可能不可行,因为观测器的缓慢收敛会对整体控制性能产生不利影响。
ADRC 和 PID 控制器的性能比较
您可以使用具有变化速度参考信号的仿真来检查经过调节的控制器的性能。
为了检查控制器的动态性能,该模型经历了以下加速过程。
在 t = 0.2 秒和 t = 0.3 秒之间,转速参考值从 0 rpm 飙升到 500 rpm。
在 t = 0.7 秒和 t = 1.0 秒之间,转速参考值从 500 rpm 飚升到 2000 rpm。
将手动开关切换到在闭环配置中操作模型。
set_param('BLDCMotorADRC/Manual Switch','sw','0')
使用 ADRC Controller
子系统对模型进行仿真。
set_param(mdl,'SignalLoggingName','adrcSim'); sim(mdl); speedOutADRC = getElement(adrcSim,'Measured speed');
使用 PID Controller
子系统对模型进行仿真。
set_param([mdl,'/Controller'],'LabelModeActiveChoice','PID') set_param(mdl,'SignalLoggingName','pidSim'); sim(mdl); speedOutPID = getElement(pidSim,'Measured speed');
比较两个控制器的性能。
figure; plot(refSignal{1}.Time,refSignal{1}.Data... ,speedOutADRC.Values.Time,speedOutADRC.Values.Data) hold on plot(speedOutPID.Values.Time,speedOutPID.Values.Data) hold off grid on xlabel('Time (s)') ylabel('Speed (RPM)') legend('Ref','ADRC','PID','location','best')
转速响应表明,ADRC 控制器的性能明显优于 PID 控制器,因为前者在瞬态期间更紧密地跟随转速参考值,并在 2000 rpm 左右减少超调。
关闭模型。
close_system(mdl,0);
另请参阅
Active Disturbance Rejection Control