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

В этом примере показано, как надежно настроить контроллер для сокращения колебаний в гибком луче. Этот пример адаптируется из "Проекта Системы управления" Г. Гудвина, С. Грэеба и М. Сальгадо.

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

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

Рисунок 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.

Коэффициенты затухания ζ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. bode функционируйте автоматически показывает ответы для 20 случайным образом выбранных значений неопределенных параметров.

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

Figure contains 2 axes objects. Axes object 1 with title From: uG To: y contains 21 objects of type line. This object represents G. Axes object 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 = 68
Soft: [6.27e-05,0.000102], Hard: [-Inf,-Inf], Iterations = 78
Soft: [6.96e-05,7.38e-05], Hard: [-Inf,-Inf], Iterations = 82
Soft: [7.2e-05,7.2e-05], Hard: [-Inf,-Inf], Iterations = 40
Final: Soft = 7.2e-05, Hard = -Inf, Iterations = 268

Валидация

Сравните открытое - и с обратной связью Предвещают ответы от d к y для 20 случайным образом выбранных значений неопределенных параметров. Отметьте, как контроллер отсекает первые три peaks в Предвещать ответе.

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 objects. Axes object 1 with title From: In(1) To: y contains 42 objects of type line. These objects represent Open loop, Closed loop. Axes object 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 object. The axes object 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=3×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 object. The axes object with title From: d To: y contains 3 objects of type line. This object represents untitled1.

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

Больше о