본문 바로가기

Hardware/MCU

DC 모터의 모션(서보)제어 (Servo Control - Motion Control)

블로그를 통해 몇 번 밝혔지만, 저의 전공이 제어(control)입니다. 그래서 비록 작은 수의 글이지만 제어와 관련된 포스팅도 했었고, 연재도 수행했었는데요. 그런데 창피하게도 한 번도 모터 제어 자체를 수행했던 경험이 없습니다. 왜그랬을까요?^^ 아마 이때까지의 불안정한(unstable) 시스템의 로봇

[프로젝트/Robot] - Cart type Inverted Pendulum (카트형 역진자) 시스템
[프로젝트/Robot] - Rotary type Inverted Pendulum (로터리 역진자) 시스템
[프로젝트/Robot] - [밸런싱 로봇 만들기] 작은 로봇을 하나 완성해서 큰 기쁨을 얻다

들을 다루면서 저는 항상 구동체(모터)의 동역학적 특성을 시스템 전체 동역학에 대입하여 사용했기 때문입니다.

그래서 이번에는 DC 모터의 서보제어(servo control) 중에서 모션제어(motion control)라고 불리는, 위치제어를 수행했습니다.

아.. 그전에 간단히 용어를 정의하고 가볼까요. 서보제어라고 하는 말은 너무 광범위합니다. 위키백과사전의 정의를 빌려오자면

"서보메카니즘이라는 것은 위치, 속도, 혹은 어떤 파라미터의 상태를 제어하기 위해 해당 상태를 센싱하여 에러를 보정하는 기술"

이라고 합니다. 그러나 대부분의 모터 드라이버를 판매하는 회사들의 카달로그를 검색해보면, 서보제어를 위치제어와 거의 동일한 개념으로 많이 사용한다는 것을 알 수 있습니다. 속도제어기만 탑재된 경우에 서보... 라는 이름을 잘 붙이지 않더군요.

그런데도 불구하고, 아직 용어의 개념이 너무 넓고, 또 아직 제가 정확히 결론을 내리기가 좀 그래서, 특별히 모션제어라고 해 두겠습니다. 모션제어의 위키백과의 정의를 보면

"모션제어는 서보제어의 한 부분으로 위치와 속도를 제어하는 기술로 통상 특정 프로파일(삼각, 사다리꼴, 혹은 S-곡선)을 추정하도록 하는 제어기술"

이라고 합니다.
뭐, 결론은 저는 그냥 DC모터의 위치제어를 하고 싶었다는 이야기입니다.^^

항상 제가 하는 일들이 그렇지만, 먼저 동역학을 유도했습니다. 물론 동역학이 너무 간단하긴 하지만, 유도했고, 그로부터 제어기를 설계했습니다. 펌웨어부분과 실질적 테스트는 저희 팀 연구원이 수행했지요^^

일단 대상 모터는 


위의  6W급 14:1의 기어를 장착한 소형모터입니다. [판매페이지] 이 모터만 가지고 그냥 놀면 재미없으니까 무게 150g의 막대를


위와 같이 장착해서 테스트를 했습니다.

따라가고자 한 위치 프로파일은


입니다. 물론 딱 저건 아니구요. 실제로 사용할때는 저걸 좀 가공했습니다. 하여간 저와 같은 S-곡선이라는 것이죠. 처음 시작할 때와 도착할때는 저속으로 움직이고, 시작하고서 점점 빨리 움직이다가 도착지점에서는 감속하라는 거죠. 그리고, 위 위치프로파일을 그대로 미분해서 속도프로파일로 사용합니다. 속도프로파일은


입니다. 위 두 형태를 모터의 각각 위치지령과 속도지령으로 사용하는거죠^^ 제어기는 

[공학기초/Theory] - 서보제어 Servo Control

에서 이야기한 것을 설계요소만 변경해서 사용했구요. 최종적으로는 PID 제어기입니다. 결과 확인은 동영상으로^^


일단 초반에는 위치지령을 계속 반복해서 몇 회 수행합니다. 그리고 후반부에는 '0'상태를 유지하도록 지령을 내리고 강제로


외란을 가하는 거죠. 이 때, 모터자체가 좀 힘이 낮은 아이이니 따라 오는것은 어쩔 수 없구요.


그러나 손을 놓으면 잽싸게 다시 원상복귀를 하는거죠^^


위 그래프가 한 바퀴를 돌때의 결과입니다. x축은 단위가 100ms이구요. y축은 시작지점부터 끝지점까지가 한 바퀴(360도)입니다. 파란선은 위치지령이고, 빨간선은 그것을 따라가고 있는 실제 데이터죠. 응답속도는 최대 2state정도안에서 수행하고 있습니다. 아 1state가 10ms입니다. 현재는 sample time을 10ms로 세팅한거거등요^^ 그리고 최종단에서의 각도오차는 대략 0.1도와 0.07도 사이입니다. 뭐 이거야 기어비와 각도를 측정하는 엔코더 레졸루션에 달린 문제지만 말이죠....^^

항상 저가형 모터들이 그렇지만, 역학모델을 구축하기에는 비싼 Maxon 모터처럼 파라미터를 다 주는게 아니거든요. ㅠㅠ. 그래서 저희가 직접 다이나모같은 기구없이 모터 ID(Identification)를 수행해서 파라미터를 잡고, 역학적 모델을 수립하고, 이쁜 제어기를 설계하고 실제 테스트된 결과입니다. 괜찮은 성능이네요^^ 이제 다음은 위치제어기 설계가 꼭 필요한 로봇에 적용을 해봐야겠어요. 그리고 그 다음은 BLDC 모터에 또 적용해야죠.^^

에구... 7월말에는 휴가래요... ㅎㅎㅎ

그전에는... 어떻게든 이쁘게 걸을 수 있으야할 텐데 말이죠.....^^

Not fearng change is another expression of youth
                                              dreaming independence and soaring high.


반응형