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

Этот пример показов, как использовать 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 рад/с. The 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.855 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: Цифровой контроллер с узкополосным фильтром

Чтобы настроить эту измененную архитектуру управления, создайте 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 совместная настройка блоков «Gain», «Leadlag» и «Notch» с частотой среза цели 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 = 60

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

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

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

% 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. Сравните ответы MATLAB и Simulink:

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 рад/с. По умолчанию надрез дискретизируется с помощью метода 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 имеет значительное искажение, и вместо него следует использовать предварительно обработанный Tustin. Для этого задайте требуемый метод преобразования скорости для блока узкополосного фильтра:

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

writeBlockValue(ST2)

writeBlockValue теперь использует Tustin prewarped на частоте узких чисел, чтобы дискретизировать фильтр узких чисел и записать его обратно в 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 = 38

% 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

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

См. также

Похожие темы