Main Content

선형(LTI) 모델

플랜트란?

일반적으로 제어 엔지니어는 제어하고자 하는 동적 시스템의 수학적 설명을 발전시키는 것에서 시작합니다. 제어하려는 시스템을 플랜트라고 합니다. 이 섹션에서는 플랜트의 한 예로 DC 모터를 사용합니다. 이 섹션에서는 관성 부하를 갖는 DC 모터의 전기기계적 속성을 설명하는 미분 방정식을 도출합니다. 그런 다음 Control System Toolbox™ 함수를 사용하여 이러한 방정식을 바탕으로 선형 모델을 작성하는 방법을 보여줍니다.

선형 모델 표현

Control System Toolbox 함수를 사용하여 다음과 같은 모델 표현을 만들 수 있습니다.

  • 다음과 같은 형식의 상태공간 모델(SS)

    dxdt=Ax+Buy=Cx+Du

    여기서 A, B, C, D 는 적절한 차원의 행렬이고, x는 상태 벡터이고, u와 y는 입력 벡터와 출력 벡터입니다.

  • 전달 함수(TF). 예:

    H(s)=s+2s2+s+10

  • 영점-극점-이득(ZPK) 모델. 예:

    H(z)=3(z+1+j)(z+1j)(z+0.2)(z+0.1)

  • 시스템의 주파수 응답의 샘플링된 측정값으로 구성된 주파수 응답 데이터(FRD) 모델. 예를 들어, 실험을 통해 수집한 주파수 응답 데이터를 FRD 모델에 저장할 수 있습니다.

    참고

    FRD 모델의 설계는 이 항목에서 다루지 않는 특화된 주제입니다. 이 항목에 대한 논의는 Frequency Response Data (FRD) Models 항목을 참조하십시오.

SISO 예제: DC 모터

아래의 관성 부하를 구동하는 DC 모터의 단순한 모델은 부하의 각속도 ω(t)를 출력으로, 공급 전압 υapp(t)를 입력으로 나타냅니다. 이 예제의 최종 목표는 공급 전압을 달리하여 각속도를 제어하는 것입니다. 다음 그림은 DC 모터의 단순한 모델을 보여줍니다.

관성 부하를 구동하는 DC 모터의 단순한 모델

이 모델에서는 자기장이 상수라고 가정되는 등 모터 자체의 동특성이 이상화되어 있습니다. 회로의 저항은 R로, 전기자의 자기 인덕턴스는 L로 나타냅니다. DC 모터 모델링의 기초 지식이 약한 경우 물리 모델링에 관한 기본 교재를 참조하십시오. 이 단순한 모델과 물리학의 기본 법칙을 바탕으로 이 전기기계 시스템의 동작을 설명하는 미분 방정식을 도출할 수 있습니다. 이 예제에서 전위와 기계적 힘 사이의 관계는 자기장을 통과하는 전도체에 가해지는 힘에 대한 패러데이 전자기 유도 법칙 및 앙페르 법칙으로 설명됩니다.

수학적 도출

모터 축에서의 토크 τ는 공급된 전압에 의해 유도된 전류 i에 비례합니다.

τ(t)=Kmi(t)

여기서 전기자 상수 Km은 자기장 강도, 전도체 코일에 전선이 감긴 횟수 등과 같은 모터의 물리적 속성과 관계가 있습니다. 역기전력(유도기전력) υemf는 축에서의 각속도 ω에 비례하는 전압입니다.

υemf(t)=Kbω(t)

여기서 기전력 상수 Kb도 모터의 특정 물리적 속성에 따라 달라집니다.

모터 방정식의 기계적 부분은 관성 부하 J에 각속도의 도함수를 곱하면 모터 축 주위의 모든 토크의 합과 동일하다는 뉴턴의 법칙을 사용하여 도출됩니다. 결과는 다음 방정식입니다.

Jdwdt=τi=Kfω(t)+Kmi(t)

여기서 Kfω는 점성 마찰의 선형 근삿값입니다.

마지막으로, 모터 방정식의 전기적 부분은 다음 방정식으로 설명할 수 있습니다.

υapp(t)υemf(t)=Ldidt+Ri(t)

또는 공급된 전압에 대한 해를 구하고 역기전력에 대입하여 설명할 수 있습니다.

υapp(t)=Ldidt+Ri(t)+Kbω(t)

이와 같은 일련의 방정식을 통해 모터의 동작을 설명하는 두 개의 미분 방정식이 도출됩니다. 첫 번째는 유도 전류에 대한 방정식이고

didt=RLi(t)KbLω(t)+1Lυapp(t)

두 번째 방정식은 결과로 나오는 각속도에 대한 방정식입니다.

