42각 단회전 앱솔루트 엔코더 일체형 드라이버내장형 클로즈루푸스텝모터 SM-NK17402SA 1000PPR 펄스제어 RS485통신 제어
  • 42각 단회전 앱솔루트 엔코더 일체형 드라이버내장형 클로즈루푸스텝모터 SM-NK17402SA 1000PPR 펄스제어 RS485통신 제어
  • 42각 단회전 앱솔루트 엔코더 일체형 드라이버내장형 클로즈루푸스텝모터 SM-NK17402SA 1000PPR 펄스제어 RS485통신 제어

42각 단회전 앱솔루트 엔코더 일체형 드라이버내장형 클로즈루푸스텝모터 SM-NK17402SA 1000PPR 펄스제어 RS485통신 제어

정격전류: 2A
유지토크: 0.4N.M
상저힝: 1.5Ω
인덕턴스: 2.4mH
로터관성 모멘트: 55g.cm²
모터길이: 40mm
공유
판매가
139,000
모델명
SM-NK17402SA
구매혜택
할인 : 적립 마일리지 :
배송비
3,500원 / 주문시결제(선결제) 조건별배송 지역별추가배송비
택배
방문 수령지 : 서울특별시 금천구 디지털로 178(가산동) A동 1115-1116호
상품코드
1000036713
제어 타입
구매안내




펄스 제어 사용설명서 바로가기

RS485 통신 제어 사용설명서 바로가기

RS485 통신 메뉴얼 바로가기






75d388d374b7575d6b721a7c4628756c_155623.jpg

드라이버가 사라지면 생기는 일
SM-NK17 일체형 클로즈드루프 스텝모터 — 42각 몸체에 드라이버와 앱솔루트 엔코더까지
스텝모터 하나를 쓰려면 원래 이렇게 삽니다. 모터, 드라이버, 모터와 드라이버를 잇는 배선 4가닥, 드라이버를 넣을 판넬 자리. 3축 장비면 이걸 세 벌 준비합니다.

SM-NK17은 그 전부가 모터 안에 들어 있습니다. 42각(NEMA17) 몸체 뒤에 드라이버가 내장되어 있어, 밖에서 연결할 것은 전원 두 가닥과 신호선뿐입니다. 게다가 엔코더가 들어간 클로즈드루프라 탈조 걱정도 함께 사라집니다.
1. 구성이 어떻게 줄어드나
구분 기존 구성 SM-NK17
부품 모터 + 별도 드라이버 모터 하나
모터↔드라이버 배선 4가닥 × 축 수 없음
판넬 공간 드라이버 × 축 수 불필요
탈조 대책 별도 엔코더 또는 여유 설계 엔코더 내장 클로즈드루프
다축 확장 축마다 드라이버·배선 추가 RS485 한 라인에 최대 64축
배선이 짧아지는 것은 단순히 편한 문제가 아닙니다. 모터와 드라이버 사이의 긴 배선은 노이즈가 타는 길이기도 합니다. 드라이버가 모터 안에 있으면 그 구간 자체가 사라집니다.
2. 탈조가 사실상 사라집니다
일반 스텝모터는 부하가 순간적으로 커지면 스텝을 놓치고, 제어기는 그 사실을 모릅니다. 오차가 쌓여 "가끔 위치가 밀리는" 현상이 됩니다.

