본문 바로가기
자동제어/Simulink

Simulink 기초 (6) 폐루프 제어, Closed loop system : 1.P제어

by Mene 2023. 3. 26.
반응형

이번엔 폐루프 제어에 대해 알아보자.

폐루프 제어란 시스템에 피드백을 추가하여 출력을 다시 입력으로 가져와 오차를 계산하고 이를 다시 입력으로 사용하여 시스템의 응답을 개선하는 제어 방법이다.

 

 

 

폐루프 시스템의 블록선도는 다음과 같다.

- 제어기 : 오차를 입력으로 받아 일정한 비율이나 적분, 미분값을 이용하여 제어신호로 변환한다.

- 공정(=플랜트) : 제어하고자 하는 시스템을 말한다. 즉, 동작에 영향을 주고자 하는 시스템으로 힘이나 전류 등의 입력으로 물체의 변위나, 모터의 회전각의 출력을 제어한다.

- 센서 : 출력을 감지해 입력과 같은 신호로 변환하는 장치이다. 예를들어 회전각을 입력으로 받고 싶으면 회전각을 측정하는 센서를 사용한다.

 

 

 

** P 제어를 하기전에 PID 제어기에 대해 간단히 설명해보자면 PID 제어기는 다음과 같은 형태를 가진다.

여기서 상수 \(k_{P}\), \(k_{I}\), \(k_{D}\)는 각각 비례게인, 적분게인, 미분게인이라 하며 비례게인만 가지고 있으면 P제어기, 비례게인과 적분게인을 가지고 있으면 PI 제어기, 세개 다 가지고 있으면 PID 제어기라 한다.

 

제어기의 첫번째 항은 들어오는 오차 신호를 \(k_{P}\)만큼 증폭시키거나 감소시켜 플랜트(공정)에 보냄으로써 시스템을 제어한다.

두번째 항은 1/s의 역라플라스변환이 적분이므로 들어오는 오차신호를 적분하여 플랜트(공정)에 보냄으로써 시스템을 제어한다.

세번쨰 항은 s의 역라플라스 변환이 미분이므로 들어오는 오차신호의 기울기를 플랜트(공정)에 보냄으로써 시스템을 제어한다.

 

따라서 P제어기는 오차신호를 상수 곱을하여 플랜트로 보내기때문에 먼저 gain 블록을 사용하여 제어기를 만들어 보고 PID 제어기 블록을 이용해서도 만들어 볼 것이다. 

 

 

 

 

앞에서 이야기한 진동-감쇠 시스템에 대해 폐루프 시스템을 만들어보자.

 

(5)에서 했던 시스템을 정리하면 다음과 같다.


자유물체도 :

 

미분방정식 : 

\[m \ddot{x}+b\dot{x}+kx=f(t)\]

\(m=10kg, b=5N\cdot s/m, k=20N/m\), 초기조건 : \(x(0)=0m, \dot{x}(0)=0m/s\)

 

전달함수 : 

\[\frac{X(s)}{F(s)}=\frac{1}{ms^2+bs+k}\]


 

먼저 Simulink에서 각 상수를 정의하는 코드를 작성한다.

 

 

 

Simulink를 열고 Plant를 만들어보자. 여기서 Plant는 진동-감쇠 시스템을 말하므로 Transfer Fcn 블록으로 만들 수 있다. 이때 Transfer Fcn 블록의 입력 신호는 힘이고 출력신호는 변위 x이다.

 

 

 

 

우리가 원하는 출력은 변위 x 이므로 기준입력은 변위에 대한 값이 될 것이고 제어기를 통과하여 힘에 대한 신호로 바뀐다. 먼저 제어기를 gain이 1인 gain 블록으로 만들고, 입력신호를 최종값이 1인 step 블록으로 만들어보자.

 

 

 

 

피드백을 추가하기위해 기준입력과 Controller 사이에 Sum 블록을 만들어보자. 앞에서 본 블록선도를 보면알 수 있듯이 +-포트가 생겨야 하므로 Sum 블록의 부호목록을 |+-로 작성한다.

 

 

 

 

이제 출력신호를 받아 피드백을 만든다. 이때 피드백 게인은 1이라 생각하자.

피드백 신호를 만들땐 Ctrl 키를 누른채로 x 신호의 중간을 누르고 드래그하면 신호를 끌어낼 수 있다.

 

 

 

이제 출력을 확인하기 위해 Scope 블록을 만들고 x와 연결한다.

PID 제어에서는 출력이 기준입력을 얼마나 잘 따라가는지 확인하기 위해 Scope 블록에 기준입력신호도 연결한다. 이는 기준입력에서 신호를 끌어내 Scope 블록에 갖다대면 자동으로 포트가 생기면서 연결된다.

 

 

 

중지시간을 20초, 고정스텝, 솔버 ode4, 고정 스텝크기 0.001로 설정하고 결과를 출력하면 다음과 같다.

이 결과를 보면 입력을 전혀 따라가지 못한다. 그럼 제어기의 gain을 늘리면 어떻게 될까? 

이를 확인하기 위해 제어기의 게인을 다르게 하면서 출력을 비교해보자.

 

 

 

한번에 여러개의 출력을 보기위해 기준입력 블록과 Scope 블록을 제외하고 복사하여 4개의 시스템을 만들고, 기준입력신호를 연결한다. 그리고 gain 블록의 이득값을 각각 1, 10, 100, 1000으로 설정한다.

 

 

 

출력 신호의 이름을 각각 x1, x2, x3, x4 로 설정하고 Scope 블록에 연결한다.

 

 

 

다시 Scope를 열고 실행하면 다음의 결과를 얻을 수 있다. 이때 보기-범례를 선택하면 각각의 출력의 범례가 나타난다.

결과를 보면 제어기의 gain이 증가할수록

 - 오버슈트가 증가하고

 - 정상상태 오차가 감소하고

 - 진동이 증가하는

것을 알 수있다.

 

P 제어는 PID 제어기 블록을 이용해서 구현이 가능하며, 라이브러리 - Continous - PID controller 블록을 사용해서 같은 결과를 얻을 수 있다.

 

 

 

비례게인이 1000일 때 PID 제어기 블록을 사용해서 출력을 구해보자.

 

먼저 gain 블록을 제거하고 PID controller 블록을 놓는다.

 

 

 

PID 블록을 더블클릭하여 제어기를 P로 변경하고 비례 게인(P)를 1000으로 변경한다.

 

 

 

Scope를 실행하면 다음과 같은 그래프가 나온다.

 

이는 앞에서 gain을 1000으로한 결과와 동일하다.

앞으로는 PID controller 블록을 이용하여 제어기를 설계할 것이다.

반응형

댓글