Skip to main content
Summary

한 칸씩 움직이는 모터

DC 모터는 전원을 넣으면 계속 돈다. 서보 모터는 원하는 각도를 명령하면 그 각도로 움직인다. 그렇다면 스텝 모터는 무엇이 다를까? 스텝 모터는 이름 그대로 '스텝', 즉 정해진 걸음 단위로 움직이는 모터다.

예를 들어 한 바퀴가 200스텝인 스텝 모터가 있다고 해보자. 이 모터는 한 번의 스텝 신호를 받을 때마다 1.8도씩 회전한다. 100번 신호를 보내면 반 바퀴, 200번 신호를 보내면 한 바퀴를 돈다. 마치 회전하는 자를 눈금 하나씩 밀어 움직이는 것과 비슷하다.

이 특징 때문에 스텝 모터는 정확한 위치 이동이 필요한 장치에서 자주 사용된다. 3D 프린터의 노즐이 좌우로 움직이고, CNC 장비의 공구가 정해진 경로를 따라 이동하며, 카메라 슬라이더가 아주 천천히 일정한 속도로 움직일 수 있는 이유 뒤에는 스텝 모터가 있다.

스텝 모터의 매력은 단순하다. '몇 걸음 움직였는지 세면 위치를 알 수 있다.' 물론 실제 세계는 조금 더 까다롭다. 무거운 물체를 너무 급하게 움직이면 모터가 명령을 따라가지 못하고 스텝을 놓칠 수 있다. 이것을 탈조라고 한다. 이 장에서는 스텝 모터의 기본 원리부터 드라이버 사용법, 전류 제한, 탈조를 줄이는 방법까지 차근차근 살펴본다.

스텝 모터

DC 모터, 서보 모터, 스텝 모터의 차이

앞 장에서 살펴본 서보 모터는 각도 제어가 편리했다. 신호선에 원하는 각도에 해당하는 PWM 신호를 주면, 내부 회로가 모터를 돌려 그 위치로 맞춰준다. 반면 스텝 모터는 보통 내부에 위치 제어 회로가 없다. 대신 외부 제어 보드가 스텝 신호를 하나씩 보내고, 드라이버가 코일에 전류를 흘려 모터를 한 칸씩 움직인다.

구분DC 모터서보 모터스텝 모터
기본 움직임전원을 넣으면 연속 회전지정한 각도로 이동정해진 스텝 단위로 회전
위치 제어별도 센서 필요내부 회로가 각도 제어스텝 수를 세어 위치 추정
속도 제어PWM으로 비교적 쉬움속도 제어보다는 각도 제어 중심스텝 펄스 간격으로 제어
대표 용도바퀴, 팬, 펌프로봇팔 관절, 팬틸트3D 프린터, CNC, 정밀 이송 장치
주의점위치를 모름회전 범위 제한탈조와 발열 관리 필요

스텝 모터는 '정확히 몇 칸 움직였는지'를 다루기 좋다. 하지만 이 말이 곧 '무조건 정확하다'는 뜻은 아니다. 제어 보드는 스텝 신호를 보냈다고 믿지만, 모터가 실제로 그만큼 움직였는지는 별도의 센서가 없으면 확인할 수 없다. 그래서 스텝 모터는 대체로 열린 루프 방식으로 사용된다. 열린 루프란 명령은 보내지만 결과를 직접 확인하지 않는 제어 방식을 말한다.

이 방식은 단순하고 빠르지만, 모터가 힘에 밀리거나 너무 빠르게 가속하면 문제가 생긴다. 3D 프린터에서 레이어가 갑자기 한쪽으로 밀려 출력되는 현상이 대표적인 탈조의 결과다. 제어 보드는 계속 정상적으로 움직였다고 생각하지만, 실제 모터는 중간에 몇 스텝을 놓친 것이다.

스텝 모터 안에서는 무슨 일이 일어날까

