• 헤리칼 기어 장착 니덱 BLDC모터 지름 36mm  PH36-BL3640 24V 저소음
  • 헤리칼 기어 장착 니덱 BLDC모터 지름 36mm  PH36-BL3640 24V 저소음

헤리칼 기어 장착 니덱 BLDC모터 지름 36mm PH36-BL3640 24V 저소음

Low Backlash 저소음 헤리칼 Ø36mm 유성감속기어드 니덱 22H BLDC모터

제조사
(주)로봇마트
원산지
한국
브랜드
motorbank
배송정보
3,500원 (조건부배송) 지역별 추가배송 주문시결제(선결제)
택배
구매안내

아두이노 제어 예제 코드 (복사해서 바로 사용)

본 모터(니덱 구동드라이버 내장형 BLDC)는 전용 드라이버 BLC-20(PWM 제어형) 또는 BLC-20R4(RS485 통신형 — PWM·볼륨 제어 겸용)와 함께 사용합니다. 아두이노 단순 속도·방향 제어면 BLC-20, 통신 제어(여러 대 주소 지정·상태 관리)까지 필요하면 BLC-20R4를 선택하세요. 아래에서 드라이버에 맞는 예제를 복사해 아두이노 IDE에 붙여넣으면 바로 사용할 수 있습니다. 코드 박스 안을 클릭한 뒤 전체 선택(Ctrl+A가 아닌 마우스 드래그)하여 복사하시면 됩니다.
① BLC-20 — PWM 제어 예제 (V3.2)
PWM 20kHz + 가감속 + 시리얼 모니터 명령 제어. 사전 준비: 아두이노 IDE의 라이브러리 매니저에서 TimerOneMsTimer2를 검색해 설치하세요 (스케치 → 라이브러리 포함하기 → 라이브러리 관리). 결선: D9→PWM, D4→방향, D2→브레이크, GND 공통. 업로드 후 시리얼 모니터(9600bps, "새 줄")에서 f80(정방향 80%) / r50(역방향 50%) / s(정지) / b1·b0(브레이크) / p5(가감속 기울기)로 조작합니다.
//==============================================================
// MotorBank BLC-20 / BLC-30 아두이노 예제 V3.2
// 기능: PWM 20kHz 속도제어 + 방향 + 브레이크 + 가감속(Slope)
//       + 시리얼 모니터 명령 제어 (V3.1 대비 추가)
// 보드: Arduino Uno (검증 기준)
//
// [사전 준비] 라이브러리 매니저에서 설치:
//   1) TimerOne   2) MsTimer2
//
// [결선]
//   D9  -> PWM(속도) 입력
//   D4  -> Direction(방향) 입력
//   D2  -> Brake(브레이크) 입력
//   GND -> 드라이버 GND (반드시 공통)
//
// [시리얼 모니터 사용법] (9600bps, "새 줄" 설정)
//   f80   : 정방향 80% 속도    r50 : 역방향 50% 속도
//   s     : 감속 정지(속도 0)   b1  : 브레이크 ON   b0 : 브레이크 OFF
//   p3    : 가감속 기울기 1~10 (숫자 클수록 빠르게 가감속)
//==============================================================
#include <TimerOne.h>
#include <MsTimer2.h>

const int PWM_PIN   = 9;
const int DIR_PIN   = 4;
const int BRAKE_PIN = 2;

volatile int DutyRef = 0;   // 목표 듀티 -1024~1024 (-100%~100%)
volatile int Duty    = 0;   // 현재 듀티(가감속 반영)
int Slope = 5;              // 가감속 단계 1~10

void flash() {              // 가감속: 목표까지 1스텝씩 접근
  if (Duty < DutyRef) Duty++;
  else if (Duty > DutyRef) Duty--;
  if (Duty > 0) {
    Timer1.setPwmDuty(PWM_PIN, 1024 - Duty);
    digitalWrite(DIR_PIN, LOW);
  } else if (Duty < 0) {
    Timer1.setPwmDuty(PWM_PIN, 1024 + Duty);
    digitalWrite(DIR_PIN, HIGH);
  } else {
    Timer1.setPwmDuty(PWM_PIN, 1024);  // 속도 0
  }
}

void applySlope() {
  MsTimer2::stop();
  MsTimer2::set(10 / constrain(Slope, 1, 10), flash);
  MsTimer2::start();
}

void setup() {
  Serial.begin(9600);
  Timer1.initialize();
  Timer1.pwm(PWM_PIN, 0);
  Timer1.setPeriod(50);              // 50us -> PWM 20kHz
  Timer1.setPwmDuty(PWM_PIN, 1024);  // 정지 상태로 시작
  pinMode(DIR_PIN, OUTPUT);   digitalWrite(DIR_PIN, LOW);
  pinMode(BRAKE_PIN, OUTPUT); digitalWrite(BRAKE_PIN, HIGH); // 브레이크 해제 상태
  applySlope();
  Serial.println(F("BLC-20/30 ready. f80 r50 s b1 b0 p5"));
}

