Настройка обратной связи с LOOPTUNE

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

Управление скоростью вращения двигателя

Этот пример использует простое приложение управления скорости вращения двигателя в качестве рисунка. Система управления состоит из одного цикла ПИДа, и усиления ПИД-регулятора должны быть настроены, чтобы соответственно ответить на ступенчатые изменения в желаемой скорости. А именно, мы хотим, чтобы ответ обосновался меньше чем через 5 секунд с минимальным перерегулированием.

Рисунок 1: цикл управления скорости вращения двигателя

Мы используем следующую модель четвертого порядка динамики механизма.

load rctExamples Engine
bode(Engine), grid

Указывание настраиваемых элементов

Мы должны настроить эти четыре коэффициента ПИД, чтобы достигнуть желаемой производительности. Используйте класс tunablePID, чтобы параметризовать ПИД-регулятор.

PID0 = tunablePID('SpeedController','pid')
PID0 = 
  Parametric continuous-time PID controller "SpeedController" with formula:

             1            s    
  Kp + Ki * --- + Kd * --------
             s          Tf*s+1 

  and tunable parameters Kp, Ki, Kd, Tf.

Type "pid(PID0)" to see the current value and "get(PID0)" to see all properties.

Создавание настраиваемой модели обратной связи

looptune настраивает типичный SISO или обратную связь MIMO рисунка 2. Эта обратная связь моделирует взаимодействие между объектом и контроллером. Обратите внимание на то, что это - соединение позитивных откликов.

Рисунок 2: типичная обратная связь

Для цикла регулировки скорости, объекта G модель механизма и контроллер C состоит из ПИДа и предварительного фильтра F.

Рисунок 3: обратная связь для управления скоростью вращения двигателя

Чтобы использовать looptune, создайте модели для G и C в рисунке 3. Присвойте имена к вводам и выводам каждой модели, чтобы задать пути к обратной связи между объектом и контроллером. Обратите внимание на то, что контроллер C имеет два входных параметров: ссылка скорости "r" и измерение скорости "скорость".

F = tf(10,[1 10]);  % prefilter

G = Engine;
G.InputName = 'throttle';
G.OutputName = 'speed';

C0 = PID0 * [F , -1];
C0.InputName = {'r','speed'};
C0.OutputName = 'throttle';

Здесь C0 является обобщенной моделью в пространстве состояний (genss), который зависит от настраиваемого блока PID PID0.

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

Можно теперь использовать looptune, чтобы настроить коэффициенты ПИД, подвергающиеся простому требованию пропускной способности управления. Чтобы достигнуть 5-секундного времени установления, частота перекрестного соединения усиления ответа разомкнутого цикла должна составить приблизительно 1 рад/с. Учитывая это основное требование, looptune автоматически формирует ответ разомкнутого цикла, чтобы обеспечить интегральное действие, высокочастотный спад и соответствующие запасы устойчивости. Обратите внимание на то, что вы могли задать дополнительные требования, чтобы далее ограничить проект, видеть "Разъединяющийся Контроллер для Столбца Дистилляции" для примера.

wc = 1;  % target gain crossover frequency 

[~,C,~,Info] = looptune(G,C0,wc);
Final: Peak gain = 0.999, Iterations = 6
Achieved target gain value TargetGain=1.

Окончательное значение - меньше чем 1, указывая, что желаемая пропускная способность была достигнута с соответствующим спадом и запасами устойчивости. looptune возвращает настроенный контроллер C. Используйте getBlockValue, чтобы получить настроенное значение блока PID.

PIDT = getBlockValue(C,'SpeedController')
PIDT =
 
             1            s    
  Kp + Ki * --- + Kd * --------
             s          Tf*s+1 

  with Kp = 0.000638, Ki = 0.00254, Kd = -0.000271, Tf = 0.999
 
Name: SpeedController
Continuous-time PIDF controller in parallel form.

Проверка результатов

Используйте loopview, чтобы подтвердить проект и визуализировать требования формирования цикла, неявно осуществленные looptune.

clf, loopview(G,C,Info)

Затем постройте ответ с обратной связью на команду шага в скорости вращения двигателя. Настроенный ответ удовлетворяет наши требования.

T = connect(G,C,'r','speed');  % closed-loop transfer from r to speed
clf, step(T)

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

Похожие темы