스텝 모터 안에는 여러 개의 코일과 자석이 들어 있다. 제어 회로가 코일에 순서대로 전류를 흘리면, 내부 자석이 그 자기장에 끌려 조금씩 회전한다. 한 코일을 켜고, 다음 코일을 켜고, 다시 다음 조합으로 바꾸는 식으로 자기장의 방향을 바꾸면 회전자가 한 칸씩 따라 움직인다.

가장 흔히 만나는 소형 스텝 모터는 바이폴라 스텝 모터다. 보통 선이 4개이고, 내부에는 두 쌍의 코일이 있다. 각 코일에 전류를 어느 방향으로 흘리느냐에 따라 자기장의 방향이 바뀐다. 이 전류 방향을 빠르고 정확하게 바꿔주는 부품이 스텝 모터 드라이버다.

여기서 중요한 점이 하나 있다. 스텝 모터는 아두이노나 ESP32의 GPIO 핀에 직접 연결해서 돌릴 수 없다. GPIO 핀은 신호를 줄 수는 있지만, 모터 코일을 구동할 만큼 큰 전류를 공급할 수 없다. LED를 켤 때보다 훨씬 많은 전류가 필요하고, 코일은 전류가 갑자기 바뀔 때 전기적 충격도 만든다. 그래서 반드시 드라이버를 중간에 넣어야 한다.

풀스텝, 하프스텝, 마이크로스텝

스텝 모터를 다루다 보면 풀스텝, 하프스텝, 마이크로스텝이라는 말을 자주 듣게 된다. 모두 모터를 얼마나 잘게 나누어 움직일 것인가에 관한 방식이다.

풀스텝은 모터의 기본 스텝 단위로 움직이는 방식이다. 1.8도 스텝 모터라면 한 번에 1.8도씩 움직인다. 제어가 단순하고 토크가 비교적 강하지만, 저속에서 덜컥덜컥 움직이는 느낌이 날 수 있다. 모터를 손에 들고 천천히 돌려보면 작은 진동이 느껴지는 경우가 많다.

하프스텝은 풀스텝의 중간 위치까지 사용하는 방식이다. 1.8도 모터라면 0.9도 단위처럼 움직일 수 있다. 한 바퀴 200스텝 모터가 400스텝처럼 동작하는 셈이다. 움직임이 조금 더 부드러워지고 위치 분해능도 올라간다.

마이크로스텝은 코일 전류를 더 세밀하게 조절해서 한 스텝을 여러 조각으로 나누는 방식이다. 예를 들어 1/16 마이크로스텝으로 설정하면, 한 바퀴 200스텝 모터가 3200개의 작은 단계로 나뉜다. 3D 프린터나 CNC에서 움직임이 부드럽게 보이는 이유 중 하나가 바로 마이크로스텝이다.

하지만 마이크로스텝을 너무 마법처럼 생각하면 안 된다. 마이크로스텝은 움직임을 부드럽게 만들고 진동을 줄이는 데 큰 도움이 되지만, 실제 위치 정확도가 설정한 분해능만큼 완벽하게 올라가는 것은 아니다. 벨트의 탄성, 나사의 백래시, 모터 토크, 마찰, 프레임 강성 같은 기계적 요소가 함께 영향을 준다. 또한 아주 작은 마이크로스텝 하나하나는 외부 힘에 쉽게 밀릴 수 있다.

정리하면 이렇게 이해하면 된다.

  • 풀스텝은 단순하고 힘이 좋지만 움직임이 거칠 수 있다.

  • 하프스텝은 풀스텝보다 부드럽고 중간 위치를 사용할 수 있다.

  • 마이크로스텝은 진동과 소음을 줄이고 정밀한 이송에 유리하지만, 기계적 정확도를 무한히 높여주지는 않는다.

스텝 수로 위치를 계산하기

스텝 모터의 재미는 숫자로 움직임을 계산할 수 있다는 점이다. 한 바퀴가 200스텝인 모터를 예로 들어보자. 풀스텝으로 50스텝을 보내면 90도, 100스텝을 보내면 180도, 200스텝을 보내면 360도다.

여기에 마이크로스텝을 적용하면 계산이 조금 바뀐다. 1/16 마이크로스텝이면 한 바퀴에 필요한 펄스 수는 200 × 16 = 3200펄스가 된다. 즉, 제어 보드가 STEP 핀에 펄스를 3200번 보내야 모터가 한 바퀴 돈다.

