소개
스텝모터(Step Motor) 또는 스테핑모터(Stepping Motor)라고 불리며, 펄스가 입력될때마다 일정한 각도만큼 모터가 회전하므로 정밀한 위치 또는 각도제어에 사용할 수 있습니다.
여러대의 모터를 동시에 운전할 수 있으며, 각 모터 별로 여러 개의 회전 또는 대기 동작을 연속적으로 구성할 수 있습니다. 각 회전 동작에는 가속 및 감속을 설정하여 부드러운 동작을 구현할 수 있습니다.
스텝모터는 드라이버를 통해 구동되며 드라이버의 타입에 대한 설명과 대표적인 모델은 아래와 같습니다.
타입 | 설명 | 모델 |
---|---|---|
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 (STEP/DIR), 2 pulse (CW/CCW), 4 pulse (IN1~IN4)) |
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 | 출력 펄스를 생성하는 시간을 ms로 입력합니다. (고급) |
라즈베리파이의 사양이 낮거나, 동시에 실행되는 작업이 많을수록 스텝모터의 회전이 연속적이지 않고 간헐적으로 끊기는 현상이 발생할 수 있으며 이 값을 증가시키면 문제가 해결될 수 있습니다.
다만, 스텝모터의 시작, 정지, 일시정지, 재시작시의 반응속도는 이 값이 커질수록 느려집니다. 예를 들어 펄스 생성시간이 1000ms (1초)이면 정지 명령 후 실제 스텝모터가 정지할때 까지 걸리는 시간이 최대 1초가 될수 있습니다.
그러므로 빠른 응답속도가 필요한 경우에는 이 값을 최소값인 10ms로 설정하고 가급적 높은 사양의 라즈베리파이를 사용하며 동시에 실행되는 작업을 최소화해야 합니다.
ADD_MOTION
스텝모터의 회전 동작을 버퍼에 추가합니다. 목표속도와 회전량(회전수 또는 펄스)으로 모터를 회전하며 가속 및 감속을 사용하여 부드럽게 시작하고 정지할 수 있습니다. 이 명령과 ADD_DELAY 명령을 조합하여 여러 개의 회전 또는 대기 동작이 연속적으로 실행되도록 구성할 수 있습니다.
항목 | 타입 | 설명 |
---|---|---|
속도 (rpm) | WRITE | 스텝모터의 분당 회전수 (rpm)을 입력합니다. |
회전단위 | WRITE | 회전단위를 선택합니다. (스텝수, 회전수, 좌표, 연속회전) |
스텝수 | WRITE | 회전할 스텝수를 입력합니다. 음수를 입력하면 반대방향으로 회전합니다. (회전단위가 “스텝수” 일때만 표시됩니다.) |
회전수 | WRITE | 회전할 회전수를 입력합니다. 음수를 입력하면 반대방향으로 회전합니다. (회전단위가 “회전수” 일때만 표시됩니다.) |
좌표 | WRITE | 이동할 좌표를 입력합니다. (회전단위가 “좌표” 일때만 표시됩니다.) |
회전방향 | WRITE | 회전방향을 선택합니다. (정방향, 역방향) (회전단위가 “연속회전”일때만 표시됩니다.) |
가속 (rpm/s) ¹ | WRITE | 회전을 시작할때의 가속량 (1초당 속도의 증가량)을 입력합니다. |
감속 (rpm/s) ¹ | WRITE | 회전을 종료할때의 감속량 (1초당 속도의 감소량)을 입력합니다. |
ADD_DELAY
스텝모터의 대기 동작을 버퍼에 추가합니다. 모터는 설정한 시간만큼 정지상태에서 대기합니다. 이 명령과 ADD_MOTION 명령을 조합하여 여러 개의 회전 또는 대기 동작이 연속적으로 실행되도록 구성할 수 있습니다.
항목 | 타입 | 설명 |
---|---|---|
대기시간 | WRITE | 스텝모터가 정지상태에서 대기할 시간을 입력합니다. |
RUN
버퍼에 저장된 회전 (ADD_MOTION) 또는 대기 (ADD_DELAY) 동작에 따라 스텝모터를 운전합니다. 아래는 운전 예시입니다.
STOP
스텝모터를 정지합니다.
PAUSE
스텝모터를 일시정지 합니다.
RESUME
스텝모터를 재시작 합니다.
CLEAR
스텝모터의 버퍼를 삭제하고 초기화합니다.
RUN_SYNC
여러대의 스텝모터를 동기제어 (Syncronized motion) 모드로 운전합니다. 여러대의 스텝모터를 정확한 타이밍으로 제어할 필요가 있을 경우 사용합니다. 만약 동작이 먼저 완료된 모터가 있다면 나머지 모터의 동작이 모두 완료될때까지 대기해야 합니다.
항목 | 타입 | 설명 |
---|---|---|
I/O장치 번호 | WRITE | 동기제어 모드로 운전할 스텝모터의 I/O장치 번호를 콤마(,)로 구분하여 입력합니다. 예) 3,5,7 |
아래는 2대의 스텝 모터를 동기제어 모드로 운전하는 예입니다.
2. 먼저 동작이 완료된 모터는 나머지 모터가 모두 완료될때까지 대기합니다.
3. 동기제어가 완료됩니다.
STOP_ALL
운전중인 모든 스텝모터를 정지합니다.
PAUSE_ALL
운전중인 모든 스텝모터를 일시정지 합니다.
RESUME_ALL
일시정지 상태인 모든 스텝모터를 재시작합니다.
CLEAR_ALL
모든 스텝모터의 버퍼를 삭제하고 초기화합니다.
SET_POSITION
스텝모터의 현재 위치를 입력한 값으로 설정합니다.
항목 | 타입 | 설명 |
---|---|---|
위치 | WRITE | 현재위치로 설정할 값을 입력합니다. (예: 원점으로 설정 -> 0) |
GET_POSITION
스텝모터의 현재 위치를 읽어옵니다.
항목 | 타입 | 설명 |
---|---|---|
위치 | READ | 스텝모터의 현재 위치입니다. |
GET_STATUS
스텝모터의 현재 상태를 읽어옵니다.
항목 | 타입 | 설명 |
---|---|---|
상태 | READ | 스텝모터의 현재 상태입니다. (0: 정지 상태, 1: 일시정지 상태, 2: 운전 중) |
예제
28BYJ-48 스텝모터 와 ULN2003 드라이버를 사용한 예제입니다.
부품
부품 | 갯수 |
---|---|
28BYJ-48 스텝모터 | 1 |
ULN2003 드라이버 | 1 |
5V DC 파워 | 1 |
연결
5V DC 파워 ² | 드라이버 | GPIO |
---|---|---|
| IN1 ¹ | 14 |
| IN2 ¹ | 15 |
| IN3 ¹ | 18 |
| IN4 ¹ | 23 |
+ | + (5~12V) | |
– | – | GND |
² 스텝모터의 타입, 전압, 소모전류에 맞는 적절한 외부 DC 파워를 사용해야 합니다.