Настройка обратной связи с 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.965, Iterations = 5
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.00111, Ki = 0.00253, Kd = 0.000359, Tf = 1
 
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)

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

Похожие темы