Формирующее цикл проектирование контроллера

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

В этом примере вы проектируете контроллер для самолета model.The, пример показывает, как, варьируясь баланс между эффективностью и робастностью влияет на форму цикла и ответ с обратной связью. Пример затем показывает, как уменьшать порядок контроллера при сохранении желательных характеристик ответа.

Модель объекта управления

Этот пример использует 2D вход, 2D выход модель [1] самолета НАСА HiMAT. Самолет показывают в следующей схеме.

Контрольные переменные являются элевоном и приводами утки (δe и δc). Выходные переменные являются углом нападения (α) и угол отношения (θ). Модель имеет шесть состояний, данных

x=[x1x2x3x4x5x6]=[α˙αθ˙θxexc],

где xe и xc лифт и состояния привода утки, соответственно. Используя следующие матрицы пространства состояний, создайте модель этого объекта.

A = [ -2.2567e-02  -3.6617e+01  -1.8897e+01  -3.2090e+01   3.2509e+00  -7.6257e-01;
       9.2572e-05  -1.8997e+00   9.8312e-01  -7.2562e-04  -1.7080e-01  -4.9652e-03;
       1.2338e-02   1.1720e+01  -2.6316e+00   8.7582e-04  -3.1604e+01   2.2396e+01;
       0            0            1.0000e+00   0            0            0;
       0            0            0            0           -3.0000e+01   0;
       0            0            0            0            0           -3.0000e+01];
B = [0     0;
     0     0;
     0     0;
     0     0;
    30     0;
     0    30];
C = [0     1     0     0     0     0;
     0     0     0     1     0     0];
D = [0     0;
     0     0];

G = ss(A,B,C,D);
G.InputName = {'elevon','canard'};
G.OutputName = {'attack','attitude'};

Исследуйте сингулярные значения модели.

sigma(G)

Figure contains an axes object. The axes object contains 2 objects of type line. This object represents G.

Этот объект плохо обусловлен, в том смысле, что существует разрыв приблизительно 40 дБ между самыми большими и самыми маленькими сингулярными значениями около желаемой полосы пропускания управления 8 рад/с. Далее, когда график шага показывает, ответ разомкнутого контура этого объекта нестабилен.

step(G)

Figure contains 4 axes objects. Axes object 1 with title From: elevon contains an object of type line. This object represents G. Axes object 2 contains an object of type line. This object represents G. Axes object 3 with title From: canard contains an object of type line. This object represents G. Axes object 4 contains an object of type line. This object represents G.

Первоначальный проект контроллера

Чтобы спроектировать стабилизировавшийся контроллер для этого объекта, выберите целевую форму цикла. Типичная форма цикла имеет низкое усиление на высоких частотах для робастности и высокое усиление в низких частотах для эффективности. Для желаемой частоты среза 8 рад/с простая целевая форма цикла, которая удовлетворяет эти требования, Gd=8/s.

Gd = tf(8,[1 0]);
sigma(Gd,{0.1 100})
grid on

Figure contains an axes object. The axes object contains an object of type line. This object represents Gd.

Спроектируйте начальный контроллер с loopsyn.

[K0,CL0,gamma0,info0] = loopsyn(G,Gd);
gamma0
gamma0 = 1.2846

Эффективность gamma мера как хорошо форма цикла с K0 совпадает с желаемой формой цикла. Значения рядом или ниже 1 указывают на тот G*K0 близко к Gd. Сравните достигнутую форму цикла с целью.

L0 = G*K0;              
sigma(L0,"b",Gd,"r--",{.1,100});
grid
legend("L0 (actual loop shape)","Gd (target loop shape)");

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent L0 (actual loop shape), Gd (target loop shape).

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

step(CL0,5)

Figure contains 4 axes objects. Axes object 1 with title From: In(1) contains an object of type line. This object represents CL0. Axes object 2 contains an object of type line. This object represents CL0. Axes object 3 with title From: In(2) contains an object of type line. This object represents CL0. Axes object 4 contains an object of type line. This object represents CL0.

Удар в attitude отслеживание (нижний правый график) является результатом разделения этих двух сингулярных значений, ведя к ответу с двумя постоянными времени. Кроме того, между attack существует значительная связь и attitude. Желательно настроить контроллер, чтобы уменьшать удар в attitude отслеживание, уменьшайте связь, и, если возможно уменьшайте перерегулирование в attack ответ.

Спроектируйте контроллер для эффективности

Чтобы улучшить проект, можно попытаться изменить баланс что loopsyn забастовки между эффективностью и робастностью. Для этого используйте alpha входной параметр к loopsyn. По умолчанию, loopsyn использование alpha = 0.5, который оптимизирует эффективность, удовлетворяющую робастности, являющейся не хуже, чем половина максимальной достижимой робастности. alpha = 0 оптимизирует для эффективности (mixsyn спроектируйте). Установка alpha = 1 использует максимизирующий робастность ncfsyn проект. Во-первых, рассмотрите чистый mixsyn проект.

