티스토리 뷰
본 게시물은 비교적 중형 스텝 모터인 NEMA17을 제어하기 위한 방법을 게시한다.
[준비물]
- 아두이노
- 아두이노 IDE
- 스텝 모터(NEMA 17 등)
- 스텝 모터 드라이버(DRV8825 등), 중대전력(류)
- 모터 전원(12~24V, 2A 이상)
- 케이블 등
[부품간 연결]
아두이노 | DRV8825 | 비고 |
9 | STEP | |
8 | DIR | |
GND | ENABLE | Enable |
GND | M0, M1, M2 | 마이크로 스텝 설정 |
5V(HIGH) | RESET | 또는 OPEN |
5V(HIGH) | SLEEP | 또는 OPEN |
VMOT | 전원(12~24V) | |
GND | GND |
[Driver IC]
![]() DRV28825 |
![]() A4989 |
[DRV8825 모듈 예시]
![]() |
![]() |
[스텝 모터 예시 : 24H256-05S]
![]() |
![]() |
[예제 코드 : GPIO 제어]
#define PINNO_STEP 9 // Pulse control
#define PINNO_DIR 8 // Direction control
void setup() {
Serial.begin(115200);
pinMode(PINNO_STEP, OUTPUT);
pinMode(PINNO_DIR, OUTPUT);
}
void loop() {
digitalWrite(PINNO_DIR, HIGH); // HIGH:Clock-wise, LOW:Counterclock-wise
for(int i=0; i<200; i++){
digitalWrite(PINNO_STEP, HIGH);
delayMicroseconds(500); // Control pulse ==> speed
digitalWrite(PINNO_STEP, HIGH);
delayMicroseconds(500); // Control pulse ==> speed
}
delay(1000);
digitalWrite(PINNO_DIR, LOW); // HIGH:Clock-wise, LOW:Counterclock-wise
for(int i=0; i<200; i++){
digitalWrite(PINNO_STEP, HIGH);
delayMicroseconds(500); // Control pulse ==> speed
digitalWrite(PINNO_STEP, HIGH);
delayMicroseconds(500); // Control pulse ==> speed
}
delay(1000);
}
[예제 코드 : AccelStepper.h 활용]
* 마이크로 스텝 제어
* 드라이버 모드는 참고 사항(1, 2, 3, 4)
#include <AccelStepper.h>
// DRV8825 설정 (1 = 드라이버 모드)
AccelStepper stepper(1, 9, 8); // STEP: 9번, DIR: 8번
// 마이크로 스텝 설정 핀
#define M0 4
#define M1 5
#define M2 6
#define STEPS_PER_REV 200 // 1바퀴당 기본 스텝 수 (1.8° = 200 스텝)
#define MICROSTEP 16 // 사용하려는 마이크로 스텝 분할 수
void setMicrostepping(int microstep) {
switch (microstep) {
case 1: digitalWrite(M0, LOW); digitalWrite(M1, LOW); digitalWrite(M2, LOW); break; // Full Step
case 2: digitalWrite(M0, HIGH); digitalWrite(M1, LOW); digitalWrite(M2, LOW); break; // 1/2 Step
case 4: digitalWrite(M0, LOW); digitalWrite(M1, HIGH); digitalWrite(M2, LOW); break; // 1/4 Step
case 8: digitalWrite(M0, HIGH); digitalWrite(M1, HIGH); digitalWrite(M2, LOW); break; // 1/8 Step
case 16: digitalWrite(M0, LOW); digitalWrite(M1, LOW); digitalWrite(M2, HIGH); break; // 1/16 Step
case 32: digitalWrite(M0, HIGH); digitalWrite(M1, LOW); digitalWrite(M2, HIGH); break; // 1/32 Step
default: digitalWrite(M0, LOW); digitalWrite(M1, LOW); digitalWrite(M2, LOW); break; // 기본값: Full Step
}
}
void setRPM(float rpm) {
float stepsPerSecond = (rpm * STEPS_PER_REV * MICROSTEP) / 60.0; // RPM을 스텝/초로 변환
stepper.setMaxSpeed(stepsPerSecond);
stepper.setAcceleration(stepsPerSecond / 2); // 적절한 가속도 설정
}
void setup() {
pinMode(M0, OUTPUT);
pinMode(M1, OUTPUT);
pinMode(M2, OUTPUT);
setMicrostepping(MICROSTEP); // 마이크로 스텝 설정 (1/16)
setRPM(60); // 60 RPM으로 설정
}
void loop() {
stepper.move(200 * MICROSTEP); // 1바퀴 회전 (200 기본 스텝 * 마이크로 스텝)
stepper.runToPosition();
delay(1000);
stepper.move(-200 * MICROSTEP);
stepper.runToPosition();
delay(1000);
}
반응형
'HWDesk > HardwareControl' 카테고리의 다른 글
스텝 모터 제어 시 모드 비교(모드 1 ~ 모드 4) (0) | 2025.04.13 |
---|---|
스텝 모터 제어 예제 (1) | 2025.04.06 |
OLED 디스플레이 예제 (1) | 2025.04.05 |
아두이노IDE를 이용한 Seeeduino XIAO 개발 입문 (0) | 2025.01.26 |
디지털 디밍 기초회로 테스트 (0) | 2024.03.29 |
반응형
250x250
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 아두이노
- 치매
- bilient
- 치매방지
- badp
- 혁신과허들
- Innovations
- ServantClock
- Hurdles
- 티스토리챌린지
- 전류
- 심심풀이치매방지기
- Decorator
- 혁신
- Innovations&Hurdles
- 둎
- DYOV
- arduino
- 심심풀이
- 전압전류모니터링
- 빌리언트
- 배프
- image
- 전압
- Video
- 허들
- BSC
- Innovation&Hurdles
- 절연형
- 오블완
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함