이 계산은 회전 운동뿐 아니라 직선 운동에도 사용할 수 있다. 예를 들어 GT2 벨트와 20톱니 풀리를 사용한다고 해보자. GT2 벨트는 톱니 간격이 2mm이므로, 20톱니 풀리 한 바퀴는 벨트를 40mm 이동시킨다. 모터가 1/16 마이크로스텝이고 한 바퀴가 3200펄스라면, 펄스 하나당 이론상 이동 거리는 40mm ÷ 3200 = 0.0125mm다.

이 숫자를 보면 굉장히 정밀해 보인다. 그러나 실제 장치에서는 벨트가 늘어나고, 풀리가 미끄러질 수 있고, 프레임이 휘기도 한다. 그래서 스텝 모터 제어에서는 전자 회로만큼 기계 구조도 중요하다. 정밀 제어는 좋은 모터 하나로 완성되는 것이 아니라, 튼튼한 프레임과 적절한 전원, 올바른 드라이버 설정, 부드러운 가속 제어가 함께 만들어내는 결과다.

A4988과 DRV8825 드라이버

스텝 모터 실습에서 가장 자주 만나는 드라이버 모듈은 A4988과 DRV8825 계열이다. 두 모듈 모두 STEP과 DIR 방식으로 제어한다. STEP 핀에 펄스를 한 번 보내면 모터가 한 단계 움직이고, DIR 핀의 HIGH 또는 LOW 상태에 따라 회전 방향이 바뀐다. 이 방식은 매우 직관적이다.

아두이노나 ESP32 입장에서 보면 스텝 모터 제어는 생각보다 단순하다. 방향 핀을 정하고, 스텝 핀을 빠르게 켰다 껐다 하면 된다. 복잡한 일은 드라이버가 맡는다. 드라이버는 모터 코일에 흐르는 전류 방향을 바꾸고, 마이크로스텝을 만들고, 설정된 전류 이상이 흐르지 않도록 제한한다.

일반적인 A4988 또는 DRV8825 모듈에는 다음과 같은 핀이 있다.

핀역할
VMOT모터용 전원 입력
GND모터 전원 GND 및 논리 GND
VDD제어 신호용 전원
STEP스텝 펄스 입력
DIR회전 방향 입력
ENABLE드라이버 출력 활성화
MS1, MS2, MS3마이크로스텝 설정
1A, 1B, 2A, 2B모터 코일 연결
RESET, SLEEP드라이버 동작 상태 제어

모듈에 따라 핀 이름이나 배치가 조금 다를 수 있으므로, 실제 연결 전에는 반드시 사용하는 모듈의 핀맵을 확인해야 한다. 특히 A4988과 DRV8825는 모양이 비슷해 보이지만 핀 기능, 전류 설정, 마이크로스텝 조합이 완전히 같지 않을 수 있다. 겉모양만 보고 꽂으면 드라이버가 뜨겁게 달아오르거나 고장 날 수 있다.

전류 제한이 중요한 이유

스텝 모터를 처음 다룰 때 가장 많이 하는 실수는 모터의 정격 전압만 보고 전원을 연결하는 것이다. 스텝 모터에는 2.8V, 3.3V처럼 낮은 전압이 적혀 있는 경우가 있다. 그런데 3D 프린터나 CNC에서는 이런 모터를 12V나 24V 전원과 함께 사용하는 경우가 흔하다. 이상하게 보일 수 있지만, 여기에는 이유가 있다.

스텝 모터 코일은 전류가 빨리 올라가야 빠른 회전에 대응할 수 있다. 전원 전압이 높으면 코일 전류가 목표값까지 더 빠르게 도달한다. 대신 그대로 두면 전류가 너무 많이 흘러 모터와 드라이버가 손상될 수 있다. 그래서 A4988이나 DRV8825 같은 드라이버는 전류 제한 기능을 사용한다. 높은 전압을 사용하되, 코일에 흐르는 최대 전류는 설정값 이하로 제한하는 방식이다.