SM-NK17은 엔코더가 실제 회전을 감시하고, 내장 드라이버가 놓친 만큼을 스스로 따라잡습니다. 위치 오차가 한계를 넘으면 경보를 띄우고, 정지 상태에서는 필요한 만큼만 전류를 흘려 발열과 소음도 줄어듭니다. 서보모터를 쓰기엔 과하고 일반 스텝은 불안한 자리에 정확히 맞는 물건입니다.
3. 제어 방식은 두 갈래 — 쓰던 방식 그대로, 또는 통신으로
펄스 제어형 — 기존 시스템 그대로
펄스+방향(또는 이중 펄스) 입력, 최대 400kHz, 광절연. 지금 쓰시는 모션 컨트롤러나 PLC의 펄스 출력을 그대로 연결하면 됩니다. 모터+드라이버 자리를 이것 하나로 교체하는 용도입니다. Enable 입력과 알람 출력을 갖추고 있습니다.
RS485 제어형 — 배선 두 가닥으로 64축
Modbus-RTU 표준 프로토콜. PLC든 PC든 라즈베리파이든 RS485 포트만 있으면 명령 한 줄로 움직입니다. 절대위치·상대이동·속도·조그·원점복귀를 레지스터로 제어하고, 통신선 하나에 최대 64대를 연결합니다. 펄스 발생 장치가 아예 필요 없습니다.
4. PLC 없이도 돌아갑니다
출하 기본값이 I/O 제어 모드입니다. 입력 단자에 시작/정지·방향·리미트 기능을 할당할 수 있고, DIP 스위치로 8단 속도(기본 5~150rpm, 값 변경 가능)를 고를 수 있어서 — 버튼과 센서만 연결해도 왕복·정속 운전이 됩니다.

간단한 장비라면 PLC도 컨트롤러도 없이 전원과 스위치만으로 구동부가 완성된다는 뜻입니다. 파라미터는 PC에서 미리 설정해 저장해 두면 됩니다.
5. 공통 사양
· 프레임: 42각(NEMA17), 표준 31mm 취부 · 축 φ5
· 전원: DC 8~48V 광범위 입력 (내부 보호 퓨즈 내장)
· 엔코더: 단회전 앱솔루트 1000PPR 내장, 클로즈드루프 제어 — 전원을 켜면 1회전 내 축 위치를 즉시 인식합니다
· 분해능: 기본 4,000펄스/회전 (세분화 변경 가능)
· 입력: 광절연 고속 입력, 최대 400kHz, DC3.3~24V 직결
· 출력: 알람/범용 출력 1채널
· 상태 표시: 2색 LED — 과전류·권선 개방·과전압·저전압·위치 오차·엔코더 오류를 점멸 횟수로 구분
6. 라인업 — 3종
같은 42각 프레임에서 길이에 따라 토크가 달라집니다
모델명 모터 길이 홀딩토크 정격전류
SM-NK17402SA 40mm 0.4N·m 2A
SM-NK17482SA 48mm 0.5N·m 2.5A
SM-NK17602SA 60mm 0.7N·m 2.5A
※ 제어 방식(펄스형 / RS485형)은 각 상품 페이지 옵션에서 선택하세요. 토크가 더 필요하면 고정밀 유성감속기 PGH 시리즈를 결합해 백래시 10arcmin 이하의 정밀 인덱스 구동으로 확장할 수 있습니다 — 결합 가능 여부와 조립은 문의해 주세요.
7. 10분 퀵스타트 — RS485로 첫 회전까지
통신 제어가 처음이어도 아래 순서면 10분 안에 돕니다.
준비물
· SM-NK17 (RS485형) · DC 8~48V 전원 (24V 권장)
· PC와 연결할 USB-RS485 컨버터 또는 전용 USB-TTL 케이블(CH340 · 별도 구매)
· 전원 "+" 측에 외부 5A 고속 퓨즈 직렬 연결 권장
1단계 — 배선. 전원 V+/V−를 연결하고(극성 반대 연결 시 회로 손상, 보증 제외), 컨버터의 A/B를 모터의 485A/485B에 연결합니다.
2단계 — 주소 확인. 드라이버 주소는 DIP 스위치로 설정하며 기본은 1번입니다.
3단계 — 통신 설정. 115200bps · 데이터 8비트 · 정지 1비트 · 패리티 없음. 마스터도 같은 값이어야 합니다.
4단계 — 첫 명령. 아래 레지스터 두 개면 모터가 한 바퀴 돕니다.
// 운전 속도 60rpm 설정 (레지스터 0x009A, 기능코드 0x06)
01 06 00 9A 00 3C [CRC]

// 현재 위치 기준 +4000펄스 이동 = 1회전 (0x00CE, 기능코드 0x10)
// 32비트 값은 하위 워드 → 상위 워드 순서로 보냅니다
01 10 00 CE 00 02 04 0F A0 00 00 [CRC]
5단계 — 확인. 레지스터 0x0004~0x0005를 읽으면 엔코더가 본 실제 위치가 나옵니다. 4000 부근이면 성공입니다.