alpha = 0;
[K_mix,CL_mix,gamma_mix,info_mix] = loopsyn(G,Gd,alpha);
gamma_mix
gamma_mix = 0.7723

gamma значение указывает на намного более близкое соответствие к целевой форме цикла, которую можно подтвердить путем графического вывода ответов разомкнутого контура.

L_mix = G*K_mix;              
sigma(L0,"b",L_mix,"g",Gd,"r--",{.1,100});
grid
legend("L0 (inital design)","L_mix (mixsyn design)","Gd (target loop shape)");

Figure contains an axes object. The axes object contains 5 objects of type line. These objects represent L0 (inital design), L\_mix (mixsyn design), Gd (target loop shape).

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

step(CL0,CL_mix,5)
legend("Initial design","mixsyn design","Location","southeast")

Figure contains 4 axes objects. Axes object 1 with title From: In(1) contains 2 objects of type line. These objects represent Initial design, mixsyn design. Axes object 2 contains 2 objects of type line. These objects represent Initial design, mixsyn design. Axes object 3 with title From: In(2) contains 2 objects of type line. These objects represent Initial design, mixsyn design. Axes object 4 contains 2 objects of type line. These objects represent Initial design, mixsyn design.

Однако эта эффективность происходит за счет робастности. Сравните запасы устойчивости системы с первоначальным проектом и mixsyn проект.

DM0 = diskmargin(G,K0);
DM_mix = diskmargin(G,K_mix);
DM0.DiskMargin
ans = 0.1206
DM_mix.DiskMargin
ans = 0.0517

Инвертирующий объект проект имеет плохую робастность. Например, если самое маленькое сингулярное значение модели объекта управления составляет 1% самого большого сингулярного значения, инвертирование объекта усиливает ошибки модели на коэффициент 100 в направлении самого маленького сингулярного значения. Таким образом, если вы не имеете очень точную модель, желательно использовать проект с лучшей робастностью.

Спроектируйте контроллер для робастности

В другой крайности чистый ncfsyn спроектируйте, оптимизированный для робастности. Вычислите такой контроллер, использующий alpha = 1, и исследуйте получившуюся устойчивость, форму цикла и ответы.

alpha = 1;
[K_ncf,CL_ncf,gamma_ncf,info_ncf] = loopsyn(G,Gd,alpha);
gamma_ncf
gamma_ncf = 2.8360
DM_ncf = diskmargin(G,K_ncf);
DM_ncf.DiskMargin
ans = 0.2201
L_ncf = G*K_ncf; 
sigma(L0,L_mix,L_ncf,Gd,"k--",{.1,100});
grid
legend("L0 (inital design)","L_mix (mixsyn design)","L_ncf (ncfsyn design)","Gd (target loop shape)");

Figure contains an axes object. The axes object contains 7 objects of type line. These objects represent L0 (inital design), L\_mix (mixsyn design), L\_ncf (ncfsyn design), Gd (target loop shape).

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

step(CL0,CL_mix,CL_ncf,5)
legend("Initial design","mixsyn design","ncfsyn design","Location","southeast")

Figure contains 4 axes objects. Axes object 1 with title From: In(1) contains 3 objects of type line. These objects represent Initial design, mixsyn design, ncfsyn design. Axes object 2 contains 3 objects of type line. These objects represent Initial design, mixsyn design, ncfsyn design. Axes object 3 with title From: In(2) contains 3 objects of type line. These objects represent Initial design, mixsyn design, ncfsyn design. Axes object 4 contains 3 objects of type line. These objects represent Initial design, mixsyn design, ncfsyn design.

Выбор удовлетворительного проекта

Таким образом, чтобы изменить к лучшему оформление по умолчанию, немного способствуя mixsyn проект, не выбрасывая слишком много запаса устойчивости может дать к подходящему проекту для этого объекта. Можно управлять сколько loopsyn эффективность пользы или робастность установкой alpha к любому значению между 0 и 1. Значением по умолчанию, используемым в начальном контроллере, является alpha = 0.5. Попробуйте значение, которое немного способствует эффективности, и сравните результаты с первоначальным проектом.

alpha = 0.25;
[K,CL,gamma,info] = loopsyn(G,Gd,alpha);
gamma
gamma = 1.0226
L = G*K;            
sigma(L0,L,Gd,"k--",{.1,100});
grid
legend("L0 (inital design)","L (final design)","Gd (target loop shape)");