이 전류 제한을 제대로 맞추지 않으면 두 가지 문제가 생긴다. 너무 낮게 설정하면 모터 힘이 부족해서 쉽게 탈조한다. 반대로 너무 높게 설정하면 모터와 드라이버가 과열된다. 스텝 모터는 멈춰 있어도 전류를 계속 흘려 위치를 붙잡는 경우가 많기 때문에, '움직이지 않는데 왜 뜨겁지?'라는 상황이 자연스럽게 발생한다.

전류 제한을 맞출 때는 보통 드라이버 모듈의 작은 가변저항을 돌려 기준 전압, 즉 Vref를 조정한다. Vref와 제한 전류의 관계식은 모듈 종류와 센스 저항 값에 따라 달라진다. 같은 A4988이라도 보드에 사용된 저항 값이 다르면 계산이 달라질 수 있다. 따라서 인터넷에서 본 공식 하나를 무작정 적용하기보다, 자신이 가진 모듈의 자료나 판매 페이지에서 전류 설정 방법을 확인하는 습관이 필요하다.

실습에서는 처음부터 최대 전류로 맞추지 않는 것이 좋다. 모터가 안정적으로 움직이는 최소 전류를 찾고, 드라이버 온도를 확인하면서 조금씩 올리는 편이 안전하다. 드라이버 칩을 손으로 만져 확인하는 것은 위험할 수 있으므로, 전원을 끈 뒤 식은 상태에서 방열판 상태를 살피거나 비접촉 온도계, 열화상 카메라를 사용할 수 있다면 더 좋다.

냉각은 선택이 아니라 설계다

스텝 모터 드라이버는 작은 보드 위에서 생각보다 많은 열을 낸다. 특히 모터 전류를 높게 설정하고 장시간 구동하면 A4988이나 DRV8825 칩이 뜨거워진다. 온도가 너무 높아지면 드라이버가 스스로 출력을 줄이거나 꺼질 수 있고, 심하면 손상될 수 있다. 모터가 갑자기 힘을 잃거나 덜컥거리며 멈춘다면 열 보호가 동작했을 가능성도 있다.

작은 방열판을 드라이버 칩 위에 붙이는 것만으로도 도움이 된다. 하지만 방열판은 열을 공기 중으로 내보내야 효과가 있다. 밀폐된 박스 안에 방열판만 붙여놓으면 뜨거운 공기가 갇혀 큰 효과를 보기 어렵다. 3D 프린터 제어 보드 주변에 작은 팬이 달려 있는 이유도 이 때문이다.

스텝 모터 시스템을 설계할 때는 모터 힘뿐 아니라 열의 흐름도 함께 생각해야 한다. 전류를 너무 높게 잡아 억지로 힘을 내는 것보다, 기어비를 바꾸거나, 더 큰 모터를 쓰거나, 마찰을 줄이거나, 가속 프로파일을 부드럽게 만드는 편이 훨씬 안정적일 때가 많다.

기본 연결 실습

간단한 실습 회로를 생각해보자. 아두이노 UNO와 A4988, NEMA 17급 바이폴라 스텝 모터를 사용한다. ESP32를 사용할 때도 원리는 같다. 다만 ESP32는 3.3V 논리 신호를 사용하므로, 사용하는 드라이버 모듈이 3.3V STEP/DIR 신호를 안정적으로 인식하는지 확인해야 한다.

필요한 부품은 다음과 같다.

  • 아두이노 UNO 또는 ESP32 개발 보드

  • A4988 또는 DRV8825 스텝 모터 드라이버 모듈

  • 바이폴라 스텝 모터

  • 모터용 외부 전원 공급 장치

  • 브레드보드 또는 드라이버 쉴드

  • 점퍼선과 전해 커패시터

연결의 핵심은 모터 전원과 제어 보드 전원을 구분하면서도 GND는 반드시 공유하는 것이다. 앞에서 전원 장에서 배운 내용이 여기서 다시 등장한다. 제어 보드는 STEP과 DIR 신호를 내보내고, 모터 전류는 외부 전원과 드라이버가 담당한다.

