exponenta event banner

Надежное управление вибрациями в гибкой балке

В этом примере показано, как надежно настроить контроллер для уменьшения вибраций в гибкой балке. Этот пример адаптирован из «Control System Design» Г. Гудвина, С. Грейба и М. Сальгадо.

Неопределенная модель гибкой балки

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

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

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

G (ы) =∑i=16αis2+2ζiωis+ωi2

при следующих номинальных значениях амплитуд αi и собственных частот αi:

α = 9,72 × 10-4,0,0122,0,0012, -0.0583, -0.0013 0.1199

ω=18.95,118.76,332.54,651.66,1077.2,1609.2.

Коэффициенты демпфирования, как правило, плохо известны и, как предполагается, находятся в диапазоне от 0,0002 до 0,02. Аналогично, естественные частоты известны только приблизительно, и мы предполагаем 20% неопределенность их расположения. Для построения неопределенной модели гибкой балки используйте ureal задание диапазона неопределенности для демпфирующих и собственных частот. Для упрощения мы предполагаем, что все режимы имеют одинаковый коэффициент демпфирования

% Damping factor
zeta = ureal('zeta',0.002,'Range',[0.0002,0.02]);

% Natural frequencies
w1 = ureal('w1',18.95,'Percent',20);
w2 = ureal('w2',118.76,'Percent',20);
w3 = ureal('w3',332.54,'Percent',20);
w4 = ureal('w4',651.66,'Percent',20);
w5 = ureal('w5',1077.2,'Percent',20);
w6 = ureal('w6',1609.2,'Percent',20);

Затем объединяют эти неопределенные коэффициенты в выражение для G (s).

alpha = [9.72e-4 0.0122 0.0012 -0.0583 -0.0013 0.1199];
G = tf(alpha(1),[1 2*zeta*w1 w1^2]) + tf(alpha(2),[1 2*zeta*w2 w2^2]) + ...
    tf(alpha(3),[1 2*zeta*w3 w3^2]) + tf(alpha(4),[1 2*zeta*w4 w4^2]) + ...
    tf(alpha(5),[1 2*zeta*w5 w5^2]) + tf(alpha(6),[1 2*zeta*w6 w6^2]);
G.InputName = 'uG';  G.OutputName = 'y';

Визуализировать влияние неопределенности на передаточную функцию от u до y. bode функция автоматически показывает ответы для 20 случайно выбранных значений неопределенных параметров.

rng(0), bode(G,{1e0,1e4}), grid
title('Uncertain beam model')

Figure contains 2 axes. Axes 1 with title From: uG To: y contains 21 objects of type line. This object represents G. Axes 2 contains 21 objects of type line. This object represents G.

Надежное управление LQG

Контроль LQG является естественной композицией для активного контроля вибрации. С systune, вы не ограничиваетесь оптимальным контроллером LQG полного порядка и можете настраивать контроллеры любого порядка. Например, давайте настроим контроллер состояния-пространства 6-го порядка (половина заказа установки).

C = tunableSS('C',6,1,1);

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

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

Создайте замкнутую модель блок-схемы на рисунке 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'});

Обратите внимание, что CL0 зависит от обоих настраиваемых контроллеров C и неопределенное демпфирование и собственные частоты.

CL0
CL0 =

  Generalized continuous-time state-space model with 2 outputs, 2 inputs, 18 states, and the following blocks:
    C: Tunable 1x1 state-space model, 6 states, 1 occurrences.
    w1: Uncertain real, nominal = 18.9, variability = [-20,20]%, 3 occurrences
    w2: Uncertain real, nominal = 119, variability = [-20,20]%, 3 occurrences
    w3: Uncertain real, nominal = 333, variability = [-20,20]%, 3 occurrences
    w4: Uncertain real, nominal = 652, variability = [-20,20]%, 3 occurrences
    w5: Uncertain real, nominal = 1.08e+03, variability = [-20,20]%, 3 occurrences
    w6: Uncertain real, nominal = 1.61e+03, variability = [-20,20]%, 3 occurrences
    zeta: Uncertain real, nominal = 0.002, range = [0.0002,0.02], 6 occurrences

Type "ss(CL0)" to see the current value, "get(CL0)" to see all properties, and "CL0.Blocks" to interact with the blocks.

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

R = TuningGoal.LQG({'d','n'},{'y','u'},diag([1,1e-10]),diag([1 1e-12]));

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

[CL,fSoft,~,Info] = systune(CL0,R);
Soft: [5.63e-05,Inf], Hard: [-Inf,Inf], Iterations = 72
Soft: [6.13e-05,Inf], Hard: [-Inf,Inf], Iterations = 97
Soft: [6.47e-05,Inf], Hard: [-Inf,Inf], Iterations = 65
Soft: [7.76e-05,Inf], Hard: [-Inf,Inf], Iterations = 86
Soft: [7.76e-05,Inf], Hard: [-Inf,Inf], Iterations = 88
Soft: [7.76e-05,Inf], Hard: [-Inf,Inf], Iterations = 43
Soft: [7.77e-05,Inf], Hard: [-Inf,Inf], Iterations = 79
Soft: [7.8e-05,8.46e-05], Hard: [-Inf,-Inf], Iterations = 38
Soft: [8.02e-05,8.85e-05], Hard: [-Inf,-Inf], Iterations = 117
Soft: [8.22e-05,8.24e-05], Hard: [-Inf,-Inf], Iterations = 40
Soft: [8.22e-05,8.22e-05], Hard: [-Inf,-Inf], Iterations = 25
Final: Soft = 8.22e-05, Hard = -Inf, Iterations = 750

Проверка

Сравните отклики Bode с разомкнутым и замкнутым контуром от d до y для 20 случайно выбранных значений неопределенных параметров. Обратите внимание, как контроллер обрезает первые три пика в ответе Боде.

Tdy = getIOTransfer(CL,'d','y');
bode(G,Tdy,{1e0,1e4})
title('Transfer from disturbance to tip position')
legend('Open loop','Closed loop')

Figure contains 2 axes. Axes 1 with title From: In(1) To: y contains 42 objects of type line. These objects represent Open loop, Closed loop. Axes 2 contains 42 objects of type line. These objects represent Open loop, Closed loop.

Затем постройте график откликов с разомкнутым и замкнутым контуром на импульсное возмущение d. Для читаемости отклик с разомкнутым контуром отображается только для номинальной установки.

impulse(getNominal(G),Tdy,5)
title('Response to impulse disturbance d')
legend('Open loop','Closed loop')

Figure contains an axes. The axes with title From: In(1) To: y contains 22 objects of type line. These objects represent Open loop, Closed loop.

Наконец, systune также обеспечивает понимание наихудших комбинаций значений демпфирования и собственной частоты. Эта информация доступна в аргументе вывода Info.

WCU = Info.wcPert
WCU=10×1 struct array with fields:
    w1
    w2
    w3
    w4
    w5
    w6
    zeta

Эти данные используются для построения графика импульсной реакции для двух наихудших сценариев.

impulse(usubs(Tdy,WCU),5)
title('Worst-case response to impulse disturbance d')

Figure contains an axes. The axes with title From: d To: y contains 10 objects of type line. This object represents untitled1.

Связанные примеры

Подробнее