반응형
서보모터(Servo Motor)는 위치, 속도, 토크를 정밀하게 제어할 수 있는 모터로, 임베디드 시스템에서 로봇, 자동화 기기, RC(무선 조종) 모델 드에 많이 사용됩니다.
1. 서보모터란?
서보모터는 일반적인 DC 모터와 달리 위치를 제어할 수 있는 모터입니다. 내부에 기어, 위치 센서(포텐셔미터), 제어 회로가 포함되어 있어, 특정 각도로 정밀하게 움직일 수 있습니다.
1-1) 특징
- 정확한 위치 제어 가능(일반 DC 모터는 속도만 제어)
- 내부에 제어회로 포함(별도의 H-브리지가 필요 없음)
- PWM(펄스 폭 변조) 신호로 제어
- 회전각 제한(일반적인 서보모터는 0 ~ 180도 범위에서 동작)
2. 서보모터의 구성 요소
서보모터 내부 구조를 살펴보면 다음과 같이 구성되어 있습니다.
- DC모터 - 기본적인 회전 동력을 제공
- 기어 감속기 - DC 모터의 빠른 회전을 느리게 조절하고, 더 강한 토크를 제공
- 포텐셔미터(가변저항) - 현재 회전 각도를 측정하는 센서 역할
- 제어 회로 - 입력된 신호와 포텐셔미터의 값을 비교하여 모터를 원하는 위치로 이동
3. 서보모터의 종류
3-1) 표준 서보모터
- 가장 일반적인 서보모터
- 0 ~ 180 또는 0 ~ 270도 범위에서 제어 가능
- RC카, 로봇 팔 등에 많이 사용됨.
3-2) 연속 회전 서보모터
- 일반 서보모터와 달리 무한 회전이 가능함
- 속도를 PWM 신호로 제어하는 방식
- 바퀴 형태의 구동 장치에 많이 사용됨(로봇의 바퀴 등)
3-3) 산업용 서보모터
- 공작기계, 로봇팔 등에 사용되는 강력한 서보모터
- 높은 정밀도와 강한 토크를 가짐
- 일반적으로 AC 서보모터가 많음
4. 동작 원리
서보모터는 PWM(Pulse Width Modulation) 신호를 이용해서 제어됩니다.
PWM 신호는 일정한 주파수(보통 50Hz)를 가지며, 펄스 폭의 길이에 따라 서보모터의 회전 각도가 결정됩니다.
4-1) PWM 신호와 각도 제어
- 20ms(50Hz) 주기의 PWM 신호를 사용
- 펄스 폭(High 구간)이 1ms --> 0°
- 펄스 폭이 1.5ms --> 90° (중간 위치)
- 펄스 폭이 2ms --> 180°
즉, 펄스 폭을 조절하면 모터가 원하는 각도로 회전합니다.
5. 전원 및 신호 연결
서보모터는 보통 3개의 핀으로 구성됩니다.
핀 번호 | 기능 | 설명 |
1 | VCC | 전원 (일반적으로 5V) |
2 | GND | 그라운드 |
3 | PWM | 마이크로컨트롤러에서 오는 제어 신호 |
# 주의할 점
일반적으로 마이크로컨트롤러(예 : STM32, Arduino)의 GPIO 핀은 전류가 부족하므로, 여러 개의 서보모터를 사용할 때는 별도의 외부 전원과 전류 공급 회로를 고려해야 합니다.
6. 서보모터 제어 방법(STM32 예제)
STM32를 사용하여 서보모터를 제어하는 간단한 예제입니다.
TIMx를 이용한 PWM 신호르 생성하여 서보모터의 각도를 조절합니다.
6-1) PWM 설정
1. TIMx를 PWM 모드로 설정
- 주파수 : 50Hz(20ms 주기)
- PWM 펄스 폭: 1ms(0°), 1.5ms(90°), 2ms(180°)
2. GPIO 설정
- PWM 출력 핀 : TIMx_CHx에 할당
6-2) 코드 예제(HAL 라이브러리)
#include "main.h"
void Set_Servo_Angle(TIM_HandleTypeDef *htim, uint32_t Channel, uint8_t angle) {
uint32_t pulse = 1000 + (angle * 1000) / 180; // 1ms(0°) ~ 2ms(180°)
__HAL_TIM_SET_COMPARE(htim, Channel, pulse);
}
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM2_Init();
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
while (1) {
Set_Servo_Angle(&htim2, TIM_CHANNEL_1, 0); // 0° 위치
HAL_Delay(1000);
Set_Servo_Angle(&htim2, TIM_CHANNEL_1, 90); // 90° 위치
HAL_Delay(1000);
Set_Servo_Angle(&htim2, TIM_CHANNEL_1, 180); // 180° 위치
HAL_Delay(1000);
}
}
위 코드에서 Set_Servo_Angle() 함수는 PWM 펄스 폭을 계산하여 원하는 각도로 서보모터를 움직이는 역할을 합니다.
7. 서보모터 사용 시 주의할 점
1. 전원 공급
- 서보모터는 높은 전류를 소모하므로, 마이크로컨트롤러의 5V 핀을 직접 사용하지 말고 별도의 전원 공급을 사용해야 합니다.
- 여러 개의 서보모터를 사용할 경우 별도의 전원회로를 고려해야 합니다.
2. PWM 신호 정확도
- PWM 신호의 정밀도가 부족하면 서보모터가 떨리거나 원하는 각도로 정확히 가지 않을 수 있습니다.
- STM32의 TIMx PWM 기능을 사용하는 것이 가장 안정적인 방법입니다.
3. 부하 토크 제한
- 서보모터의 최대 토크를 초과하는 하중이 걸리면 모터가 손상될 수 있습니다.
- 데이터시트에서 최대 토크 값을 확인하고, 필요한 경우 기어비를 조정하거나 더 강한 서보모터를 선택해야 합니다.
반응형