//==============================================================
// MotorBank MSD-ER2 시리즈(엔코더 클로즈드루프 스텝 드라이버) 아두이노 예제 V1.0
// 적용: MSD-22ER2 / MSD-34ER2 계열 (펄스+방향 제어, 엔코더 피드백 내장형)
// 기능: 위치 이동(펄스 카운트) + EX(위치 도달) 확인 / 연속 회전 / ALM(알람) 감시
// 보드: Arduino Uno (5V 보드 권장)
//
// [클로즈드루프 구조 이해]
// 엔코더는 아두이노가 아니라 "드라이버"에 연결합니다(위치 보정은 드라이버가 자동 수행).
// 아두이노는 ①펄스/방향을 보내고 ②EX(위치 도달)·ALM(알람) 출력을 읽어
// "실제로 지령 위치에 정착했는지"를 확인합니다 — 이것이 엔코더를 활용하는 방법입니다.
//
// [드라이버 결선]
// 아두이노 D9 -> PUL+ / D6 -> DIR+ / GND -> PUL-, DIR- (ENA는 기본 미연결)
// 드라이버 EX+ -> D7, EX- -> GND (위치 도달 신호, 포토커플러 출력)
// 드라이버 ALM+ -> D8, ALM- -> GND (알람 신호, 포토커플러 출력)
// 엔코더 -> 드라이버 단자에 색상대로: EB+주황 / EB-주황흰 / EA+청 / EA-청흰 / VCC빨강 / GND흑
//
// [DIP 스위치 필수 확인]
// SW6 = OFF (펄스+방향 단일 펄스 모드 - 본 예제 기준)
// SW1~SW4 = 회전당 스텝 수 (기본 4000). 아래 STEPS_PER_REV를 실제 설정값과 맞추세요.
// 모터 회전속도(rpm) = 펄스 주파수 x 60 / 회전당 스텝 수
//
// [시리얼 모니터 사용법] (9600bps, "새 줄" 설정)
// m4000 : CW로 4000펄스 이동 후 EX(위치 도달) 확인 M4000 : CCW로 이동
// f2000 : CW 연속 회전 2000Hz r500 : CCW 연속 500Hz s : 정지
// a : ALM·EX 현재 상태 표시
//==============================================================
const int PUL_PIN = 9, DIR_PIN = 6;
const int EX_PIN = 7, ALM_PIN = 8;
const long STEPS_PER_REV = 4000; // DIP SW1~SW4 설정값과 일치시킬 것
void setup() {
pinMode(DIR_PIN, OUTPUT);
pinMode(PUL_PIN, OUTPUT);
pinMode(EX_PIN, INPUT_PULLUP); // 포토커플러 도통 시 LOW
pinMode(ALM_PIN, INPUT_PULLUP);
Serial.begin(9600);
Serial.println(F("MSD-ER2 ready. m4000 M4000 f2000 r500 s a"));
}
bool alarmOn() { return digitalRead(ALM_PIN) == LOW; }
// 지정 펄스 수만큼 이동(주파수 고정 2kHz) 후 EX로 도달 확인
void moveSteps(bool cw, long steps) {
if (alarmOn()) { Serial.println(F("!! ALM 상태 - 이동 취소 (전원·결선 확인)")); return; }
digitalWrite(DIR_PIN, cw ? HIGH : LOW);
delayMicroseconds(10); // DIR 확정 후 최소 5us 대기(타이밍 규격)
for (long i = 0; i < steps; i++) {
digitalWrite(PUL_PIN, HIGH);
delayMicroseconds(240); // 펄스폭 >= 2.5us 충족, 약 2kHz
digitalWrite(PUL_PIN, LOW);
delayMicroseconds(240);
}
Serial.print(cw ? F("CW ") : F("CCW ")); Serial.print(steps); Serial.print(F("펄스 송신 완료. "));
// EX(위치 도달) 신호 대기 - 클로즈드루프이므로 "펄스 완료"와 "실제 정착"은 다를 수 있음
unsigned long t0 = millis();
while (millis() - t0 < 2000) {
if (digitalRead(EX_PIN) == LOW) { Serial.println(F("위치 도달 확인(EX)")); return; }
}
Serial.println(F("EX 신호 미확인 - EX 결선 또는 부하 상태 점검"));
}
void loop() {
if (alarmOn()) { /* 필요 시 알람 시 정지 로직 추가 위치 */ }
if (!Serial.available()) return;
String cmd = Serial.readStringUntil('\n');
cmd.trim();
if (cmd.length() == 0) return;
char c = cmd.charAt(0);
long v = cmd.substring(1).toInt();
switch (c) {
case 'm': moveSteps(true, constrain(v, 1, 1000000)); break;
case 'M': moveSteps(false, constrain(v, 1, 1000000)); break;
case 'f': digitalWrite(DIR_PIN, HIGH); delayMicroseconds(10);
tone(PUL_PIN, constrain(v, 1, 20000));
Serial.print(F("CW ")); Serial.print(v); Serial.println(F("Hz")); break;
case 'r': digitalWrite(DIR_PIN, LOW); delayMicroseconds(10);
tone(PUL_PIN, constrain(v, 1, 20000));
Serial.print(F("CCW ")); Serial.print(v); Serial.println(F("Hz")); break;
case 's': noTone(PUL_PIN); Serial.println(F("STOP")); break;
case 'a': Serial.print(F("ALM: ")); Serial.print(alarmOn() ? F("알람!") : F("정상"));
Serial.print(F(" / EX: ")); Serial.println(digitalRead(EX_PIN) == LOW ? F("도달") : F("-")); break;
default: Serial.println(F("? m4000 M4000 f2000 r500 s a"));
}
}
PGH42S-NK245의 고정밀 유성감속기(≤15arcmin, 13종 감속비)에 1000CPR 엔코더를 추가한 최상위 모델. 스테핑모터의 탈조(스텝 손실)를 실시간 감지·보정하는 클로즈드 루프 운전이 가능해지면서, 서보모터급 신뢰성을 스테핑모터의 가격과 단순함으로 달성합니다.
엔코더가 실시간으로 위치를 확인. 스텝 손실 제로, 서보급 신뢰성.
서보모터 대비 저가이면서 1000CPR 피드백으로 탈조 없는 정밀 제어. 소형 협동 로봇 관절에서 서보급 신뢰성을 스테핑 가격으로 달성합니다.
광학 스테이지, 위치 결정 장비에서 탈조가 발생하면 측정이 무의미해집니다. 엔코더가 이를 방지하여 장시간 자동 계측에서도 신뢰할 수 있습니다.
시린지 펌프, 인퓨전 장비에서 스텝 손실은 투약 오류로 직결됩니다. 엔코더 피드백이 안전의 마지막 방어선이 됩니다.
큰 부하에서 스테핑모터가 탈조하기 쉬운 구간. 엔코더가 탈조를 즉시 감지하여 재시도하거나 경고하여 불량품을 방지합니다.
적도의 장시간 추적에서 누적 오차가 치명적입니다. 1000CPR 엔코더로 위치를 실시간 검증하여 천체사진의 추적 정밀도를 보장합니다.
야간 무인 운전에서 탈조를 사람이 감지할 수 없습니다. 엔코더가 탈조를 자동 감지·보정하여 24시간 무인 운전의 신뢰성을 확보합니다.
1000CPR은 1회전당 1000개의 위치 신호를 제공합니다. 스테핑모터가 스텝을 놓치면(탈조) 엔코더가 즉시 감지하여 보정하거나 알람을 발생합니다.
엔코더 없는 PGH42S-NK245와 동일한 고정밀 감속기. 1단 15arcmin, 2단 20arcmin 이하의 저유격으로 감속 후에도 높은 위치 정밀도를 유지합니다.
오픈루프 스테핑모터의 최대 약점은 "정말 그 위치에 도달했는지 모른다"는 것. 엔코더가 이를 해결하여 서보모터와 같은 확실한 위치 피드백을 제공합니다.
엔코더 추가에도 감속비 선택 옵션은 그대로 13종. 토크·속도 최적화와 위치 피드백을 동시에 갖출 수 있습니다.
서보모터는 고가이고 드라이버도 복잡합니다. PGH42S-NK245E는 스테핑모터의 단순함(펄스 입력)과 저렴한 가격을 유지하면서 1000CPR 엔코더로 서보의 핵심 기능(위치 피드백, 탈조 감지)을 구현합니다. 서보가 필요하다고 느꼈다면, 먼저 이 모델을 검토하세요.
| 항목 | 사양 |
|---|---|
| 모델명 | PGH42S-NK245E |
| 브랜드 / 제조사 | 모터뱅크 / (주)로봇마트 |
| 모터 타입 | 2상 하이브리드 스테핑모터 + 엔코더 |
| 감속기 타입 | 고정밀 유성감속기 (Planetary) |
| 엔코더 분해능 | 1000CPR |
| 모터 사이즈 | 42각 (NEMA 17) · 길이 48mm |
| 홀딩 토크 | 0.59Nm |
| 백래쉬 (1단) | ≤15 arcmin |
| 백래쉬 (2단) | ≤20 arcmin |
| 감속비 선택 | 1/4 ~ 1/100 (13종) |
| 피드백 | 클로즈드 루프 가능 |
토크·속도 매칭 및 클로즈드 루프 필요성을 분석합니다.
클로즈드 루프 드라이버 선정, 엔코더 배선 가이드 제공.
외형 도면, 엔코더 커넥터 핀맵, 결합부 치수 제공.
상시 기술 지원. 대량 구매 별도 견적 가능.
엔코더 연동·서보 대체 설계에 대한 기술 상담을 제공합니다.
기본출고는 일반모터형 31mm 로 출고합니다.
모터는 샤프트 길이에 맞춰 조정되어 출고됩니다



상품이 장바구니에 담겼습니다.
바로 확인하시겠습니까?
상품이 찜 리스트에 담겼습니다.
바로 확인하시겠습니까?