PID콘트롤을 적용하다... #1

by 이희철 | 2017-01-16 15:37

애초의 계획은 On Off콘트롤로만 프로젝트를 끝내려고 했는데...


히터의 관성이 커서 설정온도보다  10도이상 올라갔다가 온도가 너무 천천히 내려오는 것을 보고 PID콘트롤을 추가하는 것을 검토하기로 했다...


비례-적분-미분 제어기 (Proportional–Integral–Derivative controller)의 앞의 첫글자를 따서 PID제어라고 하며  오차값, 오차값의 적분(integral), 오차값의 미분(derivative)의 합으로 시스템이 구성.





  • 비례항 : 현재 상태에서의 오차값의 크기에 비례한 제어작용을 한다.
  • 적분항 : 정상상태(steady-state) 오차를 없애는 작용을 한다.
  • 미분항 : 출력값의 급격한 변화에 제동을 걸어 오버슛(overshoot)을 줄이고 안정성(stability)을 향상시킨다.


기본적인 PID시스템에 관한 이론을 공부를 했는데...


이 역시 궁금한 사항을 물어볼 사람이 없어 많은 시간을 보냈다...


어쨋든...



첨부된 프로그램에서 Kp Ki Kd값을 여러번 측정해서 온도특성이 가장 잘 나오는 계수를 선택해서 상수값을 고정시킨다.


주의할 점은 상수값이 1000이상 큰 값으로 설정해야 PID시스템의 제어가 가능했다. (주의: 라이브러리에서 기본으로 제공했던 값(Kp=2 Ki=5 Kd=1)은 숫자가 너무 작아서 제대로 동작하지 않았슴.

프로그램의 오류가 생긴줄 알고 디버깅한다고 많은 시간을 허비했는데 결국 프로그램문제가 아니고 상수값 문제였다.)



프로그램 PLX-DAQ를 사용해서 엑셀로 전기밥솥의 온도를 수집해서 그래프로 나타내 보았다...


아래 그래프는 Ki와 Kd를 0으로 세팅한 후...


Kp값만 1000, 2000,3000,4000 4가지로 바꾸어 온도 특성 그래프를  나타내 보았는데...


Kp가 4000일 때(노란색선) 가장 좋은 온도특성을 나타내었으므로 Kp를 4000으로 설정했다...




Kp는 4000으로 설정했고 Kd값을 각각 1000, 2000,3000,4000으로 변화를 주어 온도특성을 살펴본 결과 Kd는 3000이 가장 적당한 값이라고 판단 3000으로 세팅했다...






마지막으로 Ki값을 설정할 차례...


Ki를 4000으로 설정해 보았더니 온도 제어를 못하고 100도까지 급상승했다...


너무 큰 값이라는 생각...


다시 Ki값을  1000부터 낮추기 시작해서 500, 250, -100까지 낮추어 보았더니...


-100일 때가 가장 세팅온도에 상당히 근접 한 값을 얻을 수 있었다...


Ki값은 -100으로 결졍...


PID시스템의 상수값은 실험을 많이 하면 할 수록 더 좋은 온도특성을 얻을 수 있지만...


이번 프로젝트에서는 이정도에서 만족하기로 한다...




위의 그래프에서 보듯이 On Off제어만 할 때는 세팅온도보다 10도이상 올라갔었는데...


PID콘트롤을 사용함으로서 온도가 너무 많이 올라가는 것을 억제하는 모습을 볼 수 있다...


자세한 내용은...


첨부된 아두이노 소스코드를 참조하기 바란다...


댓글 1

MADE BY

이희철

요리, 전자회로설계