// SBD-10 스텝 드라이버 아두이노 제어 예제 (MAS-001 사용)
// 볼륨: 속도 조절 / BTN1: 구동/정지 (Enable) / BTN2: 회전 방향 전환
#include "mas001.h"
#include "sbd10.h"
MAS001 myShield;
SBD10 myDevice;
bool ena = 0;
bool dir = 0;
uint16_t pulse = 1000;
void setup() {
myDevice.init(); // Timer1 초기화 - 반드시 setup()에서 호출
Serial.begin(115200);
}
void loop() {
ena = myShield.button1Clicked(); // BTN1: 구동/정지
dir = myShield.button2Clicked(); // BTN2: 회전 방향 전환
pulse = myShield.getPot(); // 볼륨 값 = 펄스 폭(us)
if (pulse < 16) pulse = 16; // 하한 16us (라이브러리 최소값)
Serial.println(pulse); // 현재 속도값 확인용
myDevice.enable(ena);
myDevice.direction(dir);
myDevice.continuousPulse(pulse); // 설정한 폭으로 펄스 연속 발생
delay(10);
}
// 정량 이동: 지정한 개수만큼만 펄스를 발생 (이동량 제어) myDevice.direction(HIGH); // 이동 방향 설정 myDevice.pulseControl(750, 300); // 폭 750us 펄스를 300개 발생 // pulseControl()은 발생이 끝날 때까지 다음 줄로 넘어가지 않습니다(blocking)
| SBD-10 신호 | 아두이노 UNO |
|---|---|
| STP (펄스) | D9 |
| DIR (방향) | D6 |
| EN (구동 허가) | D5 |
| GND | GND (공통 연결 필수) |
// SBD-10 직결 제어 예제 (MAS-001 쉴드 없이 아두이노 UNO만 사용)
// 결선: SBD-10 STP->D9, DIR->D6, EN->D5, GND 공통 (모터 전원은 드라이버에 별도 연결)
// 같은 핀을 사용하므로 MotionTree-MAS 라이브러리(sbd10.h)를 그대로 사용합니다.
// 시리얼 모니터(115200bps, 줄바꿈 없음)에서 명령 입력:
// f / r : 정방향 / 역방향 연속 회전
// s : 정지
// m<n> : 정방향 n펄스 정량 이동 (예 m400 = 1.8도 모터 2회전)
// M<n> : 역방향 n펄스 정량 이동
// t<us> : 펄스 폭 설정 (예 t750, 작을수록 빠름, 유효 16~16383)
// e / E : EN 신호 HIGH / LOW
#include "sbd10.h" // 라이브러리 설치는 위 깃허브 저장소 참고
SBD10 myDevice;
#define EN_RUN HIGH // 구동 시 EN 레벨. 모터가 반대로 동작하면 LOW로 변경
unsigned int width = 1000; // 펄스 폭(us) 기본값
void setup() {
myDevice.init(); // Timer1 초기화 - 반드시 setup()에서 호출
Serial.begin(115200);
Serial.setTimeout(50);
myDevice.enable(EN_RUN);
Serial.println(F("SBD-10 Direct Ready. f/r/s/m/M/t/e/E"));
}
void loop() {
if (!Serial.available()) return;
char c = Serial.read();
switch (c) {
case 'f': myDevice.direction(LOW); myDevice.continuousPulse(width); Serial.println(F("정방향 연속")); break;
case 'r': myDevice.direction(HIGH); myDevice.continuousPulse(width); Serial.println(F("역방향 연속")); break;
case 's': myDevice.continuousPulse(0); Serial.println(F("정지")); break;
case 'm': case 'M': {
long n = Serial.parseInt();
if (n <= 0) { Serial.println(F("펄스 수를 입력하세요 (예 m400)")); break; }
myDevice.continuousPulse(0);
myDevice.direction(c == 'm' ? LOW : HIGH);
myDevice.pulseControl(width, n); // 발생 완료까지 대기(blocking) - 이동 중 s 불가
Serial.print(F("정량 이동 완료: ")); Serial.println(n);
break;
}
case 't': {
long v = Serial.parseInt();
if (v < 16 || v > 16383) { Serial.println(F("유효 범위 16~16383us")); break; }
width = (unsigned int)v;
Serial.print(F("펄스 폭: ")); Serial.print(width); Serial.println(F("us"));
break;
}
case 'e': myDevice.enable(HIGH); Serial.println(F("EN=HIGH")); break;
case 'E': myDevice.enable(LOW); Serial.println(F("EN=LOW")); break;
default: break;
}
}
주의: 본제품에는 센서가 포함되어 있지 않습니다.
모터는 신호를 받으면 계속 구동되기 때문에, 리미트 센서나 스위치를 사용하셔서 사이드 끝쪽에서는 어느정도 거리를 두고 멈춰야 합니다.
아예 끝까지 가게되면 고장의 원인이 됩니다.


결선도(Circuit Diagram)
흑 녹 적 청
A /A B /B








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