Robotics/Motor Drive

PI 제어기를 이용한 모터 제어

공대조교형 2018. 9. 2. 22:21

PI 제어기를 이용한 모터 제어 




  본 포스팅에서는 PI 제어기를 이용한 모터제어 원리를 살펴보고자 한다. 모터 제어는 토크제어(전류제어), 속도제어, 위치제어 이렇게 크게 세가지로 나눌 수 있는데 이 중 가장 기본이 되는 전류제어를 대상으로 할 것이며 대상 모터는 DC모터를 대상으로 하도록 한다. AC모터는 추후에 FOC와 함께 다루도록 하겠다.  


0. 플랜트 분석


  제어를 수행하기 위해서 가장 먼저 해야할 일은 플랜트를 분석하는 것이다. DC모터의 토크방정식은 아래와 같이 표현되기 때문에 원하는 전류를 제어함으로서 원하는 토크를 발생시킬 수 있다. 



  DC 모터는 토크제어하기 위해서 전류를 제어하는데 전류를 제어하기 위해서 full bridge converter를 이용하여 전압을 인가하는 방식을 사용한다. 따라서 플랜트는 전압을 인가하면 전류가 출력되는 어드미턴스의 꼴이 될 것이고 등가 회로로 보자면 R, L, 가변 역기전력 전원이 등가로 연결되어있는 형태이다. 전압을 인가하였을때 유효전압은 아래와 같이 표현되고 유효 전압에 따른 전류는 아래의 전압 방정식을 통해서 얻어진다. 


유효 전압 = (인가전압)-(역기전력)


전압방정식 :


1. 제어기 설계 


  제어기의 역할이란 원하는 전류를 위하여 지금 시점(전류, 속도(역기전력))에서 어떤 전압을 인가해 주어야되는가를 결정해 주는 것이다. R, L, 역기전력을 정확하게 안다면 예측제어기를 이용하여 다음 샘플에서 원하는 전류를 얻기위해 필요한 전압을 계산할 수도 있지만 이는 저항이나 인덕턴스 혹은 속도를 잘못알았을때 offset오차가 발생할 수도 있으며 디지털 방식의 제어에서 PWM 지연을 고려하지 않을 경우 1 샘플씩 잘못인가하여 진동을 유발할수도 있다. 따라서 오차에 기반하여 전압을 수정해나가는 오차기반 제어기인 PI제어기가 일반적으로 많이 사용되며 모델을 이용한 부분은 PI제어기를 보조해 주는 정도로 사용되는데 플랜트의 어느 부분까지를 모델이 담당하며 어느 부분까지를 PI제어기가 담당할지 선정하는 것이 중요하다. 


    0) 플랜트에서 제어기가 담당해야할 부분 선정 


  PI제어기를 사용할때 생각해주어야하는 것은 "PI제어기를 이용해서 플랜트의 어떤 특성까지 고려한 상황 속에서 전압을 결정할까" 이다. 플랜트란 제어란 무엇인가 포스팅에서 언급했다시피 제어기 입장에서 바라본 출력 바로 다음부터 센싱까지 있는 부분인데 어디까지를 플랜트로 보느냐에 따라서 제어기의 구조나 설계가 달라질 수 있다.  이를 결정하기 위해서는 PI제어기의 P항과 I항의 특성을 정확하게 알아야한다. 



  PID제어기의 (각각의 의미와 역할은 PID 제어기 포스팅에 서술되어있다.) P항은 Proportional의 약자로서 오차에 비례하는 출력을 내는 항이다. 오차가 0이되기 이전까지만 유효하며 오차가 0이 되는 순간은 역할을 다하지 못한다. 물론 플랜트의 오차를 0으로 만드는 속도도 중요하지만 한번 0에 다다랐을때 그것을 유지하지 못한다면 제어라고 할 수 없다. 따라서 오차가 0이된 이후에 계속 0을 유지하게 만드는 것도 중요한데 이를 결정하는 것이 바로 I항이다.  I항은 오차를 누적하여 더한 값을 전압으로 출력하게 되는데 그 실제적인 의미는 결국 정상상태(오차가 0인 상태)에서 전압을 결정하는 유일한 항이 되는 것이다. 


  만약 제어기가 담당해야하는 모터의 플랜트를 R, L, 역기전력 전체라고 할 경우 전압 방정식은 아래와 같이 나타나는데 정상상태에서 L에 의한 항은 사라지고 I항에서 출력해야하는 전압은 결국 역기전력 + iR이 되어야한다.


