• 중공 로터리 액추에이터 RMRT130-NK23Y — 56각(NEMA23) 스텝모터 결합용 대구경, 감속비 1/10,1/18

중공 로터리 액추에이터 RMRT130-NK23Y — 56각(NEMA23) 스텝모터 결합용 대구경, 감속비 1/10,1/18

RMRT85보다 큰 프레임으로 더 큰 중공 구경과 하중에 대응하는 56각 스텝모터용 중공 로터리 액추에이터입니다. 기존 펄스 제어 방식 유지, 감속비 1/10. 최대 사이즈는 RMRT200(86각용)을 확인하세요.

소비자가1,172,600
판매가725,900
배송정보
0원 (조건부배송) 지역별 추가배송 주문시결제(선결제)
택배
구매안내



선정 가이드
되돌아왔을 때 제자리인가요 →
백래시가 만드는 증상과 등급 고르는 법, 그리고 저백래시 감속기가 부품값 이상으로 돌려주는 것들을 정리했습니다.

이 중공 로터리 액추에이터를 아두이노로 제어하려면 어떻게 하나요?

RMRT 시리즈는 2상 스텝모터와 결합해 사용하므로, 제어는 펄스·방향(PUL/DIR) 방식 스텝 드라이버로 합니다. 42각·56각 모터는 MSD-224(4A, 32분주), RMRT200에 결합하는 86각 등 대전류 모터는 MSD-228N(대전류·고분주형)이 대응합니다 — 두 드라이버 모두 PUL/DIR/EN 신호가 동일해 아래 코드를 그대로 쓸 수 있습니다 — 아두이노가 보내는 펄스 수만큼 정확히 회전하며, 별도 센서 없이 각도가 결정됩니다. 아래 예제는 감속비(1/5·1/10)를 코드가 자동 반영해서 출력축 각도 기준으로 지령하고, 인덱스 테이블 응용을 위한 분할 이동 명령(i6 = 60도씩)과 탈조 방지용 가감속을 내장했습니다.
드라이버 신호연결 (공통 캐소드/직결 기준)
PUL (STEP)아두이노 D9
DIR아두이노 D6
EN아두이노 D5 (극성은 드라이버 설명 확인)
신호 GND / 모터 전원아두이노 GND 공통 / 드라이버 전원 단자에 별도 공급
주의: 코드 상단의 MICROSTEP(분주) 값은 드라이버 DIP 스위치 설정과 반드시 동일해야 합니다 — 다르면 지령 각도와 실제 회전 각도가 어긋납니다. GEAR는 구매하신 감속비(1/5→5, 1/10→10)로 수정하세요. 스텝모터는 오픈루프라 부하가 토크를 넘으면 탈조하므로, 부하가 크면 속도를 낮추고 가감속 구간(RAMP_STEPS)을 늘리세요. 분주는 8~16을 권장합니다 — 분주를 높이면 회전이 부드러워지지만 같은 속도에 필요한 펄스 주파수가 비례해서 올라가, 아두이노 소프트 펄스 방식인 이 예제로는 고분주(64~256)에서 도달 가능한 속도가 크게 제한됩니다. 고분주·고속이 동시에 필요하면 문의해 주세요. 축 내부로 통과시키는 케이블은 모터 결선과 별개이며 조립 전 구경·간섭을 확인하세요.
//==============================================================
// RMRT 중공 로터리 액추에이터 + 2상 스텝모터 아두이노 펄스 제어 예제 V1.0
// 적용: RMRT60(42각) / RMRT85·RMRT130(56각) / RMRT200(86각) + 결합 스텝모터
// 드라이버: MSD-224 등 펄스·방향(PUL/DIR/EN) 방식 2상 스텝 드라이버
// 보드: Arduino Uno
//
// [결선 - 공통 캐소드(직결) 기준] ※ 드라이버 상세페이지 결선도 우선
//   드라이버 PUL(STEP) -> D9 / DIR -> D6 / EN -> D5 / 신호 GND -> 아두이노 GND
//   모터 전원(DC24V 등)은 드라이버 전원 단자로 별도 공급, GND 공통
//
// [★반드시 맞춰야 하는 3가지 상수 - 각도 정확도를 결정합니다]
//   MICROSTEP : 드라이버 DIP 스위치의 분주 설정과 반드시 동일하게 (권장 8~16)
//               MSD-224는 1~32분주, MSD-228N 등 상위 드라이버는 고분주 지원.
//               ※고분주일수록 같은 RPM에 필요한 펄스 주파수가 비례 상승 -
//                 이 예제(소프트 펄스)는 약 16kHz가 상한이므로 고분주에서는 속도 제한
//   GEAR      : 구매하신 감속비 (1/5 -> 5, 1/10 -> 10)
//   STEPS_REV : 모터 기본 스텝수 (1.8도 2상 = 200. 0.9도 모터면 400)
//   -> 이 값이 하나라도 실물과 다르면 지령 각도와 실제 각도가 어긋납니다
//
// [시리얼 모니터 사용법] (9600bps, "새 줄" 설정)
//   e / E : 드라이버 Enable / Disable (Disable 시 축이 자유 회전)
//   f300  : CW  연속 회전, 출력축 30.0RPM (0.1RPM 단위)
//   r150  : CCW 연속 회전, 출력축 15.0RPM
//   s     : 정지
//   g9000 : CW  90.00도 회전 (0.01도 단위, 출력축 기준)
//   G9000 : CCW 90.00도 회전
//   i6    : 인덱싱 - 출력축 360/6 = 60.00도씩 CW 분할 이동
//
// [중공축 주의] 축 내부로 통과시키는 케이블은 모터 결선과 별개입니다 - 회전부와
//   간섭 없는지, 케이블 직경이 중공 구경에 맞는지 조립 전에 확인하세요.
// [오픈루프 주의] 스텝모터는 부하가 토크를 넘으면 탈조(위치 이탈)합니다.
//   부하가 크면 속도를 낮추고, 아래 RAMP 구간을 늘려 가감속을 완만하게 하세요.
//==============================================================
const int PIN_PUL = 9, PIN_DIR = 6, PIN_EN = 5;
#define EN_ACTIVE  LOW      // Enable 극성 - 드라이버별 상이 (동작 반대면 HIGH로)
#define EN_IDLE    HIGH

