• BLC-400 256축 센서타입BLDC모터 드라이버 RS485통신규격 400W
  • BLC-400 256축 센서타입BLDC모터 드라이버 RS485통신규격 400W
  • BLC-400 256축 센서타입BLDC모터 드라이버 RS485통신규격 400W

BLC-400 256축 센서타입BLDC모터 드라이버 RS485통신규격 400W

BLDC홀센서 모터 전용 RS485통신규격 400W

배송정보
3,500원 (조건부배송) 지역별 추가배송 주문시결제(선결제)
택배
구매안내

소프트웨어 사용 시 참고사항

속도 및 방향 제어가 정상적으로 동작하지 않을 경우 아래 내용을 확인해 주세요.

01. 모터 회전 방향(CW/CCW) 변경

BLDC 모터는 Hall 센서(H1/H2/H3) 신호 순서와 모터 상(U/V/W)의 조합에 따라 정상적인 구동 여부가 달라질 수 있습니다.

Hall 신호 또는 모터 상 결선이 맞지 않거나 회전 방향 설정이 올바르지 않은 경우, 모터가 정상적으로 회전하지 않거나 속도 및 방향 제어가 불안정할 수 있습니다.

▶ 확인 방법
  • 소프트웨어의 모터 회전 방향 설정을 CW ↔ CCW로 변경합니다.
  • 방향 변경 후 모터의 속도 및 방향 제어 상태를 다시 테스트합니다.
  • 동일한 증상이 지속될 경우 Hall 센서 결선 및 센서 이상 여부를 확인해 주세요.

02. 기본 제어 파라미터 설정

소프트웨어 최초 설정 시 아래 값을 기본값으로 설정한 후 테스트해 주세요.

항목권장 초기 설정
Kp30
Ki1
Kd0
정격전류모터 정격전류

모터가 정상적으로 동작하는 것을 확인한 후 Kp / Ki / Kd 값을 변경하여 원하는 응답 특성에 맞게 조정할 수 있습니다.

※ 주의사항

Kp 값을 높이면 모터의 응답성이 향상될 수 있으나, 설정값이 과도하게 높을 경우 진동 또는 떨림 현상이 발생할 수 있습니다.

03. 분해능 설정

사용하는 모터의 종류에 따라 소프트웨어의 분해능 입력값을 다르게 설정해야 합니다.

모터 종류분해능 입력값
Hall 센서 BLDC
+ 엔코더 장착
엔코더 PPR 값
일반 Hall 센서 BLDC모터 Pole(극수)

※ 제품 사양에 따라 입력 기준이 다를 수 있으므로 해당 모터의 사양을 확인해 주세요.

04. 위치제어 모드 설정

위치제어 모드에 따라 정지(Stop) 명령의 동작 여부가 달라집니다.

제어 모드정지 명령
상대 위치제어 모드정상작동불가
절대 위치제어 모드사용 가능
정지 명령을 사용해야 하는 경우 절대 위치제어 모드로 설정해 주세요.
BLC-400 통신 프로토콜 다운로드 클릭    
72f1b1d766504f00c433743be95fa516_155044.jpg

 

485통신 기능을 원하기 때문에 다축제어가 가능합니다. 다만 제어시 PC와 계속 연결할 수 없는 상태라면

아두이노 모터드라이버 확장쉴드를 같이 사용해 보시기 바랍니다.

아두이노 소스프로그램을 지원하여 자유자재로 PC 없이 펌웨어로 사용이 가능해집니다.


202cb962ac59075b964b07152d234b70_095229.png


RS-485 통신 제어 — 아두이노 예제 코드 (BLC-200 / BLC-400 / BLC-400R4E 공용)

