스텝 모터 제어
일반
스텝 모터(Step Motor) 또는 스테퍼 모터(Stepper Motor)라고 불리며, 펄스가 입력될 때 마다 일정한 각도만큼 모터가 회전하므로 정밀한 위치 제어 또는 각도 제어에 사용할 수 있습니다. 여러 대의 모터를 동시에 운전할 수 있으며, 각 모터 별로 회전 또는 대기 동작을 연속적으로 구성할 수 있습니다. 또한 가속 및 감속을 이용하여 부드러운 동작을 구현할 수 있습니다.


사용 가능한 GPIO
- 라즈베리파이 0~4
스텝 모터는 드라이버를 통해 구동되며 드라이버의 타입에 대한 설명과 대표적인 모델은 아래와 같습니다.
타입 | 설명 | 모델 |
---|---|---|
1 Pulse |
• STEP(PUL) : Pulse 입력 |
A4988, DRV8825, TB6600, A3967 외 |
2 Pulse |
• CW : 정회전 Pulse 입력 |
DCM8027, DCM8054, MD2/5 시리즈 외 |
4 Pulse |
• IN1: Pulse 1 입력 |
L298N, L293D, ULN2003외 |
명령
[INIT]
스텝 모터의 초기설정을 입력합니다.
항목 | 타입 | 설명 |
---|---|---|
드라이버 타입 | WRITE | 스텝 모터 드라이버의 타입을 선택합니다. (1 pulse, 2 pulse, 4 pulse) |
1회전 스텝 수 | WRITE | 스텝 모터가 1회전하는데 필요한 스텝 수를 입력합니다. |
드라이버 타입: 1 pulse (STEP/DIR) 선택시
항목 | 타입 | 설명 |
---|---|---|
STEP/PUL 핀 | WRITE | 드라이버의 STEP/PUL 과 연결할 GPIO 핀을 입력합니다. |
DIR 핀 | WRITE | 드라이버의 DIR 와 연결할 GPIO핀을 입력합니다. |
드라이버 타입: 2 pulse (CW/CCW) 선택시
항목 | 타입 | 설명 |
---|---|---|
CW 핀 | WRITE | 드라이버의 CW 와 연결할 GPIO핀을 입력합니다. |
CCW 핀 | WRITE | 드라이버의 CCW 와 연결할 GPIO핀을 입력합니다. |
드라이버 타입: 4 pulse (IN1~IN4) 선택시
항목 | 타입 | 설명 |
---|---|---|
IN1 핀 | WRITE | 드라이버의 IN1와 연결할 GPIO핀을 입력합니다. |
IN2 핀 | WRITE | 드라이버의 IN2와 연결할 GPIO핀을 입력합니다. |
IN3 핀 | WRITE | 드라이버의 IN3와 연결할 GPIO핀을 입력합니다. |
IN4 핀 | WRITE | 드라이버의 IN4와 연결할 GPIO핀을 입력합니다. |
Excitation Mode * | WRITE | 여자(Excitation) 모드를 선택합니다. (Full step, Half step) |
항목 | 타입 | 설명 |
---|---|---|
펄스 생성 시간(ms) * | WRITE | 출력 펄스를 생성하는 시간을 입력합니다. (고급) |
동기 제어 그룹 | WRITE | 동기 제어를 사용할 경우 이 모터가 속한 그룹 번호를 설정합니다. |
라즈베리파이의 사양이 낮거나, 동시에 실행되는 작업이 많을수록 스텝 모터의 회전이 연속적이지 않고 간헐적으로 끊기는 현상이 발생할 수 있으며 이때 펄스 생성 시간을 증가시키면 문제가 해결될 수 있습니다.
다만, 스텝 모터의 시작, 정지, 일시정지, 재시작시의 반응 속도는 이 값이 커질수록 느려집니다. 예를 들어 펄스 생성시간이 1000ms (1초)이면 정지 명령 후 실제 스텝 모터가 정지할 때 까지 걸리는 시간이 최대 1초가 될 수 있습니다.
그러므로 빠른 응답 속도가 필요한 경우에는 이 값을 최소값인 10ms로 설정하고 가급적 높은 사양의 라즈베리파이를 사용하며 동시에 실행되는 작업을 최소화해야 합니다.
[ADD_MOTION]
스텝모터의 회전 동작을 버퍼에 추가합니다. 목표속도와 회전량(회전수 또는 펄스)으로 모터를 회전하며 가속 및 감속을 사용하여 부드럽게 시작하고 정지할 수 있습니다. 이 명령과 ADD_DELAY 명령을 조합하여 여러 개의 회전 또는 대기 동작이 연속적으로 실행되도록 구성할 수 있습니다.
항목 | 타입 | 설명 |
---|---|---|
속도 (rpm) | WRITE | 스텝모터의 분당 회전수 (rpm)을 입력합니다. |
회전단위 | WRITE | 회전단위를 선택합니다. (스텝수, 회전수, 좌표, 연속회전) |
스텝수 1 | WRITE | 회전할 스텝수를 입력합니다. 음수를 입력하면 반대방향으로 회전합니다. |
회전수 2 | WRITE | 회전할 회전수를 입력합니다. 음수를 입력하면 반대방향으로 회전합니다. |
좌표 3 | WRITE | 이동할 좌표를 입력합니다. |
회전방향 4 | WRITE | 회전방향을 선택합니다. (정방향, 역방향) |
가속 (rpm/s) 5 | WRITE | 회전을 시작할때의 가속량 (1초당 속도의 증가량)을 입력합니다. |
감속 (rpm/s) 5 | WRITE | 회전을 종료할때의 감속량 (1초당 속도의 감소량)을 입력합니다. |
2 회전단위가 “회전수” 일때만 표시됩니다.
3 회전단위가 “좌표” 일때만 표시됩니다.
4 회전단위가 “연속회전”일때만 표시됩니다.
5 예를 들어 정지상태에서 목표 회전 속도가 60 rpm 이고 가속과 감속이 60 rpm/s 이면 회전을 시작할때 1초에 걸쳐서 0->60rpm 으로 부드럽게 가속하고 회전을 종료할때 1초에 걸쳐 60-> 0rpm으로 부드럽게 감속합니다.
[ADD_DELAY]
스텝모터의 대기 동작을 버퍼에 추가합니다. 모터는 설정한 시간만큼 정지상태에서 대기합니다. 이 명령과 ADD_MOTION 명령을 조합하여 여러 개의 회전 또는 대기 동작이 연속적으로 실행되도록 구성할 수 있습니다.
항목 | 타입 | 설명 |
---|---|---|
대기시간 | WRITE | 스텝모터가 정지상태에서 대기할 시간을 입력합니다. |
[RUN]
버퍼에 저장된 회전 (ADD_MOTION) 또는 대기 (ADD_DELAY) 동작에 따라 스텝모터를 운전합니다. 아래는 운전 예시입니다.