파이썬·아두이노 전체 샘플 코드는 아래 9번 섹션에 있습니다. 복사해서 그대로 쓰시면 됩니다.
8. 자주 쓰는 레지스터 요약
주소 기능 비고
0x009A 운전 속도 (rpm) 기본 300
0x0096~0x0099 시작·정지 속도 / 가속·감속 시간 기본 50rpm / 120ms
0x00C8 속도 모드 운전/정지 1 정방향 · 257 역방향 · 0 감속정지 · 256 비상정지
0x00CE~0x00CF 상대 이동 (펄스 수, INT32) 양수 정방향 · 음수 역방향
0x00D0~0x00D1 절대 위치 이동 (INT32) 원점 기준
0x00E8~0x00E9 절대 위치 이동 — 운전 중에도 실행 수신 즉시 현재 동작 대체
0x00CA 조그(JOG) 운전 방향·속도·정지방식 비트 설정
0x0004~0x0005 실시간 위치 읽기 (INT32) 엔코더 기준
0x00A3 / 0x00A4 경보 상태 읽기 / 해제
0x0024~0x0025 세분화 (펄스/회전) 기본 4,000
※ 전체 레지스터와 프레임 예제는 RS485 통신 매뉴얼(63p)을 내려받아 확인하세요. 32비트 레지스터에 값을 쓸 때는 하위 워드를 먼저 보냅니다.
9. 샘플 코드 — 복사해서 바로 실행
아래 코드는 매뉴얼의 예제 프레임과 바이트 단위로 대조 검증한 것입니다. CRC 계산과 32비트 하위 워드 우선 전송이 모두 처리되어 있어, 포트 이름(또는 배선)만 환경에 맞게 바꾸면 그대로 동작합니다.
파이썬 (PC + USB-RS485 컨버터)
준비: pip install pyserial · 코드 상단의 PORT를 사용 포트로 변경 (Windows "COM3" / Linux "/dev/ttyUSB0")
# -*- coding: utf-8 -*-
"""
SM-NK17 시리즈 RS485(Modbus-RTU) 파이썬 샘플 코드 — MotorBank
필요: pip install pyserial
통신: 115200bps, 8 데이터비트, 1 정지비트, 패리티 없음 (출하 기본값)
주소: DIP 스위치로 설정, 기본 1번

실행 전 PORT만 환경에 맞게 바꾸세요.
  Windows: "COM3" 등 / Linux: "/dev/ttyUSB0" / Mac: "/dev/tty.usbserial-XXXX"
"""
import serial
import struct
import time

PORT = "COM3"        # ← 사용 환경에 맞게 변경
BAUD = 115200
SLAVE = 1            # 드라이버 주소 (DIP 스위치 설정값)

# ---------- Modbus-RTU 기본 도구 ----------

def crc16(data: bytes) -> bytes:
    """Modbus CRC16 (하위 바이트 먼저 붙여 전송)"""
    crc = 0xFFFF
    for b in data:
        crc ^= b
        for _ in range(8):
            if crc & 1:
                crc = (crc >> 1) ^ 0xA001
            else:
                crc >>= 1
    return struct.pack("<H", crc)

def _txrx(ser, frame: bytes, resp_len: int) -> bytes:
    ser.reset_input_buffer()
    ser.write(frame + crc16(frame))
    time.sleep(0.05)
    return ser.read(resp_len)

def write_u16(ser, reg: int, value: int):
    """기능코드 0x06 — 16비트 레지스터 1개 쓰기"""
    frame = struct.pack(">BBHH", SLAVE, 0x06, reg, value & 0xFFFF)
    return _txrx(ser, frame, 8)

def write_i32(ser, reg: int, value: int):
    """기능코드 0x10 — 32비트 값 쓰기.
    ※ SM-NK17은 하위 워드를 먼저 보냅니다 (매뉴얼 예제 기준)."""
    v = value & 0xFFFFFFFF
    lo, hi = v & 0xFFFF, (v >> 16) & 0xFFFF
    frame = struct.pack(">BBHHBHH", SLAVE, 0x10, reg, 2, 4, lo, hi)
    return _txrx(ser, frame, 8)