아래 세 드라이버는 동일한 MC-RS485 프로토콜을 사용하므로 이 예제 코드를 그대로 함께 쓸 수 있습니다. 사용하실 모터의 용량과 엔코더 유무에 맞는 드라이버를 선택하세요:
· BLC-200 구매하기 → — 200W급 · 홀센서 BLDC 모터용 (엔코더 미지원)
· BLC-400 구매하기 → — 400W급 · 홀센서 BLDC 모터용 (엔코더 미지원)
· BLC-400R4E 구매하기 → — 400W급 · 엔코더 장착 홀센서 BLDC 모터용
통신 사양은 9600bps 기본, 8 Data·No Parity·1 Stop이며, 프레임 구조는 FF FE(헤더) + ID + 데이터크기 + 체크섬 + 모드 + 데이터, 체크섬은 헤더·체크섬을 제외한 전체 바이트 합의 하위 1바이트에 NOT 연산을 한 값입니다 (PLC·PC 등 다른 상위 장치도 이 구조를 그대로 구현하면 됩니다). 예제는 아두이노 우노 + RS485 컨버터(MAX485 등) 기준이고, 시리얼 모니터에서 f1000(CW 100.0RPM) / r500(CCW 50.0RPM) / s(정지) / g9000(CW 90.00도 이동) / z(위치 초기화) / p(위치 피드백) / v(속도 피드백)로 조작합니다. 결선: 모듈 RO→D10, DI→D11, DE+RE→D3, A/B→드라이버 485 단자(통신이 안 되면 A/B 교차), GND 공통. 아두이노 확장쉴드 MAS-001을 쓰면 쉴드의 485 단자에 연결하면 됩니다. 송수신 HEX 로그가 출력되므로 문제 발생 시 로그를 상품문의에 붙여 주시면 빠르게 확인해 드립니다.
//==============================================================
// MotorBank BLC 시리즈 아두이노 RS485(MC-RS485 프로토콜) 공용 예제 V1.1
// 적용 제품: BLC-200 / BLC-400 / BLC-400R4E (통신 프로토콜 동일)
// 기능: 속도제어(가감속) / 위치제어(가감속) / 위치·속도 피드백 읽기
// 보드: Arduino Uno + RS485 컨버터 모듈(MAX485 등)
// 근거: 통신프로토콜 MC-RS485 V1.0.1 (문서 예제 체크섬 10건 검증 일치)
//
// [통신 설정] 9600bps(제품 초기값), 8 Data, No Parity, 1 Stop
// [프레임 구조] FF FE | ID | Data크기 | Checksum | Mode | Data...
// Checksum = ~(ID + Data크기 + Mode + Data바이트 합)의 하위 1바이트
//
// [결선 - MAX485 모듈 기준]
// 모듈 RO -> D10 / DI -> D11 / DE+RE(묶음) -> D3
// 모듈 A/B -> 드라이버 485 A/B (통신 안 되면 A/B 교차)
// 모듈 VCC -> 5V, GND -> 아두이노·드라이버 공통
// * MAS-001 확장쉴드 사용 시 쉴드의 485 단자에 연결 (MAS-001 상세페이지 참조)
//
// [시리얼 모니터 사용법] (9600bps, "새 줄" 설정)
// f1000 : CW 100.0RPM (0.1RPM 단위, 도달시간 1초 가감속)
// r500 : CCW 50.0RPM
// s : 정지(속도 0)
// g9000 : CW 90.00도 위치 이동 (0.01도 단위, 도달시간 1초)
// G9000 : CCW 90.00도 위치 이동
// z : 현재 위치를 0으로 초기화
// p : 위치 피드백 요청(방향/각도/속도/전류 표시)
// v : 속도 피드백 요청
//==============================================================
#include <SoftwareSerial.h>