dωdt=1JKfω(t)+1JKmi(t)

DC 모터에 대한 상태공간 방정식

직전 섹션에서 도출한 2개의 미분 방정식을 바탕으로 이제 DC 모터의 상태공간 표현을 동적 시스템으로 개발할 수 있습니다. 전류 i 와 각속도 ω는 시스템의 두 가지 상태입니다. 공급 전압 υapp는 시스템의 입력이고 각속도 ω는 출력입니다.

ddt[iω]=[RLKbLKmJKfJ][iω]+[1L0]υapp(t)

DC 모터 예제의 상태공간 표현

y(t)=[01][iω]+[0]υapp(t)

SISO 모델 작성하기

플랜트를 설명하는 일련의 미분 방정식을 도출한 후에는 간단한 명령을 사용하여 SISO 모델을 생성할 수 있습니다. 이어지는 섹션에서는 다음의 주제에 대해 다룹니다.

  • DC 모터의 상태공간 모델 생성하기

  • 모델 표현 간에 변환하기

  • 전달 함수 및 영점/극점/이득 모델 만들기

DC 모터의 상태공간 모델 생성하기

DC 모터의 여러 파라미터에 대해 다음과 같은 공칭 값을 입력하십시오.

R= 2.0 % Ohms
L= 0.5 % Henrys
Km = .015 % torque constant
Kb = .015 % emf constant
Kf = 0.2 % Nms
J= 0.02 % kg.m^2

이러한 값을 바탕으로 ss 함수를 사용하여 수치적 상태공간 표현을 생성할 수 있습니다.

A = [-R/L -Kb/L; Km/J -Kf/J]
B = [1/L; 0];
C = [0 1];
D = [0];
sys_dc = ss(A,B,C,D)

이들 명령은 다음 결과를 반환합니다.

a = 
                        x1           x2
           x1           -4        -0.03
           x2         0.75          -10
 
 
b = 
                        u1
           x1            2
           x2            0
 
 
c = 
                        x1           x2
           y1            0            1
 
 
d = 
                        u1
           y1            0

모델 표현 간에 변환하기

DC 모터의 상태공간 표현을 도출했으니 이제 이를 전달 함수(TF), 영점/극점/이득(ZPK) 모델을 비롯한 여타 모델 표현으로 변환할 수 있습니다.

전달 함수 표현.  tf를 사용하여 상태공간 표현을 전달 함수로 변환할 수 있습니다. 예를 들어, 다음 코드를 사용하여 DC 모터의 전달 함수 표현으로 변환할 수 있습니다.

sys_tf = tf(sys_dc)
Transfer function:
       1.5
------------------
s^2 + 14 s + 40.02

영점/극점/이득 표현.  마찬가지로, zpk 함수는 상태공간 또는 전달 함수 표현을 영점/극점/이득 형식으로 변환합니다. 다음 코드를 사용하여 DC 모터의 상태공간 표현을 영점/극점/이득 형식으로 변환할 수 있습니다.

sys_zpk = zpk(sys_dc)
 
Zero/pole/gain:
        1.5
-------------------
(s+4.004) (s+9.996)

참고

상태공간 표현은 수치 계산에 가장 적합합니다. 최고의 정확도를 위해서는 모델을 결합하기 전에 상태공간 표현으로 변환하고, 모델 사양 및 검사를 위한 경우를 제외하고는 전달 함수 표현과 영점/극점/이득 표현을 피하십시오.

전달 함수 모델 및 영점/극점/이득 모델 생성하기

DC 모터 예제에서 상태공간 접근 방식은 모델을 나타내는 일련의 행렬을 생성합니다. 다른 접근 방식을 선택할 경우 tf, zpk, ss 또는 frd를 사용하여 그에 대응되는 모델을 생성할 수 있습니다.

sys = tf(num,den)               % Transfer function
sys = zpk(z,p,k)                % Zero/pole/gain
sys = ss(a,b,c,d)               % State-space
sys = frd(response,frequencies) % Frequency response data

예를 들어, 다음 코드로 분자와 분모를 지정하여 전달 함수를 만들 수 있습니다.

sys_tf = tf(1.5,[1 14 40.02])
 
Transfer function:
       1.5
------------------
s^2 + 14 s + 40.02

DC 모터의 전달 함수를 직접 만들고 싶다면 다음 명령을 사용하십시오.

s = tf('s');
sys_tf = 1.5/(s^2+14*s+40.02)

위 명령을 실행하면 다음 전달 함수가 생성됩니다.

Transfer function:
        1.5
--------------------
s^2 + 14 s + 40.02

영점/극점/이득 모델을 작성하려면 다음 명령을 사용하십시오.

