Настройка цифровой системы управления движения

В этом примере показано, как использовать Control System Toolbox™, чтобы настроить цифровую систему управления движения.

Система управления движения

Систему движения на рассмотрении показывают ниже.

Рисунок 1: Цифровое оборудование управления движением

Это устройство могло быть частью некоторой производственной машины и предназначается, чтобы переместить некоторую загрузку (механизм захвата, инструмент, сопло или что-либо еще, что можно вообразить) от одного углового положения до другого и назад снова. Этой задачей является часть "производственного цикла", который должен быть завершен, чтобы создать каждый продукт или пакет продуктов.

Цифровой контроллер должен быть настроен, чтобы максимизировать производственную скорость машины, не ставя под угрозу точность и качество продуктов. Для этого мы сначала моделируем систему управления в Simulink с помощью модели 4-го порядка инерции и гибкого вала:

open_system('rct_dmc')

"Настраиваемый Цифровой Контроллер" состоит из усиления последовательно с контроллером вывода/задержки.

Рисунок 2: Цифровой контроллер

Настройка осложнена присутствием гибкого режима около 350 рад/с на объекте:

G = linearize('rct_dmc','rct_dmc/Plant Model');
bode(G,{10,1e4}), grid

Настройка компенсатора

Мы ищем 0,5 второго времени отклика на команду шага в угловом положении с минимальным перерегулированием. Это соответствует целевой пропускной способности приблизительно 5 рад/с. looptune команда предлагает удобный способ настроить компенсаторы фиксированной структуры как тот в этом приложении. Использовать looptune, сначала инстанцируйте slTuner взаимодействуйте через интерфейс, чтобы автоматически получить управляющую структуру от Simulink. Обратите внимание на то, что сигналы интереса уже отмечены как Линейные Аналитические Точки в модели Simulink.

ST0 = slTuner('rct_dmc',{'Gain','Leadlag'});

Затем используйте looptune настроить параметры компенсатора для целевой частоты среза усиления 5 рад/с:

Measurement = 'Measured Position';  % controller input
Control = 'Leadlag';                % controller output
ST1 = looptune(ST0,Control,Measurement,5);
Final: Peak gain = 0.979, Iterations = 19
Achieved target gain value TargetGain=1.

Окончательное значение ниже или около 1 указывает на успех. Смотрите настроенные значения фильтра вывода/задержки и усиления:

showTunable(ST1)
Block 1: rct_dmc/Tunable Digital Controller/Gain =
 
  D = 
              u1
   y1  1.869e-05
 
Name: Gain
Static gain.

-----------------------------------

Block 2: rct_dmc/Tunable Digital Controller/Leadlag =
 
  3.856 s + 6.322
  ---------------
     s + 13.35
 
Name: Leadlag
Continuous-time transfer function.

Спроектируйте валидацию

Чтобы подтвердить проект, используйте slTuner взаимодействуйте через интерфейс, чтобы быстро получить доступ к передаточным функциям с обратной связью интереса и сравнить ответы до и после настройки.

T0 = getIOTransfer(ST0,'Reference','Measured Position');
T1 = getIOTransfer(ST1,'Reference','Measured Position');
step(T0,T1), grid
legend('Original','Tuned')

Настроенный ответ имеет значительно меньше перерегулирования и удовлетворяет требованию времени отклика. Однако эти симуляции получены с помощью компенсатора вывода/задержки непрерывного времени (looptune действует в непрерывное время), таким образом, мы должны далее подтвердить проект в Simulink с помощью цифровой реализации компенсатора вывода/задержки. Используйте writeBlockValue применять настроенные значения к модели Simulink и автоматически дискретизировать компенсатор вывода/задержки к уровню, заданному в Simulink.

writeBlockValue(ST1)

Можно теперь симулировать ответ объекта непрерывного времени с цифровым контроллером:

sim('rct_dmc');  % angular position logged in "yout" variable
t = yout.time;
y = yout.signals.values;
step(T1), hold, plot(t,y,'r--')
legend('Continuous','Hybrid (Simulink)')
Current plot held

Симуляции тесно соответствуют, и коэффициенты цифрового вывода/задержки могут быть считаны из блока "Leadlag" в Simulink.

Настройка дополнительного фильтра метки

Затем попытайтесь увеличить пропускную способность управления с 5 до 50 рад/с. Из-за резонанса объекта около 350 рад/с компенсатор вывода/задержки более не достаточен, чтобы получить соответствующие запасы устойчивости и маленькое перерегулирование. Одно средство должно добавить фильтр метки как показано в рисунке 3.

Рисунок 3: цифровой контроллер с фильтром метки

Чтобы настроить эту модифицированную архитектуру управления, создайте slTuner экземпляр с тремя настраиваемыми блоками.

ST0 = slTuner('rct_dmcNotch',{'Gain','Leadlag','Notch'});

По умолчанию блок "Notch" параметрируется как любая передаточная функция второго порядка. Сохранить структуру метки

$$N(s) = {s^2 + 2 \zeta_1 \omega_n s + \omega_n^2 \over s^2 + 2 \zeta_2 \omega_n s + \omega_n^2} , $$

задайте коэффициенты$\omega_n, \zeta_1, \zeta_2$ как действительные параметры и создайте параметрическую модель N из передаточной функции, показанной выше:

wn = realp('wn',300);
zeta1 = realp('zeta1',1);
zeta2 = realp('zeta2',1);
zeta1.Minimum = 0;   zeta1.Maximum = 1;   % 0 <= zeta1 <= 1
zeta2.Minimum = 0;   zeta2.Maximum = 1;   % 0 <= zeta2 <= 1
N = tf([1 2*zeta1*wn wn^2],[1 2*zeta2*wn wn^2]);  % tunable notch filter