Figure contains an axes object. The axes object contains 5 objects of type line. These objects represent L0 (inital design), L (final design), Gd (target loop shape).

DM = diskmargin(G,K);
DM.DiskMargin
ans = 0.0966
step(CL0,CL,5)
legend("initial (alpha = 0.5)","final (alpha = 0.25)","Location","southeast")

Figure contains 4 axes objects. Axes object 1 with title From: In(1) contains 2 objects of type line. These objects represent initial (alpha = 0.5), final (alpha = 0.25). Axes object 2 contains 2 objects of type line. These objects represent initial (alpha = 0.5), final (alpha = 0.25). Axes object 3 with title From: In(2) contains 2 objects of type line. These objects represent initial (alpha = 0.5), final (alpha = 0.25). Axes object 4 contains 2 objects of type line. These objects represent initial (alpha = 0.5), final (alpha = 0.25).

alpha = 0.25 спроектируйте выражения довольно хорошая эффективность, уменьшая связь и устранение удара в attitude ответ. Это имеет немного меньший запас устойчивости (дисковое поле приблизительно 0,09, по сравнению с приблизительно 0,125 для первоначального проекта). Для вашего приложения можно выбрать любое значение alpha между 0 и 1 достигает приемлемого баланса между эффективностью и робастностью.

Уменьшайте порядок контроллера

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

order(K)
ans = 9

Видеть, возможно ли упростить K, используйте balred команда.

balred(K)

Figure contains an axes object. The axes object with title Hankel Singular Values and Approximation Error contains 3 objects of type bar, line. These objects represent Unstable modes, Stable modes, Absolute error bound.

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

Kr = balred(K,6);
order(Kr)
ans = 6

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

sigma(K,K-Kr,{1e-4,1e6})
legend("K (ninth order)","difference K-Kr")

Figure contains an axes object. The axes object contains 4 objects of type line. These objects represent K (ninth order), difference K-Kr.

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

CLr = feedback(G*Kr,eye(2));
step(CL,CLr,5)
legend("K (ninth order)","Kr (sixth order)","Location","southeast")

Figure contains 4 axes objects. Axes object 1 with title From: In(1) contains 2 objects of type line. These objects represent K (ninth order), Kr (sixth order). Axes object 2 contains 2 objects of type line. These objects represent K (ninth order), Kr (sixth order). Axes object 3 with title From: In(2) contains 2 objects of type line. These objects represent K (ninth order), Kr (sixth order). Axes object 4 contains 2 objects of type line. These objects represent K (ninth order), Kr (sixth order).

Спроектируйте контроллер с уменьшаемым порядком

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

Спроектируйте новый контроллер шестого порядка с alpha = 0.25 и сравните ответы на ответ, полученный с уменьшаемым контроллером.

alpha = 0.25;
[K6,CL6,gamma6,info6] = loopsyn(G,Gd,alpha,6);
step(CLr,CL6,5)
legend("Kr (reduced to 6th order)","K6 (computed at 6th order)","Location","southeast")

Figure contains 4 axes objects. Axes object 1 with title From: In(1) contains 2 objects of type line. These objects represent Kr (reduced to 6th order), K6 (computed at 6th order). Axes object 2 contains 2 objects of type line. These objects represent Kr (reduced to 6th order), K6 (computed at 6th order). Axes object 3 with title From: In(2) contains 2 objects of type line. These objects represent Kr (reduced to 6th order), K6 (computed at 6th order). Axes object 4 contains 2 objects of type line. These objects represent Kr (reduced to 6th order), K6 (computed at 6th order).

Разработка контроллера шестого порядка непосредственно дает к подобному переходному процессу, несмотря на то, что для этой конкретной системы этот подход приводит к некоторому сокращению эффективности (gamma6 = 1.4, по сравнению с gamma = 1.0 для полного порядка, alpha = 0.25 контроллер K). Однако для некоторых систем, этот подход может быть лучше, потому что он оптимизирует сам контроллер более низкоуровневый, вместо того, чтобы удалить потенциально важную динамику из оптимизированного контроллера.

Заключение

loopsyn позволяет вам настроить компромисс между эффективностью и робастностью, чтобы установить подходящее равновесие для вашего приложения. Можно попробовать различные значения alpha найти контроллер, который работает на ваши требования. Можно затем уменьшать порядок контроллера с balred, или используйте ord аргумент loopsyn синтезировать контроллер более низкоуровневый непосредственно.

Ссылки

[1] Сафонов, M., А. Лоб и Г. Хартманн. “Свойства обратной связи Многомерных Систем: Роль и Использование Матрицы Различия в Возврате”. Транзакции IEEE на Автоматическом управлении 26, № 1 (февраль 1981): 47–65.

Смотрите также

Похожие темы