void loop() {
  if (!Serial.available()) return;
  String cmd = Serial.readStringUntil('\n');
  cmd.trim();
  if (cmd.length() == 0) return;
  char c = cmd.charAt(0);
  int v = cmd.substring(1).toInt();
  switch (c) {
    case 'f': DutyRef =  constrain(v, 0, 100) * 1024L / 100; Serial.print(F("FWD ")); Serial.println(v); break;
    case 'r': DutyRef = -constrain(v, 0, 100) * 1024L / 100; Serial.print(F("REV ")); Serial.println(v); break;
    case 's': DutyRef = 0; Serial.println(F("STOP(slope)")); break;
    case 'b': digitalWrite(BRAKE_PIN, v ? LOW : HIGH); Serial.println(v ? F("BRAKE ON") : F("BRAKE OFF")); break;
    case 'p': Slope = constrain(v, 1, 10); applySlope(); Serial.print(F("Slope ")); Serial.println(Slope); break;
    default:  Serial.println(F("? f80 r50 s b1 b0 p5"));
  }
}
② BLC-20R4 — RS485(Modbus RTU) 통신 제어 예제 (V1.0)
아두이노 우노 + RS485 컨버터 모듈(MAX485 등) 필요. 드라이버 스위치는 Int로 설정. 결선: 모듈 RO→D10, DI→D11, DE+RE(묶어서)→D3, A/B→드라이버 485 A/B(통신 안 되면 A/B 교차), 전원 5V·GND 공통. 업로드 후 시리얼 모니터에서 가장 먼저 i를 입력해 RS485 통신모드를 기동해야 하며(전원 인가 후 최초 1회 필수), 이후 f80 / r50 / s / b1·b0으로 제어합니다. 송수신 내용이 HEX로 출력되므로 문제 발생 시 그 로그를 상품문의에 붙여 주시면 빠르게 확인해 드립니다.
//==============================================================
// MotorBank BLC-20R4 아두이노 RS485(Modbus RTU) 예제 V1.0
// 기능: RS485 통신으로 기동/속도/방향/브레이크 제어
// 보드: Arduino Uno + RS485 컨버터 모듈(MAX485 등)
// 근거: BLC-20R4 사용설명서 & RS485 Modbus 프로토콜 (CRC 예제 6건 검증 일치)
//
// [드라이버 설정] 제어 스위치를 Int로 설정 (RS485 제어 조건)
// [통신 설정] 9600bps, No Parity, 8 Data, 1 Stop (제품 기본값)
//
// [결선 - MAX485 모듈 기준]
//   모듈 RO  -> D10 (아두이노 수신)
//   모듈 DI  -> D11 (아두이노 송신)
//   모듈 DE+RE(묶어서) -> D3   (송신 시 HIGH)
//   모듈 A/B -> 드라이버 485 A/B (통신 안 되면 A/B 교차 시도)
//   모듈 VCC -> 5V, GND -> 공통 GND
//
// [시리얼 모니터 사용법] (9600bps, "새 줄" 설정)
//   i    : RS485 통신모드 기동(0x0023) - 전원 인가 후 최초 1회 필수!
//   f80  : CW 방향 + 속도 80%     r50 : CCW 방향 + 속도 50%
//   s    : 속도 0                 b1/b0 : 브레이크 High/Low
//
// [주의]
// - 방향값: 상세 예시 기준 0x0000=CCW, 0x0001=CW 적용
//   (설명서 요약표의 "1CW/2CCW" 표기와 상이 - 예시 프레임(CRC 검증됨) 기준 채택)
// - RS485 반이중 특성상 자기 송신 에코가 수신될 수 있어 코드에서 버림 처리함
//==============================================================
#include <SoftwareSerial.h>

const int RS485_RX = 10;   // <- 모듈 RO
const int RS485_TX = 11;   // -> 모듈 DI
const int RS485_EN = 3;    // DE+RE
const byte DEV_ADDR = 0x01; // 제어기 주소(출고 기본 0x01)

SoftwareSerial rs485(RS485_RX, RS485_TX);

uint16_t crc16(const byte *data, byte len) {          // Modbus CRC16
  uint16_t crc = 0xFFFF;
  for (byte j = 0; j < len; j++) {
    crc ^= data[j];
    for (byte i = 8; i != 0; i--) {
      if (crc & 0x0001) { crc >>= 1; crc ^= 0xA001; }
      else crc >>= 1;
    }
  }
  return crc;
}