const int RS485_RX = 10, RS485_TX = 11, RS485_EN = 3; const byte MOTOR_ID = 0x00; // 제품 초기 ID 0x00 (변경했다면 수정) SoftwareSerial rs485(RS485_RX, RS485_TX); // 프레임 송신: mode + data → 헤더/크기/체크섬 자동 구성 void sendFrame(byte mode, const byte *data, byte dlen) { byte size = dlen + 2; // Mode + Data + Checksum int sum = MOTOR_ID + size + mode; for (byte i = 0; i < dlen; i++) sum += data[i]; byte chk = (~sum) & 0xFF; byte f[16]; byte n = 0; f[n++] = 0xFF; f[n++] = 0xFE; f[n++] = MOTOR_ID; f[n++] = size; f[n++] = chk; f[n++] = mode; for (byte i = 0; i < dlen; i++) f[n++] = data[i]; while (rs485.available()) rs485.read(); // 수신버퍼 비우기 digitalWrite(RS485_EN, HIGH); rs485.write(f, n); rs485.flush(); digitalWrite(RS485_EN, LOW); Serial.print(F("TX:")); for (byte i = 0; i < n; i++) { Serial.print(' '); if (f[i]<16) Serial.print('0'); Serial.print(f[i], HEX); } Serial.println(); } // 수신 프레임 읽기 + 위치/속도 피드백(0xD1/0xD2) 해석 void readFeedback() { byte buf[24]; byte n = 0; unsigned long t0 = millis(); while (millis() - t0 < 300 && n < 24) { if (rs485.available()) buf[n++] = rs485.read(); } if (n == 0) { Serial.println(F("RX: (응답 없음 - 결선/ID/전원 확인)")); return; } Serial.print(F("RX:")); for (byte i = 0; i < n; i++) { Serial.print(' '); if (buf[i]<16) Serial.print('0'); Serial.print(buf[i], HEX); } Serial.println(); // 프레임 헤더 탐색(자기 에코 뒤에 응답이 붙을 수 있어 마지막 FFFE 기준 해석) for (int i = n - 4; i >= 0; i--) { if (buf[i] == 0xFF && buf[i+1] == 0xFE) { byte mode = buf[i+5]; if ((mode == 0xD1 || mode == 0xD2) && i + 11 < (int)n + 1) { byte dir = buf[i+6]; unsigned int a = ((unsigned int)buf[i+7] << 8) | buf[i+8]; unsigned int b = ((unsigned int)buf[i+9] << 8) | buf[i+10]; byte cur = buf[i+11]; if (mode == 0xD1) { // 위치 피드백: 위치[0.01도] 속도[0.1RPM] Serial.print(F("위치: ")); Serial.print(dir ? F("CW ") : F("CCW ")); Serial.print(a / 100.0); Serial.print(F("도, 속도 ")); Serial.print(b / 10.0); Serial.print(F("RPM, 전류 ")); Serial.print(cur * 0.1); Serial.println(F("A")); } else { // 속도 피드백: 속도[0.1RPM] 위치[0.1도] Serial.print(F("속도: ")); Serial.print(dir ? F("CW ") : F("CCW ")); Serial.print(a / 10.0); Serial.print(F("RPM, 위치 ")); Serial.print(b / 10.0); Serial.print(F("도, 전류 ")); Serial.print(cur * 0.1); Serial.println(F("A")); } } break; } } } void speedMove(byte dir, unsigned int spd01rpm, byte time01s) { // 가감속 속도제어 0x03 byte d[4] = { dir, (byte)(spd01rpm >> 8), (byte)(spd01rpm & 0xFF), time01s }; sendFrame(0x03, d, 4); } void posMove(byte dir, unsigned int pos001deg, byte time01s) { // 가감속 위치제어 0x02 byte d[4] = { dir, (byte)(pos001deg >> 8), (byte)(pos001deg & 0xFF), time01s }; sendFrame(0x02, d, 4); } void setup() { Serial.begin(9600); rs485.begin(9600); // 제품 초기값 9600bps pinMode(RS485_EN, OUTPUT); digitalWrite(RS485_EN, LOW); Serial.println(F("BLC MC-RS485 ready.")); Serial.println(F("f1000 r500 s g9000 G9000 z p v")); } 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 = cmd.substring(1).toInt(); switch (c) { case 'f': speedMove(0x01, constrain(v, 1, 65533), 10); break; // CW, 도달 1.0s case 'r': speedMove(0x00, constrain(v, 1, 65533), 10); break; // CCW case 's': speedMove(0x01, 1, 5); delay(600); speedMove(0x01, 1, 1); Serial.println(F("감속 정지")); break; case 'g': posMove(0x01, constrain(v, 0, 65533), 10); break; // CW 위치 case 'G': posMove(0x00, constrain(v, 0, 65533), 10); break; // CCW 위치 case 'z': sendFrame(0x0E, nullptr, 0); Serial.println(F("위치 0 초기화")); break; case 'p': sendFrame(0xA1, nullptr, 0); readFeedback(); return; case 'v': sendFrame(0xA2, nullptr, 0); readFeedback(); return; default: Serial.println(F("? f1000 r500 s g9000 G9000 z p v")); return; } readFeedback(); // 명령 후 응답/에코 로그 표시
}
작성: MotorBank 기술팀 · 아두이노 우노 기준 · 최종 업데이트: 2026-08-14





 

 

비밀번호 인증

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

확인