Этот пример показывает основной рабочий процесс настраивающейся обратной связи с 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: типовая обратная связь
Для цикла регулировки скорости, объекта модель механизма и контроллер состоит из ПИДа и предварительного фильтра .
Рисунок 3: обратная связь для управления скоростью вращения двигателя
Использовать looptune
, создайте модели для и в рисунке 3. Присвойте имена к вводам и выводам каждой модели, чтобы задать пути к обратной связи между объектом и контроллером. Обратите внимание на то, что контроллер имеет два входных параметров: ссылка скорости "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)