[아두이노] [강좌] 39. 스텝 모터 (3) - 모터 드라이버 EasyDriver(A3967) 사용하기

아두이노에서 스텝 모터를 구동하기 위한 모터 드라이버로 이 제품을 많이 사용하..는지는 잘 모르겠고내가 이걸 가지고 있어서 여기에 대한 설명.

88028b37d511417a79456b420a2348b8.png

이제 구매 추천 사이트는 빼야겠.. 뭔가 다른 사이트들에 죄짓는 기분. brown_and_cony-78


EasyDriver로 검색하면 나와요.

 


 

이 드라이버의 입력 핀은 많다우선 스텝 신호를 주기 위한 STEP 핀과 모터 회전 방향을 설정하는 DIR 스텝 모드를 설정하는 MS1, MS2 핀과 ENABLE , SLEEP(SLP) 핀이 있다출력 핀은 4개로 A, /A, B, /B 순서대로 연결해주면 되고. ENABLE 핀과 SLEEP 핀은 따로 연결해주지 않아도 사용할 수 있는 모양.

 

STEP 핀으로 LOW HIGH를 한 번 반복하는 신호를 주면 스텝 모터로 연결된 출력 핀으로 하나의 스텝 신호가 출력된다. 200 스텝을 주려면 STEP 핀에 LOW, HIGH 200번 반복하면 된다는 뜻.

 

다른 핀의 역할은 핀 이름에 대충 나와있고(Enable, Sleep. ??), 처음 보는 MS1, MS2 핀에 대한 설명만 간단히 하자.

 

다음 표는 A3967SLB 데이터시트에 나와있는 표다.


8923dbc2eb788c28ae922a2f6542ba84.png


“Full step (2 phase)” 2상 여자방식으로 구동되는 풀 스텝 모드라는 말풀 스텝은 1 스텝 당 1 회전각(모터에 표시된내가 가진 모터는1.8°.)을 회전한다는 말이고하프 스텝은 1 스텝에 1/2 회전각만큼 회전한다는 뜻한 스텝에 1.8° 회전하는 스텝 모터의 경우 하프 스텝 모드에서는 1 스텝에 0.9° 회전한다쿼터 스텝은 1/4 회전각만큼에잇θ 스텝(Eighth 한글 발음이..) 1/8 회전각만큼 이동한다.

 

예제에서는 연결하지 않았지만만일 ENABLE 핀과 SLEEP 핀을 연결한다면 두 핀은 Low Active 핀이라는 사실에 유의하자. Low Active란 핀의 신호가 LOW일 때 핀의 기능을 수행한다는 뜻, SLEEP 핀이 LOW일 때 드라이버가 슬립 모드로 설정되며, ENABLE 핀이 LOW일 때 드라이버가 활성화 된다는 뜻.



그래서 모터를 동작하기 위해서는 SLEEP 핀은 HIGH, ENABLE 핀은 LOW 신호를 줘야 한다드라이버 보드 상에서 기본으로 풀업풀다운 저항이 장착되어 신호가 없을 경우에는 HIGH, LOW 신호가 자동으로 설정된다.

 

 

아두이노 보드와 연결해보자.


e9e1421d987b241e3ef1c357a8536aff.png






모터가 엄청 크네그려허허허.



 핀 연결 표 추가

Easy 

Driver 

PWR IN

(GND)

PWR IN (M+) 

STEP 

DIR 

MS1 

MS2 

GND

아두이노

GND 

VIN 

GND


 

 

모터 드라이버에 직접 외부 전원을 연결하거나 아두이노 보드에 외부 전원을 연결하여 VIN 핀에서 모터 드라이버의 전원으로 연결하면 된다외부 전원을 왜 넣어야 하는지에 대해서는 이제 설명하지 않겠어요.

 

 

예제를 볼까.



 StepMotorTest_EasyDriver.ino


 int stepPin=7;

 int dirPin=6;

 int ms1Pin=5;

 int ms2Pin=4;

 

 int stepPerRevolution=200;

 int stepDelayMicros=2500;

 

 void setup() {

   pinMode(stepPin, OUTPUT);

   pinMode(dirPin, OUTPUT);

   pinMode(ms1Pin, OUTPUT);

   pinMode(ms2Pin, OUTPUT);

 }

 

 void loop() {

   // 시계 방향, Full-Step 모드 설정

   digitalWrite(dirPin, HIGH);

   digitalWrite(ms1Pin, LOW);

   digitalWrite(ms2Pin, LOW);

 

   for(int i=0; i<stepPerRevolution; i++) {

     digitalWrite(stepPin, HIGH);

     delayMicroseconds(stepDelayMicros);

     digitalWrite(stepPin, LOW);

     delayMicroseconds(stepDelayMicros);

   }

   delay(500);

 

   // 반시계 방향 설정

   digitalWrite(dirPin, LOW);

   for(int i=0; i<stepPerRevolution; i++) {

     digitalWrite(stepPin, HIGH);

     delayMicroseconds(stepDelayMicros);

     digitalWrite(stepPin, LOW);

     delayMicroseconds(stepDelayMicros);

   }

   delay(500);

 

   // 시계 방향, Half-Step 모드 설정

   digitalWrite(dirPin, HIGH);

   digitalWrite(ms2Pin, HIGH);

   for(int i=0; i<stepPerRevolution; i++) {

     digitalWrite(stepPin, HIGH);

     delayMicroseconds(stepDelayMicros);

     digitalWrite(stepPin, LOW);

     delayMicroseconds(stepDelayMicros);

   }

   delay(500);

 

   // 반시계 방향 설정

   digitalWrite(dirPin, LOW);

   for(int i=0; i<stepPerRevolution; i++) {

     digitalWrite(stepPin, HIGH);

     delayMicroseconds(stepDelayMicros);

     digitalWrite(stepPin, LOW);

     delayMicroseconds(stepDelayMicros);

   }

   delay(500);

 }


 