sys_zpk = zpk([],[-9.996 -4.004], 1.5)

이 명령은 다음과 같은 영점/극점/이득 표현을 반환합니다.

Zero/pole/gain:
        1.5
-------------------
(s+9.996) (s+4.004)

이산시간 시스템 생성하기

Control System Toolbox는 이산시간 시스템을 완벽하게 지원합니다. 이산시간 시스템은 아날로그 시스템을 만드는 것과 같은 방식으로 만들 수 있으며, 유일한 차이점은 작성하려는 모델에 대해 샘플 시간 주기를 지정해야 한다는 것입니다. 예를 들어, 다음은

sys_disc = tf(1, [1 1], .01);

전달 함수 형식으로 SISO 모델을 만듭니다.

Transfer function:
  1
-----
z + 1
 
Sample time: 0.01

이산시간 모델에 시간 지연 추가하기

이산시간 모델을 작성할 때 입력 지연, 출력 지연 또는 I/O 지연을 지정하여 모델에 시간 지연을 추가할 수 있습니다. 시간 지연은 샘플 시간의 배수를 나타내는 음이 아닌 정수여야 합니다. 예를 들어, 다음은

sys_delay = tf(1, [1 1], 0.01,'ioDelay',5)

5초의 I/O 지연을 갖는 시스템을 반환합니다.

Transfer function:
           1
z^(-5) * -----
         z + 1
 
Sample time: 0.01

선형 모델에 지연 추가하기

선형 모델을 작성할 때 입력 지연, 출력 지연 또는 I/O 지연을 지정하여 모델에 시간 지연을 추가할 수 있습니다. 예를 들어, DC 모터에 I/O 지연을 추가하려면 다음 코드를 사용하십시오.

sys_tfdelay = tf(1.5,[1 14 40.02],'ioDelay',0.05)

이 명령은 DC 모터 전달 함수를 생성하되, 0.05초의 지연을 추가합니다.

Transfer function:
                      1.5
exp(-0.05*s) * ------------------
               s^2 + 14 s + 40.02

모델에 시간 지연을 추가하는 방법에 대한 자세한 내용은 Time Delays in Linear Systems 항목을 참조하십시오.

LTI 객체

편의를 위해, Control System Toolbox는 LTI 객체라는 사용자 지정 데이터 구조를 사용하여 모델 관련 데이터를 저장합니다. 예를 들어, DC 모터 예제를 위해 만든 변수 sys_dc SS 객체라고 합니다. 전달 함수, 영점/극점/이득, 주파수 데이터 응답 모델에 대한 TF 객체, ZPK 객체, FRD 객체도 있습니다. 이러한 4가지 LTI 객체는 모델 데이터를 캡슐화하며, 선형 시스템을 벡터 또는 행렬의 모음이 아닌 단일 개체로 조작할 수 있게 해 줍니다.

LTI 객체가 무엇을 담고 있는지 보려면 get 명령을 사용하십시오. 다음 코드는 DC 모터 예제에 나온 sys_dc의 내용을 보여줍니다.

get(sys_dc)
                A: [2×2 double]
                B: [2×1 double]
                C: [0 1]
                D: 0
                E: []
           Scaled: 0
        StateName: {2×1 cell}
        StateUnit: {2×1 cell}
    InternalDelay: [0×1 double]
       InputDelay: 0
      OutputDelay: 0
               Ts: 0
         TimeUnit: 'seconds'
        InputName: {''}
        InputUnit: {''}
       InputGroup: [1×1 struct]
       OutputName: {''}
       OutputUnit: {''}
      OutputGroup: [1×1 struct]
            Notes: [0×1 string]
         UserData: []
             Name: ''
     SamplingGrid: [1×1 struct]

set 명령을 사용하여 LTI 객체에 포함된 데이터를 조작할 수 있습니다. setget에 대한 설명은 Control System Toolbox 온라인 함수 도움말 페이지를 참조하십시오.

LTI 모델 속성을 설정하거나 가져오는 또 다른 편리한 방법은 점 표기법을 사용하여 직접 액세스하는 것입니다. 예를 들어, A 행렬의 값에 액세스하려는 경우 get을 사용하는 대신 다음을

sys_dc.A

MATLAB® 프롬프트에서 입력합니다. 이 표기법은 A 행렬을 반환합니다.

ans =

   -4.0000   -0.0300
    0.7500  -10.0000

마찬가지로, A 행렬의 값을 변경하려는 경우 다음 코드에서 볼 수 있듯이 직접 변경할 수 있습니다.

A_new = [-4.5 -0.05; 0.8 -12.0];
sys_dc.A = A_new;

참고 항목

| |

관련 예제

세부 정보