looptune
Этот пример показывает основной рабочий процесс настраивающейся обратной связи с looptune
команда. looptune
похоже на systune
и предназначенный, чтобы упростить проект формирования цикла путем автоматической генерации настраивающихся требований.
Этот пример использует простое приложение управления скорости вращения двигателя как показано в следующем рисунке. Система управления состоит из одного цикла ПИДа, и усиления ПИД-регулятора должны быть настроены, чтобы соответственно ответить на ступенчатые изменения в желаемой скорости. А именно, вы хотите, чтобы ответ обосновался меньше чем через 5 секунд с минимальным перерегулированием.
Используйте следующую модель четвертого порядка динамики механизма.
load rctExamples Engine bode(Engine) grid
Необходимо настроить эти четыре коэффициента ПИД, чтобы достигнуть желаемой эффективности. Используйте tunablePID
объект параметрировать ПИД-регулятор.
PID0 = tunablePID('SpeedController','pid')
PID0 = Tunable 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, показанную в следующем рисунке. Эта обратная связь моделирует взаимодействие между объектом и контроллером. Обратите внимание на то, что это - соединение положительной обратной связи.
Для цикла регулировки скорости, объекта модель механизма и контроллер состоит из ПИД-регулятора и предварительного фильтра .
Использовать looptune
, создайте модели для и . Присвойте имена к вводам и выводам каждой модели, чтобы задать пути к обратной связи между объектом и контроллером. Обратите внимание на то, что контроллер имеет два входных параметров: ссылка скорости r
и измерение скорости speed
.
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.97, 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.00112, Ki = 0.00252, Kd = 0.000318, 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 function from r to speed clf step(T)