Сервопривод постоянного тока с ограничением на невынесенном выходе

Этот пример показывает, как спроектировать прогнозирующий контроллер модели для сервомеханизма постоянного тока под ограничениями по напряжению и крутящему моменту вала.

Для аналогичного примера, который использует явный MPC, смотрите Явное MPC управление сервопривода постоянного тока с ограничением на невынесенном выходе.

Задайте Модель электродвигателя DC-Servo

Линейная динамическая модель без разомкнутого контура задана в plant. Переменные tau - максимальный допустимый крутящий момент, используемый в качестве выхода ограничения.

[plant,tau] = mpcmotormodel;

Задайте типы входного и выходного сигналов для контроллера MPC. Второй выход, крутящий момент, неизмерим.

plant = setmpcsignals(plant,'MV',1,'MO',1,'UO',2);

Задайте ограничения СН

Управляемая переменная ограничена между +/- 220 вольтами. Поскольку входные параметры и выходы объекта имеют различные порядки величины, вы также используете шкалу факторы для упрощения настройки MPC. Типичными вариантами шкалы коэффициента являются верхний/нижний предел или рабочая область значений.

MV = struct('Min',-220,'Max',220,'ScaleFactor',440);

Задайте ограничения OV

Ограничения по крутящему моменту накладываются только на первых трех шагах предсказания.

OV = struct('Min',{-Inf, [-tau;-tau;-tau;-Inf]},...
            'Max',{Inf, [tau;tau;tau;Inf]},...
            'ScaleFactor',{2*pi, 2*tau});

Задайте веса настройки

Задача управления состоит в том, чтобы получить нуль нулевого отслеживания для углового положения. Поскольку у вас есть только одна манипулируемая переменная, крутящий момент вала допускается плавающий в пределах своего ограничения, устанавливая его вес равным нулю.

Weights = struct('MV',0,'MVRate',0.1,'OV',[0.1 0]);

Создайте контроллер MPC

Создайте контроллер со шаг расчета Ts, горизонт предсказания p, и управляйте горизонтом m.

Ts = 0.1;
p = 10;
m = 2;
mpcobj = mpc(plant,Ts,p,m,Weights,MV,OV);

Симулируйте контроллер, используя sim Функция

Используйте sim функция для симуляции управления с обратной связью линейной модели объекта управления в MATLAB.

disp('Now simulating nominal closed-loop behavior');
Tstop = 8;                      % seconds
Tf = round(Tstop/Ts);           % simulation iterations
r = [pi*ones(Tf,1) zeros(Tf,1)];% reference signal
[y1,t1,u1] = sim(mpcobj,Tf,r);
Now simulating nominal closed-loop behavior
-->Converting model to discrete time.
   Assuming no disturbance added to measured output channel #1.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

Постройте график результатов.

subplot(3,1,1)
stairs(t1,y1(:,1))
hold on
stairs(t1,r(:,1))
hold off
title('Angular Position')
subplot(3,1,2)
stairs(t1,y1(:,2))
title('Torque')
subplot(3,1,3)
stairs(t1,u1)
title('Voltage')

Симулируйте с использованием Simulink

Чтобы запустить этот пример, требуется Simulink ®.

if ~mpcchecktoolboxinstalled('simulink')
    disp('Simulink(R) is required to run this example.')
    return
end

Симулируйте управление с обратной связью линейной модели объекта управления в Simulink. Блок MPC Controller сконфигурирован для использования mpcobj в качестве его контроллера.

mdl = 'mpc_motor';
open_system(mdl)
sim(mdl)

Реакция с обратной связью идентична результату симуляции в MATLAB.

Ссылки

[1] A. Bemporad and E. Mosca, «Выполнение жестких ограничений в неопределенных линейных системах путем управления ссылками», Automatica, vol. 34, no. 4, pp. 451-461, 1998.

bdclose(mdl)

Похожие темы