Этот пример показывает основной рабочий процесс настраивающейся обратной связи с командой 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.999, Iterations = 6 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.000638, Ki = 0.00254, Kd = -0.000271, Tf = 0.999 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)