exponenta event banner

Контроль вибрации в гибкой балке

В этом примере показано, как настроить контроллер для уменьшения вибраций в гибкой балке.

Модель гибкой балки

На фиг.1 показана система активного управления вибрациями для гибкой балки.

Рис. 1: Активное управление гибкой балкой

В этой конфигурации исполнительный механизм, выдающий усилие$u$, и датчик скорости расположены рядом. Мы можем смоделировать передаточную функцию от управляющего входа$u$ к скорости$y$ с помощью конечно-элементного анализа. Сохраняя только первые шесть режимов, получаем растительную модель формы

$$ G(s) = \sum_{i = 1}^6 \frac{\alpha_i^2 s}{ s^2 + 2\xi w_i s + w_i^2} $$

со следующими значениями параметров.

% Parameters
xi = 0.05;
alpha = [0.09877, -0.309, -0.891, 0.5878, 0.7071, -0.8091];
w = [1, 4, 9, 16, 25, 36];

Результирующая модель балки для$G(s)$ задается

% Beam model
G = tf(alpha(1)^2*[1,0],[1, 2*xi*w(1), w(1)^2]) + ...
    tf(alpha(2)^2*[1,0],[1, 2*xi*w(2), w(2)^2]) + ...
    tf(alpha(3)^2*[1,0],[1, 2*xi*w(3), w(3)^2]) + ...
    tf(alpha(4)^2*[1,0],[1, 2*xi*w(4), w(4)^2]) + ...
    tf(alpha(5)^2*[1,0],[1, 2*xi*w(5), w(5)^2]) + ...
    tf(alpha(6)^2*[1,0],[1, 2*xi*w(6), w(6)^2]);

G.InputName = 'uG';  G.OutputName = 'y';

При такой конфигурации датчика/привода балка является пассивной системой:

isPassive(G)
ans =

  logical

   1

Это подтверждается наблюдением за тем, что Найквистский сюжет$G$ позитивно реален.

nyquist(G)

Контроллер LQG

Контроль LQG является естественной композицией для активного контроля вибрации. Настройка управления LQG показана на рис. 2. Сигналы$d$ и$n$ представляют собой технологический и измерительный шум соответственно.

Рис. 2: Структура управления LQG

Первое использование lqg для вычисления оптимального контроллера LQG для цели

$$ J = \lim_{T \rightarrow \infty} E \left( \int_0^T (y^2(t) + 0.001
u^2(t)) dt \right) $$

с дисперсиями шума:

$$ E(d^2(t)) = 1 ,\quad E(n^2(t)) = 0.01 . $$

[a,b,c,d] = ssdata(G);
M = [c d;zeros(1,12) 1];  % [y;u] = M * [x;u]
QWV = blkdiag(b*b',1e-2);
QXU = M'*diag([1 1e-3])*M;
CLQG = lqg(ss(G),QXU,QWV);

Оптимальный контроллер LQG CLQG является сложным с 12 состояниями и несколькими нулями.

size(CLQG)
State-space model with 1 outputs, 1 inputs, and 12 states.
bode(G,CLQG,{1e-2,1e3}), grid, legend('G','CLQG')

Использовать тюнер общего назначения systune чтобы попытаться упростить этот контроллер. С systune, вы не ограничиваетесь контроллером полного порядка и можете настраивать контроллеры любого порядка. Например, давайте настроим контроллер пространства состояния 2-го порядка.

C = ltiblock.ss('C',2,1,1);

Создайте замкнутую модель блок-схемы на рисунке 2.

C.InputName = 'yn';  C.OutputName = 'u';
S1 = sumblk('yn = y + n');
S2 = sumblk('uG = u + d');
CL0 = connect(G,C,S1,S2,{'d','n'},{'y','u'},{'yn','u'});

Используйте критерий LQG$J$ выше в качестве единственной цели настройки. Цель настройки LQG позволяет непосредственно указать веса производительности и ковариации шума.

R1 = TuningGoal.LQG({'d','n'},{'y','u'},diag([1,1e-2]),diag([1 1e-3]));

Теперь настройте контроллер C для минимизации цели LQG.$J$

[CL1,J1] = systune(CL0,R1);
Final: Soft = 0.478, Hard = -Inf, Iterations = 38

Оптимизатор обнаружил контроллер 2-го порядка с. $J= 0.478$Сравнение с оптимальным$J$ значением для CLQG:

[~,Jopt] = evalGoal(R1,replaceBlock(CL0,'C',CLQG))
Jopt =

    0.4673

Снижение производительности составляет менее 5%, и мы уменьшили сложность контроллера с 12 до 2 состояний. Далее сравните импульсные характеристики от$d$ до$y$ для двух контроллеров. Эти два ответа почти идентичны. Таким образом, можно получить практически оптимальное ослабление вибрации с помощью простого контроллера второго порядка.

T0 = feedback(G,CLQG,+1);
T1 = getIOTransfer(CL1,'d','y');
impulse(T0,T1,5)
title('Response to impulse disturbance d')
legend('LQG optimal','2nd-order LQG')

Пассивный контроллер LQG

Мы использовали приблизительную модель луча для проектирования этих двух контроллеров. Априори, нет гарантии, что эти контроллеры будут хорошо работать на реальном луче. Однако известно, что луч является пассивной физической системой и что взаимное соединение пассивных систем с отрицательной обратной связью всегда стабильно. Так что если$-C(s)$ пассивен, мы можем быть уверены, что система с замкнутым контуром будет стабильной.

Оптимальный контроллер LQG не является пассивным. На самом деле, его относительный пассивный индекс бесконечен, потому что$1-CLQG$ не является даже минимальной фазой.

getPassiveIndex(-CLQG)
ans =

   Inf

Это подтверждает его найквистский заговор.

nyquist(-CLQG)

Используя systune, можно повторно настроить контроллер второго порядка с дополнительным требованием, которое$-C(s)$ должно быть пассивным. Для этого создайте цель настройки пассивности для функции передачи с разомкнутым контуром из yn кому u (что есть$C(s)$). Используйте цель «Пассивность» для учета знака минус.

R2 = TuningGoal.WeightedPassivity({'yn'},{'u'},-1,1);
R2.Openings = 'u';

Теперь выполните повторную настройку модели с замкнутым контуром CL1 минимизировать цель LQG$J$ при условии$-C(s)$ пассивности. Обратите внимание, что цель пассивности R2 теперь указан как жесткое ограничение.

[CL2,J2,g] = systune(CL1,R1,R2);
Final: Soft = 0.478, Hard = 1, Iterations = 71

Тюнер достигает того же$J$ значения, что и ранее, при обеспечении пассивности (жесткое ограничение меньше 1). Проверьте пассивность$-C(s)$.

C2 = getBlockValue(CL2,'C');
passiveplot(-C2)

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

nyquist(-CLQG,-C2)
legend('LQG optimal','2nd-order passive LQG')

Наконец, сравните импульсные отклики от$d$ до.$y$

T2 = getIOTransfer(CL2,'d','y');
impulse(T0,T2,5)
title('Response to impulse disturbance d')
legend('LQG optimal','2nd-order passive LQG')

Используя systune, вы разработали пассивный контроллер второго порядка с почти оптимальной производительностью LQG.

См. также

| |

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