본문 바로가기
Programming/Arduino

Arduino(아두이노) Stepper motor(12v) control.(A4988 드라이버)

by 크레노트 2020. 2. 3.
반응형

안녕하세요.

 

오늘은 아두이노와 A4988 드라이버를 사용하여 스테퍼(스텝,스테핑)모터를 제어해보도록 하겠습니다.

 

[필요 부품]

- Arduino uno 1EA

- A4988 스텝모터 드라이버 1EA

- 바이폴라 스텝모터[17HD4408-12N] 1EA

- 파워서플라이 OR 12V 1A 전원

 

[회로 구성]

 

먼저 스텝 모터는 유니폴라 방식과 바이폴라 방식이 있으며

 

간단하게 유니폴라는 고속 회전에 적합하고 , 바이폴라는 저속 회전에 적합하게 되겠습니다.

 

이번에 사용하게 될 모터는 바이폴라 방식에 1 STEP당 1.8도 회전하는 모터가 되겠습니다.

 

일단 본격적으로 들어가기 전 A4988드라이버에 대한 설명을 드리도록 하겠습니다.

 

사실 드라이버 설명이 제어의 끝입니다.

 

위에 회로에는 빠져 있지만 MS1,MS2,MS3의 신호에 따라 정밀도가 달라지게 됩니다.

 

정밀도는 아래의 표를 확인하시면 됩니다.

 

MS1 MS2 MS3 Microstep
LOW LOW LOW Full 1/1
HIGH LOW LOW Half 1/2
LOW HIGH LOW Quarter 1/4
HIGH HIGH LOW Eighth 1/8
HIGH HIGH HIGH Sixteenth 1/16

잘 이해가 되지 않는다면 Half의 경우는 한 회전당 1.8의 반인 0.9도씩 회전을 한다는 것입니다.

 

이것은 용도에 맞게 상용자가 여러 시험을 해본 후 결정하셔야 되는 문제라고 생각이 되네요^^

 

다음은 제어 소스입니다. 주석에 자세하게 설명을 다 적어 놓았으니 따로 설명드릴 것은 없어 보이네요.

 

[제어 소스]

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int PIN_dir = 9;
int PIN_step = 10;
 
void setup(){
  pinMode(PIN_dir,OUTPUT);
  pinMode(PIN_step,OUTPUT);
 
 
  digitalWrite(PIN_dir,HIGH);//HIGH 시계방향,LOW 반시계방향
}
 
void loop(){
  int i;
   for(i = 0; i < 200; i++)// 1회 동작 당 값
  {
    digitalWrite(PIN_step,HIGH);    
    delayMicroseconds(1000);    //회전 속도
    digitalWrite(PIN_step,LOW);    
    delayMicroseconds(1000);
  }
  delay(200);
}
cs

이렇게 하면 위의 회로대로 했을 때 360도 회전을 0.2초의 딜레이를 두고 수행하게 됩니다.

 

구동 영상을 찍어 놓긴 했는데... 날아가버렸네요...

 

궁금하신 점이 있으시다면 댓글 주세요^^

 

감사합니다.

반응형

댓글