Этот пример показывает базовый рабочий процесс настройки циклов обратной связи с 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)