// BDD-480 BLDC 드라이버 아두이노 제어 예제 (MAS-001 사용)
// BTN1: 구동 / BTN2: 방향 전환 / 볼륨: 속도 조절
// BDD-240과 같은 제어 방식(EN/방향/속도 PWM)이므로 bdd240 클래스를 사용합니다.
#include "mas001.h"
#include "bdd240.h"
MAS001 myShield;
BDD240 myDevice; // BDD-480에 그대로 적용
void setup() {
myDevice.init(); // Timer1 초기화 - 반드시 setup()에서 호출
Serial.begin(115200);
}
void loop() {
if (myShield.button1Clicked()) { // BTN1 누르는 동안 구동
myDevice.enable(LOW);
if (myShield.button2Clicked()) { // BTN2로 방향 전환
myDevice.setSpeed((float)myShield.getPot() * 0.098); // 정방향 0~100%
} else {
myDevice.setSpeed(-(float)myShield.getPot() * 0.098); // 역방향 0~100%
}
} else { // 버튼을 놓으면 정지
myDevice.enable(HIGH);
myDevice.setSpeed(0);
}
delay(100);
}
| BDD-480 신호 | 아두이노 UNO |
|---|---|
| VSP (속도 지령, 0~5V PWM) | D9 |
| EN (기동/정지) | D5 |
| DIR (방향) | D6 |
| FG (속도 펄스 출력, 선택) | D2 |
| GND | GND (공통 연결 필수) |
// BDD-480 직결 제어 예제 (MAS-001 없이 아두이노 UNO만 사용)
// 결선: VSP->D9(속도 PWM), EN->D5, 방향 단자->D6, GND 공통
// FG->D2 (속도 펄스 측정, 선택) ※ 모터 전원(DC 24V 이상)은 드라이버에 별도 연결
// 같은 핀을 사용하므로 MotionTree-MAS 라이브러리(bdd240.h)를 그대로 사용합니다.
// 시리얼 모니터(115200bps)에서 명령 입력:
// f / r : 정방향 / 역방향 구동
// s : 정지
// t<n> : 속도 설정 0~100% (예 t40)
// e / E : EN 신호 LOW(구동 허가) / HIGH
// g : FG 펄스 주파수 출력 (속도 확인)
#include "bdd240.h" // 라이브러리 설치는 위 깃허브 저장소 참고
BDD240 myDevice;
const int PIN_FG = 2; // FG 입력 (인터럽트 0)
volatile unsigned long fgCount = 0;
float duty = 30; // 속도 기본값(%)
int dir = 1; // 1=정방향, -1=역방향
void fgISR() { fgCount++; }
void setup() {
myDevice.init(); // Timer1 초기화 (D9 = 100Hz PWM)
pinMode(PIN_FG, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(PIN_FG), fgISR, RISING);
Serial.begin(115200);
Serial.setTimeout(50);
myDevice.enable(HIGH); // 대기 상태로 시작
Serial.println(F("BDD-480 Direct Ready. f/r/s/t/e/E/g"));
}
void loop() {
if (!Serial.available()) return;
char c = Serial.read();
switch (c) {
case 'f': dir = 1; myDevice.enable(LOW); myDevice.setSpeed(duty); Serial.println(F("정방향 구동")); break;
case 'r': dir = -1; myDevice.enable(LOW); myDevice.setSpeed(-duty); Serial.println(F("역방향 구동")); break;
case 's': myDevice.setSpeed(0); Serial.println(F("정지")); break;
case 't': {
long v = Serial.parseInt();
if (v < 0 || v > 100) { Serial.println(F("범위 0~100")); break; }
duty = (float)v;
myDevice.setSpeed(duty * dir); // 구동 중이면 즉시 반영
Serial.print(F("속도: ")); Serial.print(v); Serial.println(F("%"));
break;
}
case 'e': myDevice.enable(LOW); Serial.println(F("EN=LOW (구동 허가)")); break;
case 'E': myDevice.enable(HIGH); Serial.println(F("EN=HIGH")); break;
case 'g': { // 1초간 FG 펄스 수 = 주파수(Hz)
noInterrupts(); fgCount = 0; interrupts();
delay(1000);
noInterrupts(); unsigned long hz = fgCount; interrupts();
Serial.print(F("FG: ")); Serial.print(hz); Serial.println(F(" Hz"));
// RPM 환산은 모터 극수에 따라 다릅니다. 설명서의 FG 사양을 참고하세요.
break;
}
default: break;
}
}

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