[아두이노] [강좌] 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
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

임베디드 보드

번호 제목 글쓴이 날짜 조회수
118 아두이노 ESP32 Analog Inputs (ADC) +4 icon 양재동메이커 02-12 16,138
117 아두이노 TIP : Serial의 Port가 Open 시점 확인 icon 양재동메이커 01-21 12,992
116 아두이노 ESP32 Boot Mode icon 양재동메이커 12-28 12,835
115 아두이노 아두이노 에러 리스트(Arduino Error list) icon 양재동메이커 11-24 17,818
114 아두이노 ESP32 main.cpp +1 icon 양재동메이커 11-19 13,181
113 아두이노 ESP32 EEPROM 와 IR Remote icon 양재동메이커 08-06 13,074
112 아두이노 Learn ESP32 icon 양재동메이커 06-25 12,655
111 라즈베리 파이 라즈베리 파이 (Raspberry Pi) 기초 icon 양재동메이커 06-19 14,150
110 라즈베리 파이 (동영상 강의) 라즈베리 파이 강좌 Link icon 양재동메이커 06-17 13,249
109 STM32 / MBED [MED] Switch debouncing icon HellMaker 12-30 15,226
108 기타 [타이젠] 아두이노의 16x2 LCD Display라이브러리 LiquidCrystal_I2C의 타이젠 포팅 icon 양재동메이커 09-15 14,803
107 기타 [타이젠] GPIO의 디지탈 출력과 입력 인터럽트의 C++ Class 제작 icon 양재동메이커 09-12 14,280
106 마이크로비트 서보 모터 icon HellMaker 09-03 14,098
105 마이크로비트 아날로그 온도센서 (마이크로 비트 센서 활용) icon HellMaker 09-01 14,606
104 마이크로비트 터치센서 (마이크로 비트 센서 활용) icon HellMaker 09-01 13,720
103 마이크로비트 디지털 홀 센서 (마이크로 비트 센서 활용) icon HellMaker 08-29 12,900
102 마이크로비트 리니어 홀 센서 (마이크로 비트 센서 활용) icon HellMaker 08-29 12,455
101 마이크로비트 불꽃 감지 센서 (마이크로 비트 센서 활용) icon HellMaker 08-26 12,794
100 마이크로비트 로터리 엔코더 (마이크로 비트 센서 활용) icon HellMaker 08-25 12,900
99 마이크로비트 2컬러 LED(3mm) (센서 활용) icon HellMaker 08-22 12,901