정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

아두이노 스텝모터가 한방향으로만 돕니다...
리브린스 | 2019-12-13

1. 프로젝트 사용한 보드 종류

  오렌지보드 

 

2. 사용한 개발 프로그램명

  아두이노 IDE

 

 

3. 사용한 센서 모델명

 [DRI0023]Dual Bipolar Stepper Motor Shield for Arduino (A4988)

 A4988이 두개 장착되어있어 두개의 스테핑모터 제어가 가능한 모터 쉴드입니다.

 

 

4. 연결한 회로 설명 (또는 이미지)

 Stepper Motor Shield For Arduino

 인터넷에 나와있듯 연결을 하였구요 아두이노에 그대로 장착했습니다.

 

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 명령을 안듣는다고 생각이 되는데 해결방법이 있을까요?

이전글   |    아두이노 nRF24L01 모듈관련 2019-12-12
다음글   |    DC 모터 동작 오류 2019-12-14