드라이버 핀연결 예
VDD아두이노 5V 또는 ESP32 3.3V
GND제어 보드 GND와 공통 연결
VMOT모터용 외부 전원 +
VMOT 옆 GND모터용 외부 전원 -
STEP제어 보드 디지털 출력 핀
DIR제어 보드 디지털 출력 핀
ENABLEGND에 연결하면 활성화되는 모듈이 많음
1A, 1B, 2A, 2B스텝 모터의 두 코일 쌍

VMOT과 GND 사이에는 전해 커패시터를 가까이 달아주는 것이 좋다. 모터 전류가 빠르게 변할 때 전원 라인에 순간적인 출렁임이 생기는데, 커패시터가 이를 어느 정도 완화해준다. 전원 배선은 너무 가늘거나 길지 않게 하고, 모터 전원과 제어 보드 전원을 헷갈리지 않도록 색상을 구분하면 실수를 줄일 수 있다.

코일 쌍을 찾는 방법도 알아두면 좋다. 4선식 스텝 모터의 선 네 가닥 중 두 가닥씩이 한 코일이다. 멀티미터의 저항 측정 모드로 두 선 사이의 저항을 재보면, 같은 코일 쌍에서는 몇 Ω 정도의 저항이 측정된다. 서로 다른 코일에 속한 선끼리는 연결되지 않은 것처럼 보인다. 코일 쌍을 잘못 연결하면 모터가 회전하지 않고 덜덜 떨기만 한다.

STEP과 DIR로 한 바퀴 돌리기

아래 코드는 STEP 핀에 펄스를 200번 보내 모터를 한 바퀴 돌리고, 잠시 멈춘 뒤 반대 방향으로 한 바퀴 돌리는 가장 기본적인 예다. 모터가 1.8도, 풀스텝 설정이라고 가정한다. 마이크로스텝을 1/16으로 설정했다면 한 바퀴에 200번이 아니라 3200번의 펄스가 필요하다.

const int STEP_PIN = 3;
const int DIR_PIN = 4;
const int ENABLE_PIN = 5;

const int STEPS_PER_REV = 200;

void setup() {
  pinMode(STEP_PIN, OUTPUT);
  pinMode(DIR_PIN, OUTPUT);
  pinMode(ENABLE_PIN, OUTPUT);

  digitalWrite(ENABLE_PIN, LOW);
}

void stepMotor(int steps, int delayUs) {
  for (int i = 0; i < steps; i++) {
    digitalWrite(STEP_PIN, HIGH);
    delayMicroseconds(delayUs);
    digitalWrite(STEP_PIN, LOW);
    delayMicroseconds(delayUs);
  }
}

void loop() {
  digitalWrite(DIR_PIN, HIGH);
  stepMotor(STEPS_PER_REV, 800);
  delay(500);

  digitalWrite(DIR_PIN, LOW);
  stepMotor(STEPS_PER_REV, 800);
  delay(500);
}

이 코드는 단순하지만 스텝 모터 제어의 핵심을 거의 모두 담고 있다. STEP 핀을 한 번 HIGH로 올렸다가 LOW로 내리면 펄스 하나가 만들어진다. 이 펄스 하나가 한 스텝 이동 명령이다. delayMicroseconds 값이 작을수록 펄스 간격이 짧아지고, 모터는 더 빠르게 돌려고 한다.

하지만 delayUs를 갑자기 너무 작게 만들면 모터가 출발하지 못하고 떨기만 할 수 있다. 정지해 있던 물체를 순간적으로 빠르게 움직이려 하면 관성이 버티기 때문이다. 이것이 가속 제어가 필요한 이유다.

탈조는 왜 생길까

탈조는 제어 보드가 보낸 스텝 수와 실제 모터가 움직인 스텝 수가 달라지는 현상이다. 로봇이나 장비 입장에서는 꽤 치명적이다. 제어 보드는 100mm 이동했다고 생각하는데 실제로는 96mm만 이동했다면, 그 뒤의 모든 위치 계산이 틀어진다.

