본문 바로가기

공학

PID제어기 만들기

안녕하세요. 공대오빠입니다.


이번에는 기계나 전자공학 등 많은 설계에서 사용하는 PID제어기를 설계하고 어떻게 적용하는지 포스팅 해보려 합니다.


저도 완전한 전문가는 아니고 인터넷 여러 글을 참고해서 문제를 해결한 것입니다.

PID를 완전히 성공하지는 못했으나 다른 분들에게 저의 방법이 참고사항으로 적용할 수 있을 것 같아 글을 적어봅니다. 꼭 성공하시기를....


우선 PID의 기본 개념은 인터넷에 많이 있으니 찾아보시기 바랍니다.

간단하게 말하면 오차를 보정해나가면서 목표 값에 도달해 나가는 것입니다. 그 과정에서 중요한 것이 계수 값(P,I,D 값)입니다. 반응속도 등을 고려해서 계수 값을 결정하게 됩니다. 하지만 인터넷에 이 값을 찾는 방법에 대해서는 자세하게 나와있지 않습니다. 저희도 무인주행 자동차의 일정속도 유지를 위해 찾아보고, 공부하면서 이 방법을 생각하게 되었습니다.


저희가 주로 사용한 툴은 마이크로오피스의 엑셀과 매트랩을 사용하였습니다.

적용한 모델은 자동차 정속 주행입니다.


자동차의 동력 구조를 나누면 모터와 엔코더(자동차 모터의 회전수 측정), MCU로 나눠지게 됩니다.

모터는 MCU의 PWM값에 따라서 회전하게 됩니다. 엔코더는 광학식으로 모터의 회전속도를 MCU에 인풋으로 넣어줍니다.

PID과정은 

1. 인풋으로 모터의 속도(i) 측정

2. 목표값과 비교해 PID제어

3. PID제어를 통한 PWM값(j) 계산

4. PWM값 모터에 입력

5. 다시 위의 과정을 반복해 목표 값에 도달


하지만 여기서 문제가 발생합니다. 모터의 속도는 PWM값이 아닙니다. 즉 모터의 속도와 PWM값의 상관관계를 찾아야합니다.


저희는 그 상관관계를 찾기 위해 차량을 공중에 두고 일정한 값으로 PWM값을 증가시켜 그때 나오는 엔코더 값의 평균치를 표로 정리하였습니다.

이 두 값의 상관관계 식을 계산하는 것은 쉽게 하기가 어렵습니다. 하지만 엑셀에 추세선이라는 기능이 있습니다. 두 값들로 그래프를 만들고 그래프에 맞는 수식을 계산해주는 기능입니다. [구글에 엑셀 추세선]이라고 검색하면 많은 블로그에서 다루고 있을 것입니다. 저도 그거보고 따라했습니다. ㅎㅎ


표는 엔코더 값에 따른 RPM값을 그린 것입니다. 

그리고 좌측 상단에 그래프의 수식이 나옵니다.


그럼 우리가 찾은 이 수식을 매트랩에 적용합니다.

매트랩 수식으로 하는 것도 있지만 불편하기도하고, 어려워서 시뮬링크를 이용하였습니다.

PID 시뮬링크 검색하시면 사용법을 배울 수 있을 것입니다.


시뮬링크를 구성하고 우리가 찾은 관계식을 Transfer Fcn으로 넣어줍니다.


그리고 PID controller을 더블클릭하시면 설정창이 뜹니다.

임의의 값으로 P,I,D 값이 설정되어있는데 중앙의 Tune버튼을 누릅니다.


그러면 아래 그림처럼 나오는데. 위에 Response Time, Transient Behavior을 조절할 수 있습니다.

아래의 그래프를 보면서 원하는 값으로 설정하면 되겠습니다.

그리고 우측상단의 update block을 누르면 이전의 창에 적용이 됩니다.

이 값을 복사해서 기록하고 PID제어 코드에 넣어 반응을 확인합니다.


저 값들 중 몇 개는 PID가 되었습니다. 그래서 저희가 수행한 방법은 잘 못 되지 않았다고 생각합니다.

하지만 저희가 고려하지 않은 부분이 있었습니다. 차량의 무게와 지면의 마찰력입니다.

자동차를 공중에두면 모터는 이상적인 속도로 회전을 할 것입니다. 하지만 자동차 주행은 실제입니다. 차량의 무게와 타이어 마찰에 의해 모터의 회전속도가 달라지게 됩니다. 그래서 위의 PID값이 잘 적용되지 않은거 같습니다.

만약 롤러로 되어있는 바닥에서 모터속도를 측정했다면 잘 맞았을 것으로 예상됩니다.


궁금한 것은 댓글로 남겨주세요.