Servo Motors

hyeony·2025년 8월 27일

임베디드

목록 보기
10/10

1. Servo Motors

가. Introduction to Servo Motors

서보 모터는 정밀한 위치 제어를 위해 설계된 특수한 모터이다. 일반적인 DC 모터는 특정 속도로 계속 회전하기 때문에 바퀴나 팬과 같은 연속 회전이 필요한 곳에 적합하다. 반면, 서보 모터는 단순히 회전하는 것이 아니라 제어 신호에 따라 특정 각도로 이동하고 그 위치를 유지한다. 이러한 특성 덕분에 로봇 팔, 자동화 장치, 원격 제어 기기 등 정밀한 움직임이 필요한 분야에서 널리 사용된다.

가장 보편적이고 저렴한 서보 모터 중 하나가 SG90이며, 임베디드 시스템과 교육용 프로젝트에서 많이 사용된다. 본 블로그에서도 이 모터를 다룰 것이다.

나. Servo Motor의 내부 구조

서보 모터는 다음과 같이 세 가지 주요 부품으로 구성되어 있다.

① 작은 모터

  • 실제 움직임을 제공

② 기어박스(gearbox)

  • 모터의 회전을 감속하고 토크(힘)를 증가시킴
  • 자전거 기어처럼 속도를 줄여 힘을 강화함
  • 기어박스가 없다면 모터는 특정 각도에 고정될 수 없음

③ 제어 회로(control circuit)

  • 신호를 해석하고 모터를 어느 각도로 움직일지 결정
  • 제어 회로가 없다면 입력 신호에 따른 제어 불가능

다. Servo Motor & PWM

서보 모터PWM 신호를 통해 제어된다. PWM 신호pulse width이 다음과 같이 모터의 위치를 결정한다.

  • 펄스 길이 1ms → 0° 위치
  • 펄스 길이 1.5ms → 90° 위치
  • 펄스 길이 2ms → 180° 위치

위의 예시는 특정 값에 대해 표기했으나, 특정 값 간 중간값의 경우에도 그에 대응되는 각도로 이동한다.

앞서 언급했듯이, 서보 모터는 일반 DC 모터처럼 계속 회전하지 않고, PWM이 가리키는 특정 각도에 정확히 이동하여 그 위치를 유지한다. 이러한 특성 덕분에 로봇 팔의 관절처럼 정확히 특정 위치에 고정되어야 하는 곳에 적합하다.

2. Practice

가. Code Implementation

#include "mbed.h"

PwmOut servo(PA_15);

UnbufferedSerial pc(USBTX, USBRX, 112500);

int main() {
	printf("Servo Program starting\n");
    
    servo.period_ms(20);
    
    while (true) {
    	// Move the servo to 0
        printf("Pos 0\n");
        servo.pulsewidth_us(500);
        ThisThread::sleep_for(2000);
        
        // Move the servo to 90
        printf("Pos 90\n");
        servo.pulsewidth_us(1500);
        ThisThread::sleep_for(2000);
        
        // Move the servo to 180
        printf("Pos 100\n");
        servo.pulsewidth_us(2500);
        ThisThread::sleep_for(2000);
        
        ThisThread::sleep_for(1000);
    }
}

나. Result

1) Pos 0


2) Pos 90


3) Pos 180


<참고 자료>
https://www.udemy.com/course/microcontrollers-iot-learn-with-real-online-hardware/?kw=Microcontrollers+%26+Embedded+Systems%3A+Use+Real+STM32+Online&src=sac

profile
Chung-Ang Univ. EEE.

0개의 댓글