exponenta event banner

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

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

Аналогичный пример использования традиционного неявного MPC см. в разделе Сервомотор постоянного тока с ограничением на неизмеренном выходе.

Определение модели сервопривода постоянного тока

Линейная динамическая модель с разомкнутым контуром определена в 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);

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

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

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

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

Создать явный контроллер MPC

Явный MPC выполняет эквивалентную явно кусочно-аффинную версию закона управления MPC, определенного традиционным неявным контроллером MPC. Чтобы создать явный MPC-контроллер из неявного MPC-контроллера, необходимо указать диапазон для каждого состояния контроллера, опорный сигнал, управляемую переменную и измеряемое возмущение, чтобы проблема многопараметрического квадратичного программирования решалась в наборах параметров, определяемых этими диапазонами.

Создайте структуру диапазона, в которой можно указать диапазон для каждого параметра.

range = generateExplicitRange(mpcobj);
-->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.

Укажите диапазоны для состояний контроллера

Состояния контроллера MPC включают в себя состояния из модели установки, модели возмущения и модели шума в этом порядке. Установка диапазона переменной состояния иногда затруднена, когда состояние не соответствует физическому параметру. В этом случае для сбора данных о диапазоне состояний рекомендуется выполнять несколько имитаций установки с разомкнутым контуром с типичными опорными сигналами и сигналами возмущения.

range.State.Min(:) = -1000;
range.State.Max(:) = 1000;

Обычно известен практический диапазон эталонных сигналов, используемых в номинальной рабочей точке установки. Диапазоны, используемые для создания явного контроллера MPC, должны быть по крайней мере такими же, как и практический диапазон. Обратите внимание, что диапазон для привязки крутящего момента зафиксирован на 0 потому что он имеет нулевой вес.

range.Reference.Min = [-5;0];
range.Reference.Max = [5;0];

Если управляемые переменные ограничены, диапазоны, используемые для создания явного контроллера MPC, должны быть по крайней мере такими же, как эти пределы.

range.ManipulatedVariable.Min = MV.Min - 1;
range.ManipulatedVariable.Max = MV.Max + 1;

Создайте явный MPC-контроллер с указанными диапазонами.

mpcobjExplicit = generateExplicitMPC(mpcobj,range)

Regions found / unexplored:       75/       0

 
Explicit MPC Controller
---------------------------------------------
Controller sample time:    0.1 (seconds)
Polyhedral regions:        75
Number of parameters:      6
Is solution simplified:    No
State Estimation:          Default Kalman gain
---------------------------------------------
Type 'mpcobjExplicit.MPC' for the original implicit MPC design.
Type 'mpcobjExplicit.Range' for the valid range of parameters.
Type 'mpcobjExplicit.OptimizationOptions' for the options used in multi-parametric QP computation.
Type 'mpcobjExplicit.PiecewiseAffineSolution' for regions and gain in each solution.

Печать кусочно-аффинной секции

Можно просмотреть любой 2-D раздел кусочно-аффинного раздела, определенного явным законом управления MPC. Для этого сначала создайте структуру параметров, в которой можно указать, какое 2-D сечение будет выводиться на печать.

params = generatePlotParameters(mpcobjExplicit);

В этом примере отображается первая переменная состояния относительно второй переменной состояния. Все остальные параметры должны быть зафиксированы значениями в соответствующих диапазонах.

Исправьте другие переменные состояния.

params.State.Index = [3 4];
params.State.Value = [0 0];

Фиксация опорных сигналов.

params.Reference.Index = [1 2];
params.Reference.Value = [pi 0];

Исправьте управляемые переменные.

params.ManipulatedVariable.Index = 1;
params.ManipulatedVariable.Value = 0;

Постройте график указанного раздела 2-D.

plotSection(mpcobjExplicit,params);
axis([-.3 .3 -2 2]);
grid
title('Section of partition [x3(t)=0, x4(t)=0, u(t-1)=0, r(t)=pi]')
xlabel('x1(t)')
ylabel('x2(t)')

Моделирование контроллера с помощью sim Функция

Сравните результаты моделирования с обратной связью между неявным MPC и явным MPC-контроллерами.

Tstop = 8;                      % seconds
Tf = round(Tstop/Ts);           % simulation iterations
r = [pi 0];                     % reference signal
[y1,t1,u1] = sim(mpcobj,Tf,r);  % simulation with traditional MPC
[y2,t2,u2] = sim(mpcobjExplicit,Tf,r);   % simulation with Explicit MPC
-->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.

Результаты моделирования идентичны.

fprintf('Difference between implicit and explicit MPC trajectories = %g\n',...
        norm(u2-u1)+norm(y2-y1));
Difference between implicit and explicit MPC trajectories = 8.68909e-12

Моделирование с помощью Simulink

Для выполнения этого примера необходимо приложение Simulink ®.

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

Моделирование управления по замкнутому контуру линейной модели установки в Simulink. Блок явного контроллера MPC настроен на использование mpcobjExplicit в качестве своего контроллера.

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

Отклик с замкнутым контуром идентичен традиционному MPC-контроллеру, разработанному в сервомоторе постоянного тока с ограничением на неизмеренный выход.

Управление с использованием субоптимального явного MPC

Чтобы уменьшить объем памяти, можно использовать simplify функция уменьшения количества кусочно-аффинных областей раствора. Например, можно удалить регионы, чебышевский радиус которых меньше 0.08. Однако цена, которую вы платите, заключается в том, что производительность контроллера является неоптимальной.

mpcobjExplicitSimplified = simplify(mpcobjExplicit,'radius',0.08)

Regions to analyze:       75/      75 --> 37 regions deleted.

 
Explicit MPC Controller
---------------------------------------------
Controller sample time:    0.1 (seconds)
Polyhedral regions:        38
Number of parameters:      6
Is solution simplified:    Yes
State Estimation:          Default Kalman gain
---------------------------------------------
Type 'mpcobjExplicitSimplified.MPC' for the original implicit MPC design.
Type 'mpcobjExplicitSimplified.Range' for the valid range of parameters.
Type 'mpcobjExplicitSimplified.OptimizationOptions' for the options used in multi-parametric QP computation.
Type 'mpcobjExplicitSimplified.PiecewiseAffineSolution' for regions and gain in each solution.

Количество кусочно-аффинных областей уменьшено.

Сравните результаты моделирования с обратной связью между неоптимальным явным MPC и явным MPC.

[y3,t3,u3] = sim(mpcobjExplicitSimplified, Tf, r);
-->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.

Результаты моделирования не совпадают.

fprintf('Difference between exact and suboptimal explicit MPC trajectories = %g\n',...
        norm(u3-u2)+norm(y3-y2));
Difference between exact and suboptimal explicit MPC trajectories = 439.399

Результаты графика.

figure
subplot(3,1,1)
plot(t1,y1(:,1),t3,y3(:,1),'o')
grid
title('Angle (rad)')
legend('Explicit','sub-optimal Explicit')
subplot(3,1,2)
plot(t1,y1(:,2),t3,y3(:,2),'o')
grid
title('Torque (Nm)')
legend('Explicit','sub-optimal Explicit')
subplot(3,1,3)
plot(t1,u1,t3,u3,'o')
grid
title('Voltage (V)')
legend('Explicit','sub-optimal Explicit')

Результат моделирования с использованием неоптимального явного MPC несколько хуже.

Ссылки

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

bdclose(mdl)

Связанные темы