1. PWM 출력
앞선 글에서, 라즈베리 파이 피코 보드에서 아날로그 신호를 모사한 PWM 신호를 출력하는 방법을 소개한 바 있는데, 이를 이용하면 드론이나, 3D프린터, RC 장치 들의 동작 제어 등에 널리 사용되는 서보모터를 쉽게 동작할 수 있다.
2. 서보모터
서보모터는 반복적으로 회전하는 것을 목적으로 하기보다는, 지정한 특정 각도로 회전하는 것이 특징인 모터인데, 0도에서 180도 또는 0도에서 360도 회전하는 형태가 있다. 소비전력이 20mA 정도로 작은 경우에는 별도의 전원 연결 없이 피코 보드 등의 출력핀에서 나오는 전력으로도 동작이 가능하나 (피코보드는 50mA 이하 출력되는 것으로 알려져 있음), 규모가 커서 소비전력이 많은 경우에는 별도의 전원 연결이 필요하다. 물론 이러한 경우 GND는 피코보드의 GND에 연결해 주어야 한다.
라즈베리파이나 아두이노와 같은 마이크로 컨트롤러를 이용한 동작 제어에 사용되는 미니형 서보모터로는 다음과 같은 SG90이나 MG90S 같은 제품들이 많이 접할 수 있는 제품들이며, 이들은 대략 20 mA 정도의 전기를 사용하는 것으로 알려져 있다.
두 제품은 기본적으로 크기나 동작하는 방식은 거의 동일하나,
SG90의 경우는 내부의 기어와 베어링이 플라스틱 재질로 되어 있는 반면
MG90S는 금속 재질 기어와 베어링을 사용해서 좀 더 정교한 동작이 가능하고 수명이 상대적으로 긴 것으로 알려져 있다. 두 제품 모두 동작 방식은 동일하다.
3. 서보모터의 제어 원리
서보모터는 PWM 방식으로 제어하는데, 이들의 제조사 등에서 공지하는 Datasheet(다음 참조)에 보면 배선 방식과, 제어 방식이 공개되어 있으므로, 이를 참조하면 된다.
이러한 Datasheet들을 참조하다 보면 다음과 같이, 배선하는 방법과
각도별로 제어하는 방법이 소개되어 있다.
또한 이러한 Datasheet에는 동작 주파수가 다음과 같은 형태로 표기된다.
즉, 이 서보모터는 datasheet 상으로는 50Hz의 주파수를 가지므로 하나의 사이클당 20 msec의 주기를 가지는데, 각 사이클당 1msec의 폭을 갖는 펄스를 주면 0도 위치로, 1.5msec의 폭을 가지는 펄스를 출력하면 90도로, 2.0msec의 폭을 가지는 펄스를 PWM으로 출력하면 180도 방향이 되도록 회전하게 되는 것을 알 수 있다.
실제 피코보드의 PWM 핀으로 보내는 펄스의 폭은 duty의 값을 변경하는 방법으로 출력하게 되는데, 한 사이클의 duty 값은 100% 라면 16비트 값의 최대치인 65535를 갖게 된다.
여기서는 한 사이클의 길이가 주파수 50Hz에 의해 20mSec로 결정되고, 각도별로 필요한 펄스 폭에 대한 시간 길이는 datasheet에서 확인되었으므로, 이를 이용하여 계산하면 다음과 같이 된다.
이론상 0도로 동작되도록 PWM 핀으로 실제 출력되어야 하는 duty 값은 : 65535 x 1.0 / 20 = 3276
이론상 90도로 동작되도록 PWM 핀으로 실제 출력되어야 하는 duty 값은 : 65535 x 1.5 / 20 = 4915
이론상 180도로 동작되도록 PWM 핀으로 실제 출력되어야 하는 duty 값은 : 65535 x 2.0 / 20 = 6553
<참고사항> 실제 test 해 보면 SG90의 경우 오차 및 제작사 설계치 변경 등으로 인해 위의 값을 그대로 사용하면 0도에서 180도까지 동작하지는 않는다. 실제로는 0.5msec~2.5 msec 범위로 값을 확장해 주어야 0도에서 180도까지 동작한다. 때문에 실제로 필요한 PWM duty 출력값은 다음과 같다. 실제 0도 동작에 출력되어야 하는 duty 값은 : 65535 x 0.5 / 20 = 1638 보다 작은 값 실제 180도 동작에 출력되어야 하는 duty 값은 : 65535 x 2.5 / 20 = 8192 보다 큰 값 |

