본문으로 바로가기

사실 PID제어기 설계법을 배워도 치밀한 계산에 의해 적용하기는 참 힘들때가 있습니다. MATLAB에서는 PID 제어기 블럭이 강력한 튜닝(Tunning)기능을 가지고 있는데요. 이것을 이용하면 제어기 튜닝이 정말 간편합니다.

위의 블럭을 Simulink에서 꾸며보죠. 분모의 근이 1,5라서 불안정한 시스템입니다. 실행해서 결과를 보면

이렇게 발산해버리시거든요^^

시뮬링크 라이브러리에 Continuous 폴더에 보시면 PID Controller가 있습니다. 이걸 가져다가

이렇게 붙여보도록 하죠.

그 PID 블럭을 더블클릭해서 보면, PID, PI, PD, P, D, I 제어기중 하나를 선택할 수 있는곳과 연속시간인지 이산시간인지 선택할 수 있도록 되어있습니다. 또한

PID Advanced탭에서는 출력 제한을 걸수 있도록 지원하며 Anti-windup까지 지원하고 있습니다.

Look under mask 기능으로 PID 블럭 내부를 보면, 위와 같이 전형적인 PID 제어기의 모습을 하고 있네요. Help에 등록되어있는 수식은

입니다.

오늘 할려고 하는 본론인 Tune... 버튼 보이시죠???

그럼 저런 창이 하나 뜹니다. 그 창 위쪽 오른편에 있는 Show Parameters 까지 누르면

현설정에 따른 PIDN 수치가 나타납니다. 아래 표시된 응답시간을 조절해서 응답형태를 눈으로 바로바로 확인하면서 게인을 맞춰볼 수 있습니다. 또 젤 위쪽에 Basic을 누르시면

확장메뉴를 지원하는데요. Bandwidth와 Phase Margin을 슬라이드바로 조절할 수도 있습니다.

혹은 위에 표시된 곳을 눌러서 Open-loop bode plot, 혹은 니콜스챠트를 눈으로 보면서 튜닝이 가능합니다.

적절한 곳에서 OK를 하시면, 저렇게 PID 게인을 입력하는 곳에 튜닝된 게인으로 업데이트되어있음을 확인할 수 있습니다.

뭐 당연하겠지만, 시뮬레이션 결과입니다.^^


댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. 씨몽이 2010.06.08 01:54

    PID 튜너 클릭시 The value of the inputname. property must be a string vector with as many entries as inputs. Type ~ 이런 오류창이 뜨면서 PID튜너가 재생이 안되는데 무슨 오류일까요?ㅠ

    • BlogIcon PinkWink 2010.06.08 14:15 신고

      제가 저 PID 튜닝 기능을 처음 익힐 때 한번 본듯한데... 기억이 잘 나질 않네요... ㅠㅠ
      (이 몹쓸 기억력....ㅠㅠ)
      지금 MATLAB이 깔려있는 PC가 없어 확인해보질 못하고 있는데 말이죠...ㅠㅠ

  3. 씨몽이 2010.06.08 14:58

    혹시 조금이 걸리더라도 저 오류가 어떤사항에서 발생되는건지 알수없을까요?........ 부족한 영어 실력탓도 실력탓이지만ㅠ 매트랩에 입문하게 된것도 이틀도 안되서 말이죠;;;^^

    • BlogIcon PinkWink 2010.06.08 15:16 신고

      Tune 기능을 사용하지 않고, PID블럭만 연결한 상태에서 시뮬레이션이 에러 없이 구동되는지를 먼저 확인해 보세요. 일단 생각나거나 만나게 되면 말씀드리겠습니다.^^

  4. 씨몽이 2010.06.11 11:46

    튠기능 없이 시뮬레이션은 구동되서,, 적절한 값을 찾기는 하였는데;;
    Tune기능은 아직도 말성이네요 ㅠ ㅠ

  5. donc 2010.06.28 10:41

    뜬금없이 물어봐서 죄송합니다만; 버전이 몇에서 되는건가요?? 전 R2009a쓰는데 PID블럭을 더블클릭해도 쥔장님같은 창이 안뜨고 PID파라미터 3개 조정하는거 달랑 3개 뜨네요 ㄷㄷ

  6. 파산 2010.07.07 19:48

    안녕하세요^^ 포스팅 보다가 궁금한게 생겨서 질문남깁니다. PID 제어기에 입력을 두개로 받고 싶은데 look under mask 내부의 PID 제어기를 수정해도 괜찮은것인지요?

    • BlogIcon PinkWink 2010.07.08 03:20 신고

      혹..?? 그렇게는 사용할려고 안해봤는데요..^^
      그러나 상관없을겁니다.
      수정했다고 해서 기존의 라이브러리에 영향을 미치는 것도 아닐테니 말이죠^^

  7. 제어 2010.07.21 19:38

    저는 매트랩 7.6.0 사용중인데요

    왜 게인값 조정만 나오죠 ㅠㅠ 안티 와이드업 써야하는데 쩝

  8. 제어 2011.03.16 20:22

    매트랩 아무것도 모르는데요 ㅡ,,ㅜ
    PID제어에 대해 시뮬레이션해서 설명하려고 하다가 이곳 까지 왔습니다.
    님 하신데로 시뮬레이션 가능하다면... 프로그램주실수 있는지요?
    부탁드립니다. (kissme1064@naver.com)

  9. 알고싶어요!ㅜ ㅜ 2011.05.20 20:19

    tuner 설정에서 phase랑 b/w 값을 조절하는 부분이
    시스템 전체(plant, control, k...) 컨트롤 조건을 대변하는 것인가요
    아니면 PID 컨트롤 자체 조건을 대변하는 것인가요...

    • BlogIcon PinkWink 2011.05.21 14:10 신고

      먼저 무척 죄송합니다. 질문하신 내용중에서

      시스템 전체의 컨트롤 조건을 대변한다..는 말과
      PID 컨트롤 자체 조건을 대변한다...는 말의 뜻이 무엇인가요...??

      (사실.. 제가 막 배운 사람이라.. 고급 용어에 좀 약하거든요...^^)

      뭐 당연히 PID 제어기 블럭일 뿐입니다. PID 제어기가 작동할 시스템은 제어기 근처에 붙어있겠죠...

      그러나 PID제어기가 붙어버리고, 그로부터 본 시스템에서 궤환되어 PID제어기에 들어갈테니 PID 제어기의 제어기 설정값을 바꾼다는 것은

      이 경우에는 시스템과 제어기를 포함 전체 시스템의 응답 특성을 조절하게 되는 것입니다.

      (이걸 질문하신 것 맞나요???)

    • 알고싶어요!ㅜ ㅜ 2011.05.23 00:44

      감사합니다^- ^

    • BlogIcon PinkWink 2011.05.23 07:56 신고

      도움이 된건 맞나요??

  10. 왕초보군 2011.06.07 17:53

    좋은정보 감사드립니다.

    질문 하나만 드리겠습니다.
    만약에 전달함수가 z transform 형태로 discrete 된것이라도
    상관없이 작동하나요?

    • BlogIcon PinkWink 2011.06.07 18:25 신고

      (절대.. 정확하지 않습니다. 안해봐서요..ㅠㅠ)
      가능한것으로 알고 있습니다. 블럭 세팅에서 이산시간영역에 대한 설정을 본 것 같습니다만...

  11. 바람 2011.11.17 19:30

    매번 여러가지 콘텐츠에 대한 정보를 여기서 참조하고 있습니다. 항상 좋은 정보 감사드립니다

  12. 구구이 2011.11.22 14:34

    궁금한 점이 있어서 질문을 합니다^^
    위에서 미분기에 왜 필터가 있는지 궁금합니다. 그리고 만약 PID블록을 사용하지 않고 그냥 미분기와 적분기로 구성을 했을 경우 위와 같이 미분기 부분에 필터를 달아주어야하는것인가요?? 그냥 du/dt 블럭을 달아주면 위의 구성이랑 다른 결과가나오나요???

    • BlogIcon PinkWink 2011.11.22 15:42 신고

      미분기에 달려있는 것은
      미분 결과가 어떤 노이즈같은 성분에 의해
      급작스런.. 예를들면 무한대처럼 아주 큰 값 같은 것을 방어하기 위한 것입니다.

  13. 2011.12.02 01:11

    비밀댓글입니다

  14. ㅇㅇ 2012.03.23 21:30

    아 하느님이시네요 하느님

  15. TAHOT 2012.05.22 20:58

    아아아 ㅠㅠ 찾던것 ㅠㅠ 감사해요 아아 ㅜㅜ

  16. ㅇㅇ 2012.06.06 03:49

    하느님 안녕하셨어요 ㅋㅋㅋ
    질문이 있는데 PID 게인 옆에 있는 filter coefficient (N) 가 어떤 값인가요? @_@@

    • BlogIcon PinkWink 2012.06.07 09:31 신고

      그것은 위쪽 그림들 중에 PID블럭의 내부블럭도를 보여주는 그림에 보면 미분기쪽에 붙어있습니다. 사실상 미분기를 사용하는 경우 그 결과가 갑자기 어마어마하게 튀는 경우가 있습니다. 이를 막기위해 미분기 뒤에 다시 필터하나가 붙는데요. 그것에 사용되는 계수값입니다.

    • ㅇㅇ 2012.06.21 20:46

      아하ㅏㅏㅏ

      역시


      감사합니다 ~ 많은 도움을 얻고 있습니다 ㅎㅎ

    • BlogIcon PinkWink 2012.06.22 11:15 신고

      네.. 다행입니다.^^

  17. okok 2013.04.28 15:23

    매트랩을 처음 시작해서 그러는데 시뮬링크 들어가는 경로 알수있을까요?
    그리고 알고리즘구현에 참고되는 책이 있으시면 알려주시면 정말감사드려요~ㅜ

  18. dark 2013.05.08 00:06

    매트랩 버전에 따라 PID controller가 없을 수도 있나여? 들어가라는데로 따라 들어갓는데 없네여ㅠㅠ

  19. GHIGI 2013.05.20 13:55

    안녕하십니까 ? 자료 감사히 봤습니다. 이걸 통해서 PID제어를 하는데 밸런싱로봇 만들때 이 제어한 것을 어떻게 적용을 시켜야 하는걸까요 ?. PIC를 사용하고 있는데 거기서 받은 값을 매트랩으로 값을 받아 PID 튜닝 한후에 그 튜닝 한걸 다시 로봇에 적용해야되는데 그걸 어떻게 해야되느지 모르겠네요. PID회로를 아날로그로 만들어서 저기서 얻은 P,I,D의 값을 적용 해야되는건가요 ? PIC에 매트랩에서 돌린 PID제어기를 넣을 수 있나요 ?

    • BlogIcon PinkWink 2013.05.21 19:53 신고

      PID 튜닝은 동역학을 바탕으로 시뮬레이션 상에서 수행하시고, 그 결과인 PID Gain값을 실제 제품에 적용해보는 것으로 순서를 잡으시는게 정상적이지 않을까합니다.

  20. rrnsk 2013.06.17 16:38

    안녕하세요 좋은글 감사합니다..
    그런데 제가 질문이 하나 있는데 제가 학교에서 ㅂ배울때는 PID 컨트롤에 filter coefficient N값은 없었거든요... N의 역할이 무엇인가요? 그냥 무시할수 있는것인지 궁금합니다,.,ㅜㅜㅜ

    • BlogIcon PinkWink 2013.06.17 16:54 신고

      네~ 아주 간단한 저역통과필터로 보시면 됩니다.
      미분기 같은 경우 시스템에 노이즈가 많으면,
      노이즈를 증폭하는 나쁜 습관이 있거든요.
      (당연한 이야기지만^^)
      그래서 그런 노이즈 성분을 살짝 걸러주는 역할을 하게 됩니다.

  21. opiano 2018.02.09 13:26

    파이썬으로 matlab의 이러한 pid, fuzzy 등 제어 알고리즘을 테스트해볼만한게 있나요?