Этот пример показывает, как учесть неуверенность модели при настройке системы управления движения.
Этот пример совершенствовал проект, обсужденный в "Настройке Цифрового примера" Системы управления Движения. Систему позиционирования на рассмотрении показывают ниже.
Рисунок 1: Цифровое оборудование управления движением
Физическую модель объекта показывают в блоке "Plant Model" модели Simulink rct_dmcNotch
:
Рисунок 2: уравнения движения
В более раннем примере мы настроили контроллер, использующий "четкие" значения для физических параметров. В действительности эти значения параметров только известны приблизительно и могут отличаться в зависимости от времени. Поскольку получившиеся образцовые несоответствия могут оказать негативное влияние на производительность контроллера, мы должны объяснить неуверенность параметра во время настройки, чтобы гарантировать устойчивую производительность в области значений возможных значений параметров. Этот процесс называется устойчивой настройкой.
Примите 25%-ю неуверенность на значении жесткости и 50%-ю неуверенность на значениях коэффициентов затухания. Используйте объект ureal
смоделировать эти области значений неуверенности.
b1 = ureal('b1',1e-6,'Percent',50); b2 = ureal('b2',1e-6,'Percent',50); b12 = ureal('b12',5e-7,'Percent',50); k = ureal('k',0.013,'Percent',25);
Используя уравнения движения в рисунке 2, мы можем вывести модель в пространстве состояний G
объекта, выраженного с точки зрения:
J1 = 1e-6; J2 = 1.15e-7; A = [0 1 0 0; -k/J1 -(b1+b12)/J1 k/J1 b12/J1; 0 0 0 1; k/J2 b12/J2 -k/J2 -(b2+b12)/J2 ]; B = [ 0; 1/J1 ; 0 ; 0 ]; C = [ 0 0 1 0 ]; D = 0; G = ss(A,B,C,D,'InputName','u','OutputName','pos_L')
G = Uncertain continuous-time state-space model with 1 outputs, 1 inputs, 4 states. The model uncertainty consists of the following blocks: b1: Uncertain real, nominal = 1e-06, variability = [-50,50]%, 1 occurrences b12: Uncertain real, nominal = 5e-07, variability = [-50,50]%, 1 occurrences b2: Uncertain real, nominal = 1e-06, variability = [-50,50]%, 1 occurrences k: Uncertain real, nominal = 0.013, variability = [-25,25]%, 1 occurrences Type "G.NominalValue" to see the nominal value, "get(G)" to see all properties, and "G.Uncertainty" to interact with the uncertain elements.
Обратите внимание на то, что получившаяся модель G
зависит от неопределенных параметров. Оценить, как неуверенность влияет на объект, график Предвещала ответ для различных значений. По умолчанию функция bode
использует 20 случайным образом выбранных значений в области значений неуверенности. Обратите внимание на то, что и затухание и собственная частота основного резонанса затронуты.
rng(0), bode(G,{1e0,1e4})
Чтобы сравнить номинальную и устойчивую настройку, мы сначала повторяем номинальный проект, сделанный в "Настройке Цифрового примера" Системы управления Движения. Контроллер состоит из компенсатора ведущей задержки и фильтра метки:
% Tunable lead-lag LL = tunableTF('LL',1,1); % Tunable notch (s^2+2*zeta1*wn*s+wn^2)/(s^2+2*zeta2*wn*s+wn^2) wn = realp('wn',300); wn.Minimum = 300; zeta1 = realp('zeta1',1); zeta1.Minimum = 0; zeta1.Maximum = 1; zeta2 = realp('zeta2',1); zeta2.Minimum = 0; zeta2.Maximum = 1; N = tf([1 2*zeta1*wn wn^2],[1 2*zeta2*wn wn^2]); % Overall controller C = N * LL;
Используйте feedback
, чтобы создать модель T0
с обратной связью, которая включает и настраиваемые и неопределенные элементы.
AP = AnalysisPoint('u',1); % to access control signal u T0 = feedback(G*AP*C,1); T0.InputName = 'ref'
T0 = Generalized continuous-time state-space model with 1 outputs, 1 inputs, 7 states, and the following blocks: LL: Parametric SISO transfer function, 1 zeros, 1 poles, 1 occurrences. b1: Uncertain real, nominal = 1e-06, variability = [-50,50]%, 1 occurrences b12: Uncertain real, nominal = 5e-07, variability = [-50,50]%, 1 occurrences b2: Uncertain real, nominal = 1e-06, variability = [-50,50]%, 1 occurrences k: Uncertain real, nominal = 0.013, variability = [-25,25]%, 1 occurrences u: Analysis point, 1 channels, 1 occurrences. wn: Scalar parameter, 6 occurrences. zeta1: Scalar parameter, 1 occurrences. zeta2: Scalar parameter, 1 occurrences. Type "ss(T0)" to see the current value, "get(T0)" to see all properties, and "T0.Blocks" to interact with the blocks.
Основные настраивающие цели:
Пропускная способность разомкнутого цикла 50 рад/с
Усиление и запасы устойчивости фазы по крайней мере 7,6 дБ и 45 градусов
Чтобы предотвратить быструю динамику, мы далее ограничиваем собственную частоту полюсов с обратной связью.
s = tf('s'); R1 = TuningGoal.LoopShape('u',50/s); R2 = TuningGoal.Margins('u',7.6,45); R3 = TuningGoal.Poles('u',0,0,1e3); % natural frequency < 1000
Теперь настройте параметры контроллера для номинального объекта, подвергающегося трем настраивающимся голам.
T = systune(getNominal(T0),[R1 R2 R3]);
Final: Soft = 0.925, Hard = -Inf, Iterations = 121
Окончательное значение указывает, что все цели проекта были номинально достигнуты, и ответ с обратной связью выглядит хорошим.
step(T), title('Nominal closed-loop response')
Насколько устойчивый этот проект? Чтобы узнать, обновите неопределенную модель T0
с обратной связью с номинально настроенными параметрами контроллера и постройте переходной процесс с обратной связью для 10 случайных выборок неопределенных параметров.
Tnom = setBlockValue(T0,T); % update T0 with tuned valued from systune [Tnom10,S10] = usample(Tnom,10); % sample the uncertainty step(Tnom10,0.5) title('Closed-loop response for 10 uncertain parameter values')
Этот график показывает значительные колебания при отодвигании от номинальной стоимости.
Затем повторно настройте контроллер, использующий неопределенную модель T0
с обратной связью вместо ее номинальной стоимости. Это дает команду systune
осуществлять настраивающиеся цели в целой области значений неуверенности.
[Trob,fSoft,~,Info] = systune(T0,[R1 R2 R3]);
Soft: [0.925,Inf], Hard: [-Inf,-Inf], Iterations = 121 Soft: [1.02,3.7], Hard: [-Inf,-Inf], Iterations = 37 Soft: [1.25,1.84], Hard: [-Inf,-Inf], Iterations = 41 Soft: [1.26,1.26], Hard: [-Inf,-Inf], Iterations = 27 Final: Soft = 1.26, Hard = -Inf, Iterations = 226
Достигнутая производительность немного хуже, чем для номинальной настройки, которая ожидается, учитывая дополнительное ограничение робастности. Сравните производительность с номинальным проектом.
Trob10 = usubs(Trob,S10); % use the same 10 uncertainty samples step(Tnom10,Trob10,0.5) title('Closed-loop response for 10 uncertain parameter values') legend('Nominal tuning','Robust tuning')
Устойчивый проект имеет больше перерегулирования, но в основном свободен от колебаний. Проверьте, что резонанс объекта надежно ослабляется.
viewGoal(R1,Trob)
Наконец, сравните номинальные и устойчивые контроллеры.
Cnom = setBlockValue(C,Tnom); Crob = setBlockValue(C,Trob); bode(Cnom,Crob), grid, title('Controller') legend('Nominal tuning','Robust tuning')
Не удивительно, устойчивый диспетчер использует более широкую и более глубокую метку, чтобы разместить затухание и изменения собственной частоты в резонансе объекта. Используя устойчивую настраивающую возможность systune
, можно автоматически расположить и калибровать метку, чтобы лучше всего компенсировать такую изменчивость.
Четвертый выходной аргумент systune
содержит информацию о комбинациях худшего случая неопределенных параметров. Эти комбинации перечислены в порядке убывания серьезности.
WCU = Info.wcPert
WCU = 5×1 struct array with fields: b1 b12 b2 k
WCU(1) % worst-overall combination
ans = struct with fields: b1: 5.0000e-07 b12: 7.5000e-07 b2: 5.0000e-07 k: 1.6250e-02
Чтобы анализировать ответы худшего случая, замените этими значениями параметров в модели Trob
с обратной связью.
Twc = usubs(Trob,WCU);
step(Twc,0.5)
title('Closed-loop response for worst-case parameter combinations')