Затем сопоставьте эту параметрическую модель метки с блоком "Notch" в модели Simulink. Поскольку система управления настраивается в непрерывное время, можно использовать параметризацию непрерывного времени фильтра метки даже при том, что сам блок "Notch" дискретен.

setBlockParam(ST0,'Notch',N);

Затем используйте looptune совместно настроить "Усиление", "Leadlag" и "Метку" блокируется с целевой частотой среза на 50 рад/с. Чтобы устранить остаточные колебания из резонанса объекта, задайте целевую форму цикла со спадом на-40 дБ/десятилетие прошлые 50 рад/с.

% Specify target loop shape with a few frequency points
Freqs = [5 50 500];
Gains = [10 1 0.01];
TLS = TuningGoal.LoopShape('Notch',frd(Gains,Freqs));

Measurement = 'Measured Position';  % controller input
Control = 'Notch';                  % controller output
ST2 = looptune(ST0,Control,Measurement,TLS);
Final: Peak gain = 1.05, Iterations = 61

Итоговое усиление близко к 1, указывая, что все требования удовлетворяются. Сравните переходной процесс с обратной связью с предыдущими проектами.

T2 = getIOTransfer(ST2,'Reference','Measured Position');
clf
step(T0,T1,T2,1.5), grid
legend('Original','Lead/lag','Lead/lag + notch')

Чтобы проверить, что фильтр метки выполняет как ожидалось, оцените общий компенсатор C и ответ разомкнутого цикла L и сравните Предвещать ответы GCL:

% Get tuned block values (in the order blocks are listed in ST2.TunedBlocks)
[g,LL,N] = getBlockValue(ST2,'Gain','Leadlag','Notch');
C = N * LL * g;

L = getLoopTransfer(ST2,'Notch',-1);

bode(G,C,L,{1e1,1e3}), grid
legend('G','C','L')

Эта Диаграмма Боде подтверждает, что резонанс объекта был правильно "отмечен".

Дискретизация фильтра метки

Снова используйте writeBlockValue дискретизировать настроенный вывод/задержку и фильтры метки и записывать их значения обратно к Simulink. Сравните ответы Simulink и MATLAB:

writeBlockValue(ST2)

sim('rct_dmcNotch');
t = yout.time;
y = yout.signals.values;
step(T2), hold, plot(t,y,'r--')
legend('Continuous','Hybrid (Simulink)')
Current plot held

Ответ Simulink показывает маленькие остаточные колебания. Дискретизация фильтра метки является вероятным преступником, потому что частотой метки является близко к частоте Найквиста pi/0.002=1570 rad/s. По умолчанию метка дискретизируется с помощью метода ZOH. Сравните это с методом Тастина, предварительно деформированным на частоте метки:

wn = damp(N);  % natural frequency of the notch filter
Ts = 0.002;    % sample time of discrete notch filter

Nd1 = c2d(N,Ts,'zoh');
Nd2 = c2d(N,Ts,'tustin',c2dOptions('PrewarpFrequency',wn(1)));

clf, bode(N,Nd1,Nd2)
legend('Continuous','Discretized with ZOH','Discretized with Tustin',...
    'Location','NorthWest')

Метод ZOH имеет значительное искажение и предварительно деформировался, Тастин должен использоваться вместо этого. Для этого задайте желаемый метод преобразования уровня для блока фильтра метки:

setBlockRateConversion(ST2,'Notch','tustin',wn(1))

writeBlockValue(ST2)

writeBlockValue теперь использование Тастин, предварительно деформированный на частоте метки, чтобы дискретизировать фильтр метки и записать его обратно к Simulink. Проверьте, что это избавляется от колебаний.

sim('rct_dmcNotch');
t = yout.time;
y = yout.signals.values;
step(T2), hold, plot(t,y,'r--')
legend('Continuous','Hybrid (Simulink)')
Current plot held

Прямое дискретное время, настраиваясь

В качестве альтернативы можно настроить контроллер непосредственно в дискретное время, чтобы избежать проблем дискретизации с фильтром метки. Для этого укажите, что модель Simulink должна линеаризоваться и настраиваться в шаге расчета контроллера 0,002 секунд:

ST0 = slTuner('rct_dmcNotch',{'Gain','Leadlag','Notch'});
ST0.Ts = 0.002;

Чтобы предотвратить управление высокого усиления и насыщение, добавьте требование, которое ограничивает усиление от ссылки до управляющего сигнала (выход блока Notch).

GL = TuningGoal.Gain('Reference','Notch',0.01);

Теперь повторно настройте контроллер на заданном уровне выборки и проверьте настроенное открытое - и ответы с обратной связью.

ST2 = looptune(ST0,Control,Measurement,TLS,GL);

% Closed-loop responses
T2 = getIOTransfer(ST2,'Reference','Measured Position');
clf
step(T0,T1,T2,1.5), grid
legend('Original','Lead/lag','Lead/lag + notch')
Final: Peak gain = 1.04, Iterations = 45

% Open-loop responses
[g,LL,N] = getBlockValue(ST2,'Gain','Leadlag','Notch');
C = N * LL * g;
L = getLoopTransfer(ST2,'Notch',-1);
bode(G,C,L,{1e1,2e3}), grid
legend('G','C','L')

Результаты похожи на полученных при настройке контроллера в непрерывное время. Теперь подтвердите цифровой контроллер против объекта непрерывного времени в Simulink.

writeBlockValue(ST2)

sim('rct_dmcNotch');
t = yout.time;
y = yout.signals.values;
step(T2), hold, plot(t,y,'r--')
legend('Discrete','Hybrid (Simulink)')
Current plot held

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

Смотрите также

Похожие темы