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

Фигура 1: Цикл управления скоростью вращения двигателя
Мы используем следующую модель динамики двигателя четвертого порядка.
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, показанный на фиг.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), что зависит от настраиваемого блока ПИД PID0.
Теперь можно использовать looptune для настройки коэффициентов ПИД при соблюдении простого требования к полосе пропускания управления. Чтобы достичь 5-секундного времени урегулирования, частота среза усиления разомкнутого контура отклика должен быть приблизительно 1 рад/с. Учитывая это основное требование, looptune автоматически формирует ответ разомкнутого контура, чтобы обеспечить интегральное действие, высокочастотный откат и адекватные запасы устойчивости. Обратите внимание, что для дальнейшего ограничения проекта можно задать дополнительные требования, см., например, «Decoupling Контроллера for a Distillation Столбца».
wc = 1; % target gain crossover frequency
[~,C,~,Info] = looptune(G,C0,wc);Final: Peak gain = 0.928, Iterations = 7 Achieved target gain value TargetGain=1.
Окончательное значение меньше 1, что указывает на то, что требуемая полоса пропускания была достигнута с адекватными запасами по откату и устойчивости. looptune возвращает настроенный контроллер C. Использование getBlockValue для извлечения настроенного значения блока ПИД.
PIDT = getBlockValue(C,'SpeedController')PIDT =
1 s
Kp + Ki * --- + Kd * --------
s Tf*s+1
with Kp = 0.000855, Ki = 0.00269, Kd = -7.83e-05, Tf = 0.877
Name: SpeedController
Continuous-time PIDF controller in parallel form.
Использование loopview для проверки проекта и визуализации требований к формированию цикла, неявно соблюдаемых looptune.
clf, loopview(G,C,Info)

Затем постройте график обратной связи с командой step по скорости вращения двигателя. Настроенный ответ удовлетворяет нашим требованиям.
T = connect(G,C,'r','speed'); % closed-loop transfer from r to speed clf, step(T)
