Устойчивое управление вибрацией в гибкой балке

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

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

Фигура изображает активную систему регулирования вибрации для гибкого луча.

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

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

G(s)=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.

The коэффициентов затухания ζi часто являются плохо известными и приняты в диапазоне от 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. The 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 случайным образом выбранных значений неопределенных параметров. Обратите внимание, как контроллер зажимает первые три пика в отклике Bode.

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.

Похожие примеры

Подробнее о