1. 프로젝트 사용한 보드 종류
오렌지보드
2. 사용한 개발 프로그램명
아두이노 IDE
3. 사용한 센서 모델명
[DRI0023]Dual Bipolar Stepper Motor Shield for Arduino (A4988)
A4988이 두개 장착되어있어 두개의 스테핑모터 제어가 가능한 모터 쉴드입니다.
4. 연결한 회로 설명 (또는 이미지)
인터넷에 나와있듯 연결을 하였구요 아두이노에 그대로 장착했습니다.
5. 소스코드 (주석 필수)
const int M1dirpin = 7; //Motor X direction pin
const int M1steppin = 6; //Motor X step pin
const int M1en=8; //Motor X enable pin
const int M2dirpin = 4; //Motor Y direction pin
const int M2steppin = 5; //Motor Y step pin
const int M2en=12; //Motor Y enable pin
int stepsPerRevolution = 200; // 1바퀴 회전
void setup()
{
pinMode(M1dirpin,OUTPUT);
pinMode(M1steppin,OUTPUT);
pinMode(M1en,OUTPUT);
pinMode(M2dirpin,OUTPUT);
pinMode(M2steppin,OUTPUT);
pinMode(M2en,OUTPUT);
digitalWrite(M1en,LOW);// Low Level Enable
digitalWrite(M2en,LOW);// Low Level Enable
Serial.begin(9600);
}
void loop()
{
int x;
String sCommand = "";
if(Serial.available())
{
char w = Serial.read();
switch(w)
{
case '1':
delayMicroseconds(1000);
digitalWrite(M1en,LOW);//1번 = A 모터On
digitalWrite(M2en,HIGH);//2번 = B 모터 OFF
digitalWrite(M1dirpin, HIGH); // A 모터 시계방향회전
for(x = 0; x < stepsPerRevolution; x++)
{
digitalWrite(M1steppin, LOW);
delayMicroseconds(9000); //회전속도
digitalWrite(M1steppin, HIGH);
delayMicroseconds(9000);
}
delay(1);
break;
case '2':
delayMicroseconds(1000);
digitalWrite(M1en,LOW);
digitalWrite(M2en,HIGH);
digitalWrite(M1dirpin,LOW); //LOW가 작동을 안함, 반시계방향으로 회전
for(x = 0; x < stepsPerRevolution; x++)
{
digitalWrite(M1steppin, LOW);
delayMicroseconds(9000);
digitalWrite(M1steppin, HIGH);
delayMicroseconds(9000);
}
delay(1);
break;
case '4':
delayMicroseconds(1000);
digitalWrite(M1en,HIGH);
digitalWrite(M2en,LOW);
digitalWrite(M2dirpin, HIGH);
for(x = 0; x < stepsPerRevolution; x++)
{
digitalWrite(M2steppin, LOW);
delayMicroseconds(9000);
digitalWrite(M2steppin, HIGH);
delayMicroseconds(9000);
}
delay(1);
break;
case '5':
delayMicroseconds(1000);
digitalWrite(M1en,HIGH);
digitalWrite(M2en,LOW);
digitalWrite(M2dirpin, LOW); //LOW가 작동을 안함
digitalRead(M2dirpin);
for(x = 0; x < stepsPerRevolution; x++)
{
digitalWrite(M2steppin, LOW);
delayMicroseconds(9000);
digitalWrite(M2steppin, HIGH);
delayMicroseconds(9000);
}
delay(1);
break;
}
}
}
6. 문제점 및 에러 내용
구동시키면 1,2 명령을 주었을 때 A 모터가 명령1이든 명령2이든 같은 방향인 시계 방향으로 돌구요, 4,5 명령을 주었을 때 B모터가 A모터와 같은 증상으로 시계방향으로 돕니다.
LOW 명령을 안듣는다고 생각이 되는데 해결방법이 있을까요?
|