//==============================================================
// MotorBank MSD-224 / MSD-224N + MAS-001 확장쉴드 예제 V2.0
// 기능: 쉴드의 볼륨=속도, 버튼1=기동/정지, 버튼2=방향 전환
// 보드: Arduino Uno + MAS-001 확장쉴드 (쉴드에 드라이버 결선)
//
// [쉴드-드라이버 결선] (MAS-001 단자 기준)
// PUL+ -> D9 / DIR+ -> D6 / ENA+ -> D5 / PUL- DIR- ENA- -> GND
// [쉴드 입력] 버튼1=D13(기동/정지), 버튼2=D12(방향), 볼륨=A0(속도)
//
// [속도 계산] 모터 회전수 RPM = 펄스주파수(Hz) x 60 / (200 x 분주비)
// 예: 분주 1, 2000Hz -> 600RPM / 분주 8, 2000Hz -> 75RPM
// 본 예제의 볼륨 속도 범위: 약 100Hz ~ 4000Hz
//==============================================================
const int PUL_PIN = 9, DIR_PIN = 6, EN_PIN = 5;
const int BTN1 = 13, BTN2 = 12, POT = A0;
bool running = false, dirCW = true;
bool btn1Prev = HIGH, btn2Prev = HIGH;
void setup() {
pinMode(DIR_PIN, OUTPUT); pinMode(EN_PIN, OUTPUT);
pinMode(BTN1, INPUT); pinMode(BTN2, INPUT); // 쉴드 회로 기준(눌림=LOW)
digitalWrite(EN_PIN, LOW);
Serial.begin(9600);
Serial.println(F("MSD-224 + MAS-001 ready. BTN1=Run/Stop BTN2=Dir VOL=Speed"));
}
void loop() {
// 버튼1: 누를 때마다 기동/정지 토글
bool b1 = digitalRead(BTN1);
if (btn1Prev == HIGH && b1 == LOW) {
running = !running;
if (!running) noTone(PUL_PIN);
Serial.println(running ? F("RUN") : F("STOP"));
delay(30); // 디바운스
}
btn1Prev = b1;
// 버튼2: 누를 때마다 방향 전환
bool b2 = digitalRead(BTN2);
if (btn2Prev == HIGH && b2 == LOW) {
dirCW = !dirCW;
digitalWrite(DIR_PIN, dirCW ? HIGH : LOW);
Serial.println(dirCW ? F("DIR: CW") : F("DIR: CCW"));
delay(30);
}
btn2Prev = b2;
// 볼륨 -> 펄스 주파수 (시계방향으로 올릴수록 빠름)
if (running) {
int f = map(analogRead(POT), 0, 1023, 100, 4000);
tone(PUL_PIN, f); // 비차단 펄스 출력
}
delay(20);
}
//==============================================================
// MotorBank MSD-224 / MSD-224N 아두이노 직결 예제 V1.0 (쉴드 없이)
// 기능: 시리얼 모니터 명령으로 속도(펄스 주파수)·방향·기동정지 제어
// 보드: Arduino Uno 단독 (제어신호 3.3~24V 지원이라 직결 가능)
//
// [직결 결선] 아두이노 -> 드라이버
// D9 -> PUL+ / D6 -> DIR+ / D5 -> ENA+
// GND -> PUL- , DIR- , ENA- (모두 공통)
// * 모터 전원(SMPS)은 드라이버에 별도 공급, 아두이노와 GND 공통 불필요
// (드라이버 제어 입력은 포토커플러 절연)
//
// [속도 계산] 모터 회전수 RPM = 펄스주파수(Hz) x 60 / (200 x 분주비)
// 예: 분주 1에서 f1000 -> 300RPM / 분주 8에서 f2000 -> 75RPM
//
// [시리얼 모니터 사용법] (9600bps, "새 줄" 설정)
// f2000 : CW 방향, 2000Hz 펄스 r500 : CCW 방향, 500Hz
// s : 정지(펄스 중지) e1/e0 : ENA 신호 High/Low
//==============================================================
const int PUL_PIN = 9, DIR_PIN = 6, EN_PIN = 5;
void setup() {
pinMode(DIR_PIN, OUTPUT); pinMode(EN_PIN, OUTPUT);
digitalWrite(EN_PIN, LOW);
Serial.begin(9600);
Serial.println(F("MSD-224 direct ready. f2000 r500 s e1 e0"));
}
void loop() {
if (!Serial.available()) return;
String cmd = Serial.readStringUntil('\n');
cmd.trim();
if (cmd.length() == 0) return;
char c = cmd.charAt(0);
long v = constrain(cmd.substring(1).toInt(), 0, 20000);
switch (c) {
case 'f': digitalWrite(DIR_PIN, HIGH); if (v) tone(PUL_PIN, v);
Serial.print(F("CW ")); Serial.print(v); Serial.println(F("Hz")); break;
case 'r': digitalWrite(DIR_PIN, LOW); if (v) tone(PUL_PIN, v);
Serial.print(F("CCW ")); Serial.print(v); Serial.println(F("Hz")); break;
case 's': noTone(PUL_PIN); Serial.println(F("STOP")); break;
case 'e': digitalWrite(EN_PIN, v ? HIGH : LOW);
Serial.println(v ? F("ENA High") : F("ENA Low")); break;
default: Serial.println(F("? f2000 r500 s e1 e0"));
}
}
- 특징 : MSD-224 마이크로 스텝 드라이버는 32분주까지 마이크로 스텝이 가능합니다.
1/1(200), 1/2(400), 1/4(800), 1/8(1600), 1/16(3200), 1/32(6400)
- 적용 스테핑모터 : 2상 스테핑모터(4선 바이폴라, 5선 유니폴라, 6선 유니폴라, 8선 바이폴라)
1. 사용전압 : DC9V ~ 42V(24V 권장)
2. 드라이빙 : H 브릿지 바이폴라 드라이브
3. 최대 4.0A의 8가지 출력 선택 가능
4. 분주는 6가지 모드 사용 32분주 지원
5. 포토커플러를 통한 입력 신호 보호
6. 공통 양극 단일 펄스 인터페이스 표준
7. 오프라인 홀드 기능 제공
8. 반 밀폐된 알루미늄 케이스
9. 에너지 절약을 위한 반자도 현재 잠금 기능 제공
10. 내장 온도 보호 및 과전류 보호
※ 주의사항
DIP 스위치 설정은 항상 전원을 제거한 후 설정해야 합니다.
딥 스위치는 위로 올리면 Off 내리면 On입니다.
123번 스위치는 모터의 마이크로 스텝값
456번 스위치는 모터의 전류값 설정입니다.
아두이노와 같은 상위MCU와 같이 사용하시려면 밑의 결선을 참고해주시기 바랍니다.

아두이노와 같이 펌웨어로 사용하시고 싶으시면
아두이노 확장보드와 같이 사용해 보세요.
아두이노 소스코드는 제공해드립니다.