Сервопривод DC с ограничением на неизмеренный Вывод

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

Ссылка

[1] А. Бемпорэд и Э. Моска, ''Выполнение трудных ограничений в неопределенных линейных системах ссылочным управлением'', Automatica, издание 34, № 4, стр 451-461, 1998.

См. также EMPCMOTOR.

Задайте модель сервопривода DC

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

[plant, tau] = mpcmotormodel;

Разработайте контроллер MPC

Задайте типы сигнала ввода и вывода для контроллера 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

Создайте контроллер MPC с моделью объекта управления, шагом расчета и горизонтами.

Ts = 0.1;           % Sampling time
p = 10;             % Prediction horizon
m = 2;              % Control horizon
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(311)
stairs(t1,y1(:,1));
hold on
stairs(t1,r(:,1));
hold off
title('Angular Position')
subplot(312)
stairs(t1,y1(:,2));
title('Torque')
subplot(313)
stairs(t1,u1);
title('Voltage')

Моделируйте Используя Simulink®

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

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

Моделируйте управление с обратной связью линейной модели объекта управления в Simulink. Контроллер "mpcobj" задан в диалоговом окне блока.

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

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

bdclose(mdl)

Похожие темы