+) 수정

소스 내용 중 delayMicroseconds() 함수가 delay()로 사용된 오류를 수정함. 죄송합니다. ㅜㅜ




긴 것처럼 느껴진다면 그건 착각같은 내용이 반복되는 부분이 많다.

 

우선 핀 번호를 저장한다저장한 핀 번호대로 아두이노 보드와 모터 드라이버를 연결해야 한다핀 연결 잘못해놓고 왜 안되냐고 묻는 경우 많이 봤음. 특히 A, /A, B, /B 핀 순서를 꼭 확인한 후 연결할 것! 모터마다 순서가 다를 수 있다규.

 

그리고 360° 회전하는데 필요한 스텝 수와 딜레이 시간을 설정한다.

 

loop() 함수에서는 모터를 구동한다우선 dirPin 핀을 HIGH로 설정하고, ms1Pin 핀과 ms2Pin 핀은 모두 LOW로 설정하여 풀 스텝 모드를 설정한다그리고는 for() 반복문으로 stepPerRevolution 값 만큼 스텝을 반복한다스텝 딜레이는 최소 1 마이크로초 이상이어야 한다고 데이터시트에 명시되어 있다여기서는 2500 마이크로초 2.5 밀리초 딜레이므로 한 스텝 당 5 밀리초의 시간이 걸린다. 200 스텝을 진행하면 총 11분에 60바퀴를 도는 속도(60 RPM)를 가진다.

 

정확히 360°를 회전한 후 500 밀리초만큼 대기그리고 dirPin 핀을 LOW로 바꾼 후 다시 360° 회전. dirPin 핀 설정이 바뀌었으므로 반대 방향으로 회전한다.

 

그 다음엔 ms2Pin 핀을 HIGH로 설정하여 하프 스텝 모드로 설정한다하프 스텝 모드는 한 스텝 당 0.9° 씩 회전하므로, for() 반복문으로stepPerRevolution 스텝만큼 회전하면 정확히 180° 회전한다그리고는 다시 반대 방향으로 180° 회전.

 

 

쉽죠잉?? 쿼터 스텝과 에잇θ 스텝 동작은 여러분께 맡길께요퐈이팅!

 

 

난 여기서 이만.



아, 다음 시간엔 서보 모터에 대해서 알아볼 예정.

0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

임베디드 보드

번호 제목 글쓴이 날짜 조회수
58 아두이노 [강좌] 50. 와이파이 통신 (4) - WebServer 예제 icon 양재동메이커 03-21 9,540
57 아두이노 [강좌] 49. 와이파이 통신 (3) - WebClient 예제 icon 양재동메이커 03-21 13,215
56 아두이노 [강좌] 48. 와이파이 통신 (2) - 커맨드 모드 사용하기 (WiFly 쉴드) icon 양재동메이커 03-20 8,623
55 아두이노 [강좌] 47. 와이파이 통신 (1) - 와이파이란 무엇인가 icon 양재동메이커 03-20 12,390
54 아두이노 [강좌] 46. 블루투스 통신 (5) - 프로토콜 만들기 (2) icon 양재동메이커 03-20 8,909
53 아두이노 [강좌] 45. 블루투스 통신 (4) - 프로토콜 만들기 (1) icon 양재동메이커 03-20 10,405
52 아두이노 [강좌] 44. 블루투스 통신 (3) - RN42 모듈에서 직접 접속하기 icon 양재동메이커 03-20 7,737
51 아두이노 [강좌] 43. 블루투스 통신 (2) - 스마트폰과 통신하기 icon 양재동메이커 03-20 9,840
50 아두이노 [강좌] 42. 블루투스 통신 (1) - RN42 블루투스 모듈 실습하기 icon 양재동메이커 03-20 10,977
49 아두이노 [강좌] 41. 서보 모터 (2) - Servo 함수 알아보기 icon 양재동메이커 03-20 12,694
48 아두이노 [아두이노 강좌] 40. 서보 모터 (1) - 서보 모터 동작 방식 icon 양재동메이커 03-20 12,629
47 아두이노 [강좌] 39. 스텝 모터 (3) - 모터 드라이버 EasyDriver(A3967) 사용하기 icon 양재동메이커 03-20 8,980
46 아두이노 [강좌] 38. 스텝 모터 (2) - Stepper 함수 알아보기 icon 양재동메이커 03-20 12,544
45 아두이노 [강좌] 37. 스텝 모터 (1) - 스텝 모터 동작 방식 icon 양재동메이커 03-20 9,320
44 아두이노 [강좌] 36. DC 모터 (2) - DC 모터 드라이버 실습하기 (TB6612FNG) icon 양재동메이커 03-20 9,183
43 아두이노 [강좌] 35. DC 모터 (1) - DC 모터 동작 방식 icon 양재동메이커 03-20 11,459
42 아두이노 [강좌] 34. SPI 통신 (3) - 기압 센서(MPL115A1) 실습하기 icon 양재동메이커 03-20 8,133
41 아두이노 [강좌] 33. SPI 통신 (2) – SPI 함수 알아보기 icon 양재동메이커 03-20 14,500
40 아두이노 [강좌] 32. SPI 통신 (1) - SPI 통신이란 무엇인가 icon 양재동메이커 03-20 18,970
39 아두이노 [강좌] 31. I2C 통신 (3) - 온도 센서(TMP102) 실습하기 icon 양재동메이커 03-20 14,785