def read_regs(ser, reg: int, count: int):
    """기능코드 0x03 — 레지스터 읽기. 워드 리스트 반환"""
    frame = struct.pack(">BBHH", SLAVE, 0x03, reg, count)
    resp = _txrx(ser, frame, 5 + 2 * count)
    if len(resp) < 5 + 2 * count:
        raise IOError("응답 없음 — 배선(A/B), 주소, 통신 설정을 확인하세요")
    n = resp[2]
    return list(struct.unpack(">%dH" % (n // 2), resp[3:3 + n]))

def read_i32(ser, reg: int) -> int:
    """32비트 읽기 — 하위 워드 먼저 온다고 가정 (쓰기와 동일 순서).
    값이 이상하게 크게 읽히면 lo/hi를 바꿔보세요."""
    lo, hi = read_regs(ser, reg, 2)
    v = (hi << 16) | lo
    return v - 0x100000000 if v >= 0x80000000 else v

# ---------- 자주 쓰는 레지스터 ----------
REG_POS_ACTUAL = 0x0004   # 실시간 위치 (INT32, 읽기, 엔코더 기준)
REG_SPEED_RPM  = 0x009A   # 운전 속도 rpm (기본 300)
REG_ACC_MS     = 0x0098   # 가속 시간 ms
REG_DEC_MS     = 0x0099   # 감속 시간 ms
REG_RUN_STOP   = 0x00C8   # 1 정방향 / 257 역방향 / 0 감속정지 / 256 비상정지
REG_MOVE_REL   = 0x00CE   # 상대 이동 펄스 수 (INT32, 정지 시)
REG_MOVE_ABS   = 0x00D0   # 절대 위치 이동 (INT32, 정지 시)
REG_MOVE_ABS_R = 0x00E8   # 절대 위치 이동 (운전 중에도 실행 가능)
REG_ALARM_READ = 0x00A3   # 경보 상태 읽기
REG_ALARM_CLR  = 0x00A4   # 경보 해제

PULSES_PER_REV = 4000     # 기본 세분화 (0x0024에서 변경 가능)

# ---------- 데모 ----------
if __name__ == "__main__":
    with serial.Serial(PORT, BAUD, bytesize=8, parity="N", stopbits=1, timeout=0.5) as ser:

        # 1) 운전 속도 60rpm 설정
        write_u16(ser, REG_SPEED_RPM, 60)
        print("속도 60rpm 설정 완료")

        # 2) 정방향으로 1회전 (상대 이동 +4000펄스)
        write_i32(ser, REG_MOVE_REL, PULSES_PER_REV)
        print("1회전 이동 명령 전송")
        time.sleep(2)

        # 3) 실제 위치 확인 (엔코더 기준)
        pos = read_i32(ser, REG_POS_ACTUAL)
        print("현재 위치: %d 펄스 (약 %.2f회전)" % (pos, pos / PULSES_PER_REV))

        # 4) 역방향으로 원위치 (절대 위치 0으로)
        write_i32(ser, REG_MOVE_ABS, 0)
        print("원위치 복귀 명령 전송")
        time.sleep(2)
        print("현재 위치:", read_i32(ser, REG_POS_ACTUAL))

        # 참고) 정속 회전 시작/정지
        # write_u16(ser, REG_RUN_STOP, 1)    # 정방향 연속 회전
        # time.sleep(3)
        # write_u16(ser, REG_RUN_STOP, 0)    # 감속 정지
아두이노 (MAX485 모듈 사용)
배선은 코드 상단 주석 참고 · Uno의 SoftwareSerial은 115200에서 불안정할 수 있으니, 통신이 튀면 보레이트를 19200으로 낮추거나(레지스터 0x0009) 하드웨어 시리얼이 있는 보드(Mega·ESP32)를 권장합니다
/*
 * SM-NK17 시리즈 RS485(Modbus-RTU) 아두이노 샘플 코드 — MotorBank
 *
 * 배선 (MAX485 모듈 사용 기준):
 *   Arduino D8  -> MAX485 RO      (수신)
 *   Arduino D9  -> MAX485 DI      (송신)
 *   Arduino D2  -> MAX485 DE + RE (송수신 전환, 묶어서 연결)
 *   MAX485 A/B  -> 모터 485A / 485B
 *   전원: 모터 V+/V- 에 DC 8~48V (24V 권장), 극성 주의!
 *
 * 통신: 115200bps, 8N1 (출하 기본값) / 드라이버 주소: DIP 스위치, 기본 1
 * 동작: 3초 정방향 회전 -> 정지 -> 3초 역방향 회전 -> 정지 반복
 */
#include <SoftwareSerial.h>

SoftwareSerial rs485(8, 9);   // RX, TX
const int DE_RE = 2;
const byte SLAVE = 1;

uint16_t crc16(byte *buf, int len) {
  uint16_t crc = 0xFFFF;
  for (int i = 0; i < len; i++) {
    crc ^= buf[i];
    for (int b = 0; b < 8; b++)
      crc = (crc & 1) ? (crc >> 1) ^ 0xA001 : crc >> 1;
  }
  return crc;
}

void sendFrame(byte *frame, int len) {
  uint16_t crc = crc16(frame, len);
  digitalWrite(DE_RE, HIGH);          // 송신 모드
  rs485.write(frame, len);
  rs485.write(crc & 0xFF);            // CRC 하위 바이트 먼저
  rs485.write(crc >> 8);
  rs485.flush();
  digitalWrite(DE_RE, LOW);           // 수신 모드
  delay(50);
  while (rs485.available()) rs485.read();  // 응답 버퍼 비우기 (단순 예제)
}

// 16비트 레지스터 쓰기 (기능코드 0x06)
void writeU16(uint16_t reg, uint16_t val) {
  byte f[6] = { SLAVE, 0x06,
                (byte)(reg >> 8), (byte)reg,
                (byte)(val >> 8), (byte)val };
  sendFrame(f, 6);
}

// 32비트 레지스터 쓰기 (기능코드 0x10)
// ※ SM-NK17은 하위 워드를 먼저 보냅니다
void writeI32(uint16_t reg, long val) {
  uint16_t lo = val & 0xFFFF;
  uint16_t hi = ((unsigned long)val >> 16) & 0xFFFF;
  byte f[11] = { SLAVE, 0x10,
                 (byte)(reg >> 8), (byte)reg,
                 0x00, 0x02, 0x04,
                 (byte)(lo >> 8), (byte)lo,
                 (byte)(hi >> 8), (byte)hi };
  sendFrame(f, 11);
}

void setup() {
  pinMode(DE_RE, OUTPUT);
  digitalWrite(DE_RE, LOW);
  rs485.begin(115200);
  delay(500);

  writeU16(0x009A, 60);       // 운전 속도 60rpm
  writeU16(0x0098, 200);      // 가속 200ms
  writeU16(0x0099, 200);      // 감속 200ms
}

void loop() {
  writeU16(0x00C8, 1);        // 정방향 회전 시작
  delay(3000);
  writeU16(0x00C8, 0);        // 감속 정지
  delay(1000);

  writeU16(0x00C8, 257);      // 역방향 회전 시작
  delay(3000);
  writeU16(0x00C8, 0);        // 감속 정지
  delay(1000);

  // 참고) 위치 이동 예:
  // writeI32(0x00CE, 4000);   // 현재 위치에서 +1회전 (기본 4000펄스/회전)
  // writeI32(0x00D0, 0);      // 절대 위치 0으로 복귀
}
10. 문의 주실 때
1 지금 펄스로 제어하시나요, 통신으로 바꾸고 싶으신가요
2 축 수와 필요한 토크
3 위치 제어가 필요한가요, 정속 회전인가요
4 사용 전압과 상위 제어기 (PLC / PC / 보드)

기존 "모터+드라이버" 구성에서 교체하시는 경우, 쓰시던 모델명만 알려주셔도 대체 가능 여부와 배선 변경점을 정리해 드립니다. 감속기 결합·사양 지정 제작도 검토해 드립니다.
선정 상담
2D·3D 도면, 사용설명서(펄스·RS485), 통신 매뉴얼을 제공합니다.

상품문의 게시판 · help@motorbank.kr · 02-855-6201

배송안내




  배송안내
  1. 총 결제 금액 15만원 이상 구매 시 무료배송, 15만원 미만일 경우 배송비 3,500원이 추가됩니다.
  2. 배송은 CJ대한통운 택배를 이용하고 있습니다.
  3. 주문 제작, 주문 발주, 조립제품의 경우 7일~14일 정도 소요될 수 있습니다.
  4. 배송 상황은 대한통운 홈페이지에서 확인 가능합니다.
  5. 퀵으로 배송받으실 경우, 지불하신 택배비는 환불되지 않습니다.
    6. 15만원이상 구매시 저희가 부담했던 택배비에 대해서, 단순변심에 의한 취소는 처음발송시의택배비 차감하고 환불처리 됩니다.
    7. 구매하신 제품의 크기(부피 또는 길이)에 따라 기본 배송비 외에 추가 비용이 발생할 수 있습니다(실제 비용 측정 후 안내).
  

  교환, 반품이 불가한 경우
  1. 상품 개봉으로 인한 상품 가치 훼손 시에는 7일 이내라도 교환·반품이 불가능합니다.
  2. 주문 제작, 조립제품의 경우 7일 이내이더라도 교환·반품이 불가능합니다.
  3. 전압이 단 1회라도 인가된 경우 교환·반품이 불가능합니다. 단순변심은 절대 박스를 개봉하지 않은 상태로 반품처리 진행하시기 바랍니다.
  4. 반드시 선불 택배로 보내셔야 하며, 착불일 경우 반송처리 됩니다.
  5. 일부 상품은 신모델 출시, 부품 가격 변동 등 제조사 사정으로 가격이 변동될 수 있습니다. 
  6. 박스 개봉시 절대 반품,교환이 불가하오니, 단순변심의 경우 절대 포장을 개봉하지 마세요.

  유의사항
  1. 공급 제조사는 재고 사정에 따라 동일 사양의 대체상품으로 공급될 수 있으며, 사용자께서는 사용 전 반드시 제품에 대한 테스트 및 확인 절차 후 사용하시기 바랍니다. 
  2. 상기 제품에 첨부된 데이터시트는 참고사항 입니다.
  3. 데이터시트에 표기된 내용에 대하여 본사는 어떠한 기술적인 문의 및 발생하는 문제에 대한 법적인 책임을 지지 않습니다. 
  4. 제공되는 스펙과 모양은 별도의 공지없이 변경될 수 있습니다.



  구매 전 주의사항 (주의사항을 읽지 않고 구매 시 발생하는 문제는 당사가 책임지지 않습니다.)
  - ​감속기 장착 조립제품 및 PCB 조립제품 등은 결제 후 절대 변경,취소,교환되지 않습니다. 결제하시기 전 신중히 선정하시기 부탁드립니다. 
     -  저희는 B2B 전문 쇼핑몰입니다.  또한 KC를 받지 않아도 되는 산업용부품을 대부분 판매중입니다. 
    - 판매제품은 완제품이 아닌 부품입니다. 약간의 차이, 피복 등으로 인한 환불,교환,AS는 불가합니다.
  
YOU MAY ALSO LIKE 함께 구매하면 좋을 관련상품 모음

이미지 확대보기42각 단회전 앱솔루트 엔코더 일체형 드라이버내장형 클로즈루푸스텝모터 SM-NK17402SA 1000PPR 펄스제어 RS485통신 제어

42각 단회전 앱솔루트 엔코더 일체형 드라이버내장형 클로즈루푸스텝모터 SM-NK17402SA 1000PPR 펄스제어 RS485통신 제어
  • 42각 단회전 앱솔루트 엔코더 일체형 드라이버내장형 클로즈루푸스텝모터 SM-NK17402SA 1000PPR 펄스제어 RS485통신 제어
  • 42각 단회전 앱솔루트 엔코더 일체형 드라이버내장형 클로즈루푸스텝모터 SM-NK17402SA 1000PPR 펄스제어 RS485통신 제어
닫기

비밀번호 인증

글 작성시 설정한 비밀번호를 입력해 주세요.

닫기

장바구니 담기

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

찜 리스트 담기

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