const unsigned int STEPS_REV = 200;   // 모터 기본 스텝수 (1.8도 = 200)
const unsigned int MICROSTEP = 8;    // ★드라이버 DIP 분주와 동일하게
const unsigned int GEAR      = 5;    // ★구매 감속비: 1/5 -> 5, 1/10 -> 10

const unsigned long STEPS_OUT_REV = (unsigned long)STEPS_REV * MICROSTEP * GEAR; // 출력축 1회전 스텝
const unsigned int RAMP_STEPS = 400;      // 가감속 구간(스텝) - 탈조 시 늘리세요
const unsigned int US_START   = 1200;     // 기동 스텝 간격(us) - 느리게 시작
unsigned int usRun = 500;                 // 연속 회전 목표 스텝 간격(us)

bool running = false; bool enabled = false;
unsigned long lastStepUs = 0;

void stepOnce(unsigned int us) {
  digitalWrite(PIN_PUL, HIGH); delayMicroseconds(4);
  digitalWrite(PIN_PUL, LOW);  delayMicroseconds(us - 4);
}

// 사다리꼴 가감속으로 지정 스텝 수 이동
void moveSteps(unsigned long steps, bool cw) {
  digitalWrite(PIN_DIR, cw ? HIGH : LOW);
  delayMicroseconds(20);
  unsigned long ramp = min((unsigned long)RAMP_STEPS, steps / 2);
  for (unsigned long i = 0; i < steps; i++) {
    unsigned int us = usRun;
    if (i < ramp)              us = US_START - (unsigned long)(US_START - usRun) * i / ramp;
    else if (i >= steps - ramp) us = US_START - (unsigned long)(US_START - usRun) * (steps - 1 - i) / ramp;
    stepOnce(us);
  }
}

// 출력축 RPM(0.1 단위) -> 스텝 간격(us)
unsigned int rpmToUs(long rpm01) {
  // us = 60e6 / (rpm * STEPS_OUT_REV), rpm = rpm01/10
  unsigned long us = 600000000UL / ((unsigned long)rpm01 * STEPS_OUT_REV);
  return (unsigned int)constrain(us, 60UL, 60000UL);  // 과속·과저속 보호
}

