한국어

Matlab을 이용하여 모터 위치제어를위한 PID제어기 설계

그림1처럼 모터를 이용하여 볼리드스류에 올려진 질량을 χ만큼 이동시키고자 할때 이를위한 PID제어기를 설계하고자한다.

motor.png

<그림1>. 모터 위치제어 시스템의 기계적 장치

 

하나의 예로 모터위치제어 시스템의 물리적 파라미터를 다음 표1.로 가정한다

                  <표1>물리적 파라미터

기호

의미

M

1kg

질량

B

0.5kg/s

마찰계수

R

1.27cm

볼스크류 1회전당 이송거리

Km

4.9Ncm/A

모터 토크상수

Kp

0.0507V/(rad/s)

모터 역기전력 상수

R

0.3

모터 전기자 저항

 

이때 모터 위치 제어 시스템의 운동방정식은 다음과 같이 나타낼 수 있다.

 

02.jpg 03.jpg

 1. 먼저  Matlab에서 m파일을 프로그래밍해야합니다. Matlab이 열려있는 상태에서 좌측 상단 new script 를 클릭합니다

 K-31.png

 

2. 그러면 다음과 에디터창이 보입니다.

K-32.png

 

3.위 <표1>의 예제를 이용하여 다음과 같이 프로그래밍하고 저장합니다.

K-29.png

 

4. 저장을 완료하고 상단 메뉴의 Debug - Run을 클릭합니다.

 1276086028.jpg

5. Run을 실행하면 Workspace에 다음과 같은 값들이 출력됩니다.

 

6. m파일 생성을 완료하고 명령창에 simulink 을 입력하여 simulink 실행합니다.

   PID 제어기를 설계 하기위해서 시뮬링크에서 블록선도를 통해 시뮬레이션할 수 있습니다.

 

7. 시뮬링크화면에서 New model 을 클릭합니다.

 

8. 새로 열린 창에 좌측 Continuous 의 Transfer Fcn (전달함수)을 마우스로 끌어 옵니다.

 

9. 끌어다 놓은  블럭을 더블클릭하고 다음과 같이<위의 예제> 입력합니다.

 

 

 10. 그런다음 Continuous 에서 PID Controller 블럭을 끌어와 추가하고 옆의 블럭과 위치를 맞춥니다.

 

11. 그리고 블럭의 좌측부분에 점을 클릭하고 드래그하여 다음과 같은 그림처럼 Transfer Fcn 에 연결시킵니다.

 

 

12. PID블럭을 더블클릭하고 P, I, D, 각 값을 0으로 입력합니다.

 

13. 그리고 좌측 Sources 에서 Step 블럭을 추가 시키고 더블클릭하여 다음과 같이 값을 수정하고 ok를 클릭

 

14. 다음은 Math Operations 의 Add 추가시키고 더블클릭합니다. ++ 로 되있는것을 +-로 바꾸고 ok 클릭

 

15. 다음으로는 Sinks 에서 Scope <Scope 는 결과보기위한>를 추가 후 더블클릭하여 다음과 같이 설정하고

      Data History탭을 클릭, Limit data points to last 클릭해제 합니다. 그런 다음 ok클릭

 

16. scope 설정을 완료하면 다음과 같은 화면을 확인할 수 있습니다.

 

17.  scope 의 사이즈를 늘리고 다음과 같이 모두 연결시켜 블록선도를 완성시킵니다.

 

18. 다음으로 메뉴에서 simulation - configuration parameters 클릭

 

19. 그리고 다음과 같이 설정 값을 변경해줍니다.

1276090705.jpg

 

20. 이제 시뮬레이션 하기위한 준비가 끝났습니다. 그럼 일단 PID 제어기를 설계하기 위한 적절한 값을 찾아 보겠습니다. 

21. PID Controller 블럭을 더블클릭하고 다음과 같은 값을 넣어 봅시다. 우선 P제어에 10을 넣어보았습니다. P제어기든 PI제어기든

       P제어가 가장 기본이 되므로 일단 이렇게 하고 결과를 한번 보겠습니다. OK를 클릭하고 상단에 버튼을 눌러줍니다.

 

22. 그리고 Scope 블럭을 더블 클릭하면 시간응답이 나옵니다. 상단에 auto scale 버튼을 누르면 이렇게 보입니다.

      하단 그래프를 보면 응답속도는 빠르지만 오버슛이 발생합니다.  시뮬레이션 시간도 길어 보입니다. 창을 닫고 PID 제어설정

      으로 들어갑니다.

 

23. P제어에서 10을 주었을때 시스템이 불안정한걸 알 수 있었으므로 다시 값을 5로 수정하고 시간도 2초로 바꿔 버튼클릭

 

24. 그랬더니 전보다 확연히 안정되었습니다. 다만 상승시간은 약간 느려졌습니다. 신경쓰지 않아도 될정도인것 같습니다.

      여기서 오버슛을 좀더 줄여 주기위해 D게인을 좀 써보 겠습니다.

 

25. PID 컨트롤러 블럭 더블클릭 후 D 값을 0.1로 해보았습니다. 그리고  버튼클릭 후 scope 더블 클릭합니다.

 

26. 신간응답 결과 입니다. 위와 비교 했을 때 상당히 안정되고 정상상태값 도달시간도 짧아진것을 확인하였습니다.

      지금 까지 matlab을 이용하여 모터 위치제어를 위한 PID제어기 설계를 해보았습니다. 참고로 m파일과 시뮬링크파일을

      밑에 첨부하였습니다.

 

 

 

motor_positon_control.m            PID.mdl