[STOP]
스텝모터를 정지합니다.
[PAUSE]
스텝모터를 일시정지 합니다.
[RESUME]
스텝모터를 재시작 합니다.
[CLEAR]
스텝모터의 버퍼를 삭제하고 초기화합니다.
[RUN_SYNC]
여러대의 스텝모터를 동기제어 (Syncronized motion) 모드로 운전합니다. 여러대의 스텝모터를 정확한 타이밍으로 제어할 필요가 있을 경우 사용합니다. 만약 동작이 먼저 완료된 모터가 있다면 나머지 모터의 동작이 모두 완료될때까지 대기해야 합니다.
항목 | 타입 | 설명 |
---|---|---|
그룹 번호 | WRITE | 동기제어 모드로 운전할 스텝 모터 그룹 번호를 입력합니다. |
아래는 2대의 스텝 모터를 동기제어 모드로 운전하는 예입니다.

2. 먼저 동작이 완료된 모터는 나머지 모터가 모두 완료될때까지 대기합니다.
3. 동기제어가 완료됩니다.
[STOP_ALL]
운전중인 모든 스텝모터를 정지합니다.
[PAUSE_ALL]
운전중인 모든 스텝모터를 일시정지 합니다.
[RESUME_ALL]
일시정지 상태인 모든 스텝모터를 재시작합니다.
[CLEAR_ALL]
모든 스텝모터의 버퍼를 삭제하고 초기화합니다.
[SET_POSITION]
스텝모터의 현재 위치를 입력한 값으로 설정합니다.
항목 | 타입 | 설명 |
---|---|---|
위치 | WRITE | 현재위치로 설정할 값을 입력합니다. (예: 원점으로 설정 -> 0) |
[GET_POSITION]
스텝모터의 현재 위치를 읽어옵니다.
항목 | 타입 | 설명 |
---|---|---|
위치 | READ | 스텝모터의 현재 위치입니다. |
[GET_STATUS]
스텝모터의 현재 상태를 읽어옵니다.
항목 | 타입 | 설명 |
---|---|---|
상태 | READ | 스텝모터의 현재 상태입니다. (0: 정지 상태, 1: 일시정지 상태, 2: 운전 중) |
[EMG_STOP]
운전 중인 모든 스텝모터를 즉시 비상 정지합니다.
예제
목표
대시보드의 버튼 위젯을 클릭하면 설정한 동작 프로파일에 따라 스텝모터를 운전합니다.
부품
부품 | 갯수 |
---|---|
라즈베리파이 4 | 1 |
28BYJ-48 스텝모터 | 1 |
ULN2003 드라이버 | 1 |
5V DC 파워 | 1 |
연결
5V DC 파워 ** | 드라이버 | GPIO |
---|---|---|
| IN1 | 14 * |
| IN2 | 15 * |
| IN3 | 18 * |
| IN4 | 23 * |
+ | + (5~12V) | |
– | – | GND |
** 스텝모터의 타입, 전압, 소모전류에 맞는 적절한 외부 DC 파워를 사용해야 합니다.