탈조가 생기는 원인은 여러 가지다.

  • 출발 속도를 너무 높게 설정했다.

  • 가속과 감속 없이 갑자기 빠른 속도로 명령했다.

  • 부하가 너무 무겁거나 마찰이 크다.

  • 전류 제한을 너무 낮게 설정해 모터 토크가 부족하다.

  • 전원 전압이 낮거나 전원 공급 장치의 전류 용량이 부족하다.

  • 드라이버가 과열되어 출력이 불안정해졌다.

  • 특정 속도 구간에서 기계 구조와 모터 진동이 공진을 일으켰다.

초보자는 탈조를 소프트웨어 문제로만 생각하기 쉽다. 하지만 실제로는 전원, 드라이버 전류, 모터 선정, 기계 조립, 축 정렬, 마찰, 배선 상태가 모두 관련된다. 스텝 모터가 덜덜 떨면서 돌지 않는다면 코드만 붙잡고 있기보다 코일 배선, 전류 제한, 전원 용량, 마이크로스텝 설정을 함께 확인해야 한다.

가속과 감속 프로파일

스텝 모터를 안정적으로 움직이려면 처음부터 최고 속도로 달리게 해서는 안 된다. 자동차가 출발할 때 서서히 속도를 올리고, 멈출 때 서서히 속도를 줄이는 것처럼 스텝 모터도 가속과 감속이 필요하다.

가장 기본적인 방법은 사다리꼴 속도 프로파일이다. 처음에는 느린 속도로 시작하고, 일정한 비율로 속도를 올린 뒤, 목표 속도에 도달하면 그 속도를 유지한다. 목적지에 가까워지면 다시 속도를 줄여 정지한다. 속도 그래프를 그리면 사다리꼴 모양이 되기 때문에 이런 이름이 붙었다.

가속 제어를 적용하면 다음과 같은 장점이 있다.

  • 정지 상태에서 출발할 때 탈조 가능성이 줄어든다.

  • 무거운 부하를 더 안정적으로 움직일 수 있다.

  • 급정지로 인한 진동과 기계적 충격을 줄일 수 있다.

  • 같은 모터라도 실제 사용 가능한 최고 속도를 높일 수 있다.

아주 단순한 방식으로는 스텝 간격을 조금씩 줄이는 방법이 있다. 스텝 간격이 길면 느리게 움직이고, 스텝 간격이 짧으면 빠르게 움직인다. 예를 들어 처음에는 2000마이크로초 간격으로 펄스를 보내고, 조금씩 줄여 600마이크로초까지 내려가면 모터가 서서히 빨라진다.

const int STEP_PIN = 3;
const int DIR_PIN = 4;

void setup() {
  pinMode(STEP_PIN, OUTPUT);
  pinMode(DIR_PIN, OUTPUT);
  digitalWrite(DIR_PIN, HIGH);
}

void oneStep(int delayUs) {
  digitalWrite(STEP_PIN, HIGH);
  delayMicroseconds(delayUs);
  digitalWrite(STEP_PIN, LOW);
  delayMicroseconds(delayUs);
}

void loop() {
  for (int d = 2000; d >= 600; d -= 20) {
    oneStep(d);
  }

  for (int i = 0; i < 400; i++) {
    oneStep(600);
  }

  for (int d = 600; d <= 2000; d += 20) {
    oneStep(d);
  }

  delay(1000);
}

이 코드는 완성도 높은 모션 제어 코드는 아니지만, 가속과 감속의 감각을 잡기에는 충분하다. 실제 프로젝트에서는 라이브러리를 사용해 가속도, 최고 속도, 목표 위치를 설정하는 방식이 편리하다. 중요한 것은 '스텝 모터는 펄스만 빠르게 보내면 된다'에서 멈추지 않고, '얼마나 부드럽게 속도를 바꿀 것인가'까지 생각하는 것이다.

정밀 위치 제어의 실제 감각

