Main Content

명령줄에서 PID 제어기 설계

이 예제에서는 다음의 식으로 주어진 플랜트에 대한 PID 제어기를 설계하는 방법을 보여줍니다.

sys=1(s+1)3.

첫 번째 단계로 플랜트 모델을 만들고 이 모델에 대한 간단한 PI 제어기를 설계합니다.

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는 PI 제어기를 나타내는 pid 제어기 객체입니다. info 필드는 조정 알고리즘이 약 0.52rad/s의 개루프 교차 주파수를 선택함을 보여줍니다.

제어되는 시스템의 폐루트 계단 응답(기준 추종)을 검토합니다.

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

Figure contains an axes object. The axes object 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 object. The axes object contains 2 objects of type line. These objects represent PI, PI,fast.

PI 제어기가 1.0rad/s의 교차 주파수에서 양호한 위상 여유에 도달하기에 충분한 자유도를 갖지 못하기 때문에 이와 같은 성능 저하가 발생합니다. 미분 동작을 추가하면 응답이 개선됩니다.

1.0rad/s의 목표 교차 주파수를 사용하여 Gc에 대한 PIDF 제어기를 설계합니다.

[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

info 필드는 제어기의 미분 동작을 통해 조정 알고리즘이 양호한 위상 여유로 목표 교차 주파수에 도달하는 더욱 공격적인 제어기를 설계할 수 있음을 보여줍니다.

빠른 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 object. The axes object 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 object. The axes object contains 2 objects of type line. These objects represent PI,fast, PIDF,fast.

이 플롯은 이번에도 역시 PIDF 제어기가 더 빠른 외란 제거 성능을 제공함을 보여줍니다.

참고 항목

|

관련 항목