void setup() {
  Serial.begin(9600);
  pinMode(PIN_PUL, OUTPUT); pinMode(PIN_DIR, OUTPUT); pinMode(PIN_EN, OUTPUT);
  digitalWrite(PIN_EN, EN_IDLE);   // 시작은 Disable (안전)
  Serial.println(F("RMRT + step driver ready. (V1.0)"));
  Serial.print(F("출력축 1회전 = ")); Serial.print(STEPS_OUT_REV); Serial.println(F(" 스텝"));
  Serial.println(F("명령: e/E f300 r150 s g9000 G9000 i6"));
}

void loop() {
  // 연속 회전 처리 (non-blocking)
  if (running && micros() - lastStepUs >= usRun) {
    lastStepUs = micros();
    digitalWrite(PIN_PUL, HIGH); delayMicroseconds(4); digitalWrite(PIN_PUL, LOW);
  }
  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 'e': digitalWrite(PIN_EN, EN_ACTIVE); enabled = true;  Serial.println(F("Enable"));  break;
    case 'E': running = false; digitalWrite(PIN_EN, EN_IDLE); enabled = false; Serial.println(F("Disable")); break;
    case 'f': case 'r':
      if (!enabled) { Serial.println(F("먼저 e로 Enable 하세요")); return; }
      if (v < 1) { Serial.println(F("속도를 입력하세요 (예 f300 = 30.0RPM)")); return; }
      digitalWrite(PIN_DIR, c == 'f' ? HIGH : LOW);
      usRun = rpmToUs(v); running = true;
      Serial.print(F("연속 회전 ")); Serial.print(v / 10.0); Serial.println(F(" RPM (출력축)"));
      break;
    case 's': running = false; Serial.println(F("정지")); break;
    case 'g': case 'G': {
      if (!enabled) { Serial.println(F("먼저 e로 Enable 하세요")); return; }
      running = false;
      unsigned long steps = (unsigned long)((unsigned long long)v * STEPS_OUT_REV / 36000ULL);
      moveSteps(steps, c == 'g');
      Serial.print(F("이동 완료: ")); Serial.print(v / 100.0); Serial.println(F(" 도"));
      break;
    }
    case 'i': {
      if (!enabled) { Serial.println(F("먼저 e로 Enable 하세요")); return; }
      if (v < 2 || v > 360) { Serial.println(F("분할 수 2~360 (예 i6)")); return; }
      running = false;
      moveSteps(STEPS_OUT_REV / v, true);
      Serial.print(F("인덱스 이동: ")); Serial.print(360.0 / v); Serial.println(F(" 도"));
      break;
    }
    default: Serial.println(F("? e/E f300 r150 s g9000 G9000 i6")); return;
  }
}
사용 순서: MICROSTEP·GEAR 상수를 실물에 맞게 수정 → 업로드 → e(Enable) → i6을 입력하면 출력축이 정확히 60도씩 분할 회전합니다. 연속 회전은 f300(출력축 30.0RPM), 각도 이동은 g9000(90.00도)처럼 0.1RPM·0.01도 단위입니다. 감속비가 코드에 반영되어 있어 모든 값은 출력축 기준입니다. 동작이 이상하면 분주 DIP·감속비 상수부터 다시 확인하세요.
필요한 구성 — 본품 + 결합 스텝모터 + 스텝 드라이버 + 아두이노 UNO. 드라이버는 결합 모터의 정격전류에 맞춰 MSD-224 (4A, 42·56각용) → 또는 MSD-228N (86각·대전류용) → 중에서 선택하세요. 통신(RS485) 위치제어가 필요하면 BLDC 일체형 RTG42 엔코더 시리즈를 확인하세요.
동작이 안 되면 상품문의 게시판에 ①결합 모터 모델·감속비 ②드라이버 DIP 설정 사진 ③결선 사진을 남겨 주세요. 기술팀이 확인해 드립니다.
작성: MotorBank 기술팀 · 아두이노 우노 기준 · 최종 업데이트: 2026-08-16
130d1_110816.jpg

 

 

 

 

 

 

 

130nk23y_110811.jpg

 

 

 

750_110206.jpg

32f09e43994fd9f0bb3684f9d3de8d9e_163230.png
 

 

비밀번호 인증

비밀번호를 입력해 주세요.

확인