// Function 0x06: 레지스터 1개 쓰기 (기동/속도/방향/브레이크 공용)
void write06(uint16_t reg, uint16_t val) {
  byte f[8];
  f[0] = DEV_ADDR; f[1] = 0x06;
  f[2] = reg >> 8; f[3] = reg & 0xFF;
  f[4] = val >> 8; f[5] = val & 0xFF;
  uint16_t c = crc16(f, 6);
  f[6] = c & 0xFF;   // CRC Low 먼저 (문서 예제 검증 순서)
  f[7] = c >> 8;     // CRC High

  while (rs485.available()) rs485.read();  // 수신버퍼 비우기
  digitalWrite(RS485_EN, HIGH);            // 송신 모드
  rs485.write(f, 8);
  rs485.flush();
  digitalWrite(RS485_EN, LOW);             // 수신 모드

  // 응답 수신(에코가 먼저 들어오면 8바이트 버리고 다음 8바이트가 실제 응답)
  byte buf[16]; byte n = 0;
  unsigned long t0 = millis();
  while (millis() - t0 < 300 && n < 16) {
    if (rs485.available()) buf[n++] = rs485.read();
  }
  Serial.print(F("TX:"));
  for (byte i = 0; i < 8; i++) { Serial.print(' '); if (f[i] < 16) Serial.print('0'); Serial.print(f[i], HEX); }
  Serial.print(F(" | RX(")); Serial.print(n); Serial.print(F("B):"));
  for (byte i = 0; i < n; i++) { Serial.print(' '); if (buf[i] < 16) Serial.print('0'); Serial.print(buf[i], HEX); }
  Serial.println();
}

void setup() {
  Serial.begin(9600);
  rs485.begin(9600);                        // 9600 N81 (제품 기본)
  pinMode(RS485_EN, OUTPUT);
  digitalWrite(RS485_EN, LOW);
  Serial.println(F("BLC-20R4 RS485 ready."));
  Serial.println(F("i(기동,최초1회) f80 r50 s b1 b0"));
}

void loop() {
  if (!Serial.available()) return;
  String cmd = Serial.readStringUntil('\n');
  cmd.trim();
  if (cmd.length() == 0) return;
  char c = cmd.charAt(0);
  int v = constrain(cmd.substring(1).toInt(), 0, 100);
  switch (c) {
    case 'i': write06(0x0023, 0x0000); Serial.println(F("RS485 mode start")); break; // 기동(필수)
    case 'f': write06(0x0025, 0x0001); write06(0x0024, v); break;  // CW + 속도
    case 'r': write06(0x0025, 0x0000); write06(0x0024, v); break;  // CCW + 속도
    case 's': write06(0x0024, 0); break;                            // 속도 0
    case 'b': write06(0x0026, v ? 1 : 0); break;                    // 브레이크
    default:  Serial.println(F("? i f80 r50 s b1 b0"));
  }
}
작성: MotorBank 기술팀 · 아두이노 우노 기준 · 최종 업데이트: 2026-08-14

ph36-bl3640-24_700x6400_01_165126.jpg
ph36-bl3640-24_700x6400_02_165140.jpg
ph36-bl3640-24_700x6400_04_165148.jpgph36-1_101552.jpg
ph36-bl3640-24_700x6400_11_171128.jpg


ph36-bl3640-24_700x6400_05_165159.jpg
ph36-bl3640-24_700x6400_09_165216.jpg
ph36-bl3640-24_700x6400_10_165224.jpg
ph36-bl3640-12_700x6400_12_181836_105059.jpg
ph36-bl3640-12_700x6400_13_181836_105100.jpg

- BLC-20 일본 니덱 구동드라이버 내장 PWM타입 전용 BLDC모터 드라이버 겸 컨트롤러. 


- 구동드라이버내장형 BLDC모터에 최적화



■ BLDC모터 드라이버 BLC-20 사용시 주의사항


- Power 역전압 입력에 주의하십시요.

- 속도조절은 볼륨을 사용합니다.(ACC-10 별매)

- 24W 이상 지속 사용시 제품에 열이 발생될 수 있으니 주의하십시요.
  ( Heat Sink를 보강하거나, Fan등을 이용하여 냉각 )

- Motor 선의 연결순서에 주의 하십시요.
  ( 위치가 바뀔 경우 회전이상, 발열, 소음, 파손등의 문제가 발생됨 )

- 일본 니덱 구동드라이버 내장형 PWM타입 BLDC모터 용외 다른 용도로 사용하지 마십시요.

- 정역회전 방향과 브레이크는 버튼 스위치를 이용하면됩니다.


- AVR, 아두이노등 외부 MCU로 디지탈 제어시는 모두 스위치를 디지탈입력쪽으로

  변환한 후 사용하시기 바랍니다.

 


ph36-bl3640-24_700x6400_06_165254.jpg

비밀번호 인증

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

확인