전압방정식 :

  여기서 역기전력은 속도에 비례하기 때문에 모터의 구동 속도에 따라 변하는 값이다. 따라서 I제어기가 누적하여 내 주어야하는 출력은 속도에 따라서 계속해서 변화해야하는데 I제어기에 쌓는 속도가 모터 구동 속도가 변화하는 속도를 따라잡지 못한다면 오차가 발생하게 된다. 예를들어 모터의 속도가 계속 증가하는 상황이라고 가정을 한다면 한번 오차가 0이되었다 하더라도 계속 같은 전류를 내 주려면  인가해 주어야하는 전압은 증가해야할 것이다. 물론 발생한 오차에 따라서 I항도 커져서 출력전압이 증가하지만 역기전력이 변화하는 속도가 더 빠르게 커지는 경우 영원히 내려고 하는 전압을 못 낼 것이다. (물론 속도는 한계가 있어서 언젠가는 따라잡겠지만) 또 문제되는 상황은 속도가 사인으로 변화하고 있는 상황 속에서 사인의 증가부분에서 오차가 양이기 때문에 I항도 증가하였지만 이내 속도가 감소하는 구간에서는 증가한 I항을 재빠르게 감소시키지 못한다면 오히려 더 큰 오차를 발생시키고 이는 전류 리플로 나타나게 된다. 


  따라서 역기전력에 해당하는 부분은 속도를 알고 있기 때문에 속도를 통해서 계산한 값을 모델식을 이용하고 PI제어기는 모델을 잘못알았을 경우의 약간의 오차와 Ldi/dt, iR부분을 담당하게 된다. 모델을 잘못아는 부분이 클 수록 제어 성능은 떨어지게 된다. 


  1) PI제어기 계수 선정 


  PI제어기의 계수를 선정할때는 먼저 P항과 I항의 비율을 먼저 선정하고 그것의 공통 계수를 통해 크기를 결정하는 순서로 가는것이 좋다. (손튜닝도 노하우가 있지만 이론적으로 설계하는 방법을 본 포스팅에서 먼저 다루고자 한다. 이를 알면 손튜닝의 방향을 잡는데에도 매우 도움이 된다.) 


  P항과 I항의 비율을 선정하는데 있어서는 각각의 항이 어떤 역할을 담당하는지 파악하는 것이 우선이다. 앞에서 언급했듯이 I항은 정상상태에서 전압을 담당한다고 하였는데 역기전력을 제외한 플랜트에서 남는것은 저항뿐이다. 따라서 I항은 저항을 담당하게 되며 저항이 클 경우에는 I항에는 큰 값이 출력될 것이고 저항이 작을경우에는 I항에서는 작은 값이 출력될 것이다. 


  다음은 전류가 변하는 상황을 생각해 보자. 전류가 변하는 순간에 인덕터는 전류의 변화를 방해하기 위해서 전압을 전류가 변하는 것을 방해하는 방향으로 출력할 것이다. 달리 말하면 변한 전류가 돌아오게 만드는 방향으로 플랜트에서 전압원이 인가될 것이다. 하지만 우리는 전류의 변화를 원하는 상황이기 때문에 이를 상쇄시켜주어야한다. 전류가 크게 변하는 상황의 경우에는 출력해야하는 전압도 커져야 하고 전류가 작게 변하는 상황 속에서는 출력되는 전압도 작아야한다. 이를 미분의 개념으로 보아 D제어기를 사용할수도 있겠지만 본 제어기에서는 지령을 변할 전류로 보고 현재 전류와의 차이가 인덕터에서 만들 상쇄시켜야되는 전압이라고 보았을때 오차에 비례하는 P항으로 인덕터를 대응한다. 


  지금까지 언급된 바를 정리하자면 I항은 정상상태에서 플랜트의 제어를 담당하기 때문에 I제어기 계수는 R에 비례하는 값으로 선정하며, P항은 전류가 변하는 과도상태를 담당하기 때문에 P제어기 계수는 L에 비례하는 값으로 선정하게 된다. 이에 따르면 P항과 I항의 비율은 L대 R이 된다. 


  다음으로는 공통 계수의 선정이다. 공통계수의 물리적인 의미는 P항에 대해서는 과도상태 오차를 I항에 대해서는 정상상태 오차를 얼마나 빠르게 수렴시키는지에 해당하는 속도를 결정하는 항이다. 이를 제어적으로 주파수 영역에서 분석하자면 플랜트는 역기전력 전압이 외란으로 존재하는 1/(R+sL)의 어드미턴스에 해당한다. 이 경우에 P항과 I항을 L대 R의 비율로 설정하면 폐루프 제어기가 고주파 노이즈는 감쇠하면서 DC 오차는 0으로 가져가는 저역필터 꼴이 된다. 그리고 공통 계수는 이 저역필터의 필터링 주파수가 된다. 이 의미는 공통 계수가 클수록 높은 주파수 영역까지 지연이 없이 지령을 쫓아갈 수 있다는 퍼포먼스의 지표가 된다. 


  대역폭이 크게 설정되어 퍼포먼스가 높을수록 임의의 급작스럽게 변하는 지령에 대해서 전류가 지연없이 따라갈 수 있지만 노이즈에 대해서도 지연없이 따라가게 되면 출력 전류에 그 노이즈가 그대로 나타나게 되어 무조건 높은 대역폭이 좋은것만은 아니다. 따라서 실제 실험 상황속에서 낮은 값부터 서서히 올려가며 선정하여야한다. 너무 높은 값이 될 경우 발산하는 경우도 있다.(이는 z domain에서 delay를 고려한 block diagram을 분석하면 발산하는 지점을 찾을 수 있다.)