ПИД-регулятор, Проект в командной строке

Этот пример показов, как спроектировать ПИД-регулятор для объекта, заданный:

sys=1(s+1)3.

В качестве первого прохода создайте модель завода и разработайте для нее простое ПИ-контроллер.

sys = zpk([],[-1 -1 -1],1); 
[C_pi,info] = pidtune(sys,'PI')
C_pi =
 
             1 
  Kp + Ki * ---
             s 

  with Kp = 1.14, Ki = 0.454
 
Continuous-time PI controller in parallel form.
info = struct with fields:
                Stable: 1
    CrossoverFrequency: 0.5205
           PhaseMargin: 60.0000

C_pi является pid объект контроллера, который представляет ПИ-контроллеру. Поля info показать, что алгоритм настройки выбирает частоту среза без разомкнутого контура около 0,52 рад/с.

Осмотрите систему с обратной связью переходной характеристики (отслеживания уставки).

T_pi = feedback(C_pi*sys, 1);
step(T_pi)

Figure contains an axes. The axes contains an object of type line. This object represents T\_pi.

Чтобы улучшить время отклика, можно задать более высокую целевую частоту среза, чем результат, который pidtune автоматически выбирает, 0.52. Увеличьте частоту среза до 1,0.

[C_pi_fast,info] = pidtune(sys,'PI',1.0)
C_pi_fast =
 
             1 
  Kp + Ki * ---
             s 

  with Kp = 2.83, Ki = 0.0495
 
Continuous-time PI controller in parallel form.
info = struct with fields:
                Stable: 1
    CrossoverFrequency: 1
           PhaseMargin: 43.9973

Новый контроллер достигает более высокой частоты среза, но за счет уменьшенного запаса по фазе.

Сравните переходную характеристику с обратной связью с двумя контроллерами.

T_pi_fast = feedback(C_pi_fast*sys,1);
step(T_pi,T_pi_fast)
axis([0 30 0 1.4])
legend('PI','PI,fast')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent PI, PI,fast.

Это сокращение эффективности результатов потому что ПИ-контроллера не имеет достаточной степени свободы, чтобы достичь хорошего запаса фазы на частоту среза 1,0 рад/с. Добавление производного действия улучшает ответ.

Проектируйте контроллер PIDF для Gc с целевой частотой среза 1,0 рад/с.

[C_pidf_fast,info] = pidtune(sys,'PIDF',1.0)
C_pidf_fast =
 
             1            s    
  Kp + Ki * --- + Kd * --------
             s          Tf*s+1 

  with Kp = 2.72, Ki = 0.985, Kd = 1.72, Tf = 0.00875
 
Continuous-time PIDF controller in parallel form.
info = struct with fields:
                Stable: 1
    CrossoverFrequency: 1
           PhaseMargin: 60.0000

Поля информации показывают, что производное действие в контроллере позволяет алгоритму настройки спроектировать более агрессивный контроллер, который достигает целевой частоты среза с хорошим запасом по фазе.

Сравните переходную характеристику и подавление помех с обратной связью для быстрых PI и PIDF контроллеров.

T_pidf_fast =  feedback(C_pidf_fast*sys,1);
step(T_pi_fast, T_pidf_fast);
axis([0 30 0 1.4]);
legend('PI,fast','PIDF,fast');

Figure contains an axes. The axes contains 2 objects of type line. These objects represent PI,fast, PIDF,fast.

Можно сравнить вход (загрузку) подавления помех управляемой системы с быстрыми контроллерами PI и PIDF. Для этого постройте график отклика передаточной функции с обратной связью от входов объекта управления к выходам объекта управления.

S_pi_fast = feedback(sys,C_pi_fast);
S_pidf_fast = feedback(sys,C_pidf_fast);
step(S_pi_fast,S_pidf_fast);
axis([0 50 0 0.4]);
legend('PI,fast','PIDF,fast');

Figure contains an axes. The axes contains 2 objects of type line. These objects represent PI,fast, PIDF,fast.

Этот график показывает, что контроллер PIDF также обеспечивает более быстрое подавление помех.

См. также

|

Похожие темы