스텝 모터는 정밀해 보이지만, 실제 제작에서는 몇 가지 감각을 익혀야 한다. 첫째, 모터가 낼 수 있는 힘은 속도에 따라 달라진다. 스텝 모터는 낮은 속도에서는 힘이 좋지만, 속도가 올라갈수록 토크가 줄어드는 경향이 있다. 그래서 고속 이동이 필요하면 전원 전압, 드라이버 성능, 모터 인덕턴스, 부하 무게를 함께 고려해야 한다.

둘째, 멈춰 있을 때도 전류를 소비한다. 스텝 모터는 위치를 붙잡기 위해 정지 상태에서도 코일에 전류를 흘린다. 그래서 배터리로 움직이는 로봇에서는 전력 소모가 커질 수 있다. 필요하지 않을 때는 ENABLE 핀으로 드라이버 출력을 끄거나, 홀딩 전류를 낮추는 방식을 고려할 수 있다. 단, 출력을 끄면 모터가 외부 힘에 의해 움직일 수 있다.

셋째, 기계적인 유격은 코드로 완전히 해결할 수 없다. 리드스크류나 기어, 벨트 구조에는 조금씩 빈틈이 있다. 방향을 바꿀 때 이 빈틈만큼 실제 위치가 바로 따라오지 않는 현상을 백래시라고 한다. CNC나 로봇팔처럼 방향 전환이 많은 장치에서는 백래시가 위치 오차로 나타날 수 있다.

넷째, 기준 위치를 잡는 과정이 필요하다. 스텝 모터는 전원을 켰을 때 자신이 어디에 있는지 모른다. 그래서 3D 프린터는 처음에 축을 끝까지 이동시켜 리미트 스위치를 누르는 홈 동작을 수행한다. 이 과정을 통해 '여기가 0번 위치'라고 정하고, 그 다음부터 스텝 수를 세어 위치를 추정한다. 나중에 위치 제어를 다룰 때 이 개념이 다시 중요하게 등장한다.

로봇에서는 어디에 쓸까

스텝 모터는 바퀴 로봇의 주행용 모터로도 사용할 수 있지만, 항상 최선은 아니다. 일반적인 이동 로봇은 바닥 상태가 일정하지 않고 충격과 미끄러짐이 많다. 이 경우 스텝 수를 세어도 실제 이동 거리가 정확히 맞지 않을 수 있다. 또한 스텝 모터는 전력 소모와 발열이 큰 편이라 배터리 기반 로봇에서는 부담이 될 수 있다.

반면 특정 위치로 정확히 움직여야 하는 부분에는 매우 유용하다. 작은 로봇팔의 슬라이더, 자동 문 개폐 장치, 센서를 좌우로 스캔하는 회전대, 카메라 포커스 조절 장치, 리니어 액추에이터 같은 곳에서 스텝 모터의 장점이 살아난다. 특히 '회전 수를 세어 직선 이동으로 바꾸는 구조'와 잘 어울린다.

예를 들어 거리 센서를 좌우로 조금씩 돌려 주변 지도를 만들고 싶다면 서보 모터도 사용할 수 있다. 하지만 일정한 각도 간격으로 많은 지점을 반복 측정해야 하고, 더 넓은 회전 범위가 필요하다면 스텝 모터가 좋은 선택이 될 수 있다. 카메라가 달린 이동 로봇에서 카메라 슬라이더나 회전대를 만들 때도 스텝 모터를 활용할 수 있다.

자주 만나는 문제와 해결 방향

스텝 모터는 처음 연결했을 때 바로 부드럽게 돌지 않는 경우가 많다. 하지만 증상을 잘 관찰하면 원인을 좁혀갈 수 있다.

증상가능한 원인확인할 것
모터가 덜덜 떨기만 한다코일 쌍 연결 오류멀티미터로 코일 쌍 확인
모터가 전혀 움직이지 않는다ENABLE, SLEEP, RESET 상태 문제모듈 핀 연결과 활성 조건 확인
한 방향으로만 이상하게 돈다DIR 핀 연결 오류DIR 핀 전압과 코드 확인
저속에서는 도는데 고속에서 멈춘다가속 부족 또는 토크 부족가속 프로파일, 전류 제한, 전원 확인
드라이버가 너무 뜨겁다전류 제한 과다 또는 냉각 부족Vref 재조정, 방열판과 팬 추가
위치가 조금씩 틀어진다탈조 또는 기계적 미끄러짐부하, 벨트 장력, 풀리 고정 나사 확인

특히 풀리 고정 나사는 의외로 자주 문제를 만든다. 모터 축은 돌고 있는데 풀리가 축에서 미세하게 미끄러지면, 전자 회로와 코드는 모두 정상이어도 위치가 틀어진다. 로봇 제작에서는 전기적 디버깅과 기계적 디버깅을 함께 해야 한다.

실습할 때의 안전 습관

스텝 모터 드라이버는 작지만 민감하다. 전원을 켠 상태에서 모터 선을 뽑거나 꽂으면 드라이버가 손상될 수 있다. 코일에 흐르던 전류가 갑자기 끊기면서 높은 전압이 발생할 수 있기 때문이다. 배선을 바꿀 때는 항상 전원을 끄고, 커패시터가 방전될 시간을 잠깐 기다리는 습관을 들이자.

또한 모터 전원 극성을 반대로 연결하지 않도록 주의해야 한다. VMOT과 GND를 헷갈리면 드라이버가 즉시 망가질 수 있다. 브레드보드로 실습할 때는 모터 전류가 브레드보드의 얇은 금속 접점을 지나가지 않도록 주의해야 한다. 작은 모터 실습은 가능할 수 있지만, 전류가 큰 모터는 터미널 블록이나 전용 드라이버 보드, 두꺼운 배선을 사용하는 편이 안전하다.

스텝 모터 자체도 뜨거워질 수 있다. 일반적으로 스텝 모터는 동작 중 따뜻하거나 뜨거운 편이지만, 손을 대기 어려울 정도라면 전류 설정과 냉각을 다시 확인해야 한다. 장시간 동작하는 장치라면 5분 테스트가 아니라 30분, 1시간 이상 연속 구동하면서 온도와 안정성을 확인해야 한다.

핵심 정리

스텝 모터는 정해진 각도 단위로 움직이는 모터다. DC 모터처럼 그냥 계속 도는 모터도 아니고, 서보 모터처럼 내부 회로가 각도를 알아서 맞춰주는 모터도 아니다. 제어 보드가 STEP 펄스를 보내고, 드라이버가 코일 전류를 제어하며, 사용자는 스텝 수를 세어 위치를 추정한다.

풀스텝은 단순하고 힘이 좋으며, 하프스텝과 마이크로스텝은 움직임을 더 부드럽게 만든다. 하지만 마이크로스텝이 실제 기계 정확도를 무한히 높여주지는 않는다. 정밀한 장치를 만들려면 모터뿐 아니라 프레임, 벨트, 나사, 전원, 드라이버, 냉각까지 함께 설계해야 한다.

A4988과 DRV8825 같은 드라이버를 사용할 때는 전류 제한이 매우 중요하다. 전류가 낮으면 힘이 부족하고, 전류가 높으면 발열과 고장이 따라온다. 드라이버에는 방열판과 통풍이 필요할 수 있으며, 모터 전원과 제어 보드 전원은 역할을 나누되 GND는 공통으로 연결해야 한다.

마지막으로 스텝 모터 제어의 핵심은 속도 변화다. 정지 상태에서 갑자기 빠르게 돌리면 탈조가 발생하기 쉽다. 가속과 감속 프로파일을 적용하면 같은 모터로도 훨씬 안정적인 움직임을 만들 수 있다.

다음 장에서는 모터 드라이버를 더 넓게 살펴본다. DC 모터에서 사용하는 H-Bridge, L298N 계열, TB6612 계열, 그리고 드라이버를 고를 때 꼭 확인해야 하는 전압과 전류 기준을 정리한다. 모터를 움직이는 일은 결국 '제어 보드가 직접 힘을 내는 것이 아니라, 적절한 드라이버를 통해 힘을 다루는 것'이라는 사실을 다시 확인하게 될 것이다.

책 목록

센서와 모터로 시작하는 실전 로봇 만들기

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기