[아두이노] [강좌] 36. DC 모터 (2) - DC 모터 드라이버 실습하기 (TB6612FNG)

아두이노로 모터를 구동하기 위해서는 모터 드라이버가 필수로 사용되어야 한다. 모터에 필요한 전압, 전류를 아두이노로는 충분히 공급하기 어렵기 때문. 필요한 전압과 전류는 모터마다 다르므로, 모터의 사양을 반드시 확인하고 그에 맞는 모터 드라이버를 선정해야 한다. 


아무튼 모터 드라이버의 사용은 필수!

 

다음은 이번 실습에 사용할 모터 드라이버인 “TB6612FNG”이다. 


fa927a3c5e8c52a1b73e847b9a4088a5.png 

 

각 핀의 기능은 다음과 같다


bb8578acf380e7077ad3cc7f192bdfb0.png


VM은 외부 전원으로실제 DC 모터에서 요구하는 입력 전압과 같은 전원을 연결해야 한다외부 전원의 GND는 아두이노의 GND와 연결되어야 한다.


VCC는 아두이노의 전원이 연결되고, AOUT1~BOUT1 핀으로 모터 드라이버의 출력 신호가 출력된다이 신호가 DC 모터의 입력 신호로 연결되는 신호이다TB6612FNG는 모터 2개를 동시에 제어할 수 있는 드라이버이므로, 입력과 출력 핀이 모두 2 쌍. A가 붙은 것과 B가 붙은 것이 각각의 모터를 제어하는 핀이다.

 

그리고 오른 쪽에 있는 핀들이 아두이노와 연결되는 핀들로, PWMA/PWMB 핀으로는 각 PWM 신호가, AIN1,2/BIN1,2 핀으로는 방향 제어가, STBY 핀으로는 모터 상태 신호가 입력된다.

 

다음은 모터 드라이버 칩의 데이터 시트 중 핀의 상태에 대한 모터 동작을 나타낸 표이다.



750960aeaf9983adbffa618088b0811c.png

 

IN1 신호가 LOW, IN2 신호가 HIGH이고 PWM으로 신호를 출력할 경우 시계 반대 방향으로 회전, IN1 신호가 HIGH, IN2 신호가 LOW이고PWM으로 신호를 출력할 경우 시계 방향으로 회전한다그 외의 경우에는 모두 Stop 상태라고 보면 된다.

 

 

그럼 모터와 연결해보자.


e3c100b74dcc505aeb10d1bd6da066ac.png





외부 전원의 전압 크기는 모터 사양에 따라 다르다는 것을 반드시 명심모터마다 다르니까 꼭 모터 스펙을 확인할 것!!

  

 

 

다음은 제조사에서 제공하는 모터 드라이버(TB6612FNG)의 참고 사이트

()의 예제 소스를 수정한 것이다

 



 TB6612FNGTest.ino

 

 int STBY = 10; //standby

 

 int PWMA = 3; //Speed control

 int AIN1 = 9; //Direction

 int AIN2 = 8; //Direction

 

 void setup() {

   pinMode(STBY, OUTPUT);

 

   pinMode(PWMA, OUTPUT);

   pinMode(AIN1, OUTPUT);

   pinMode(AIN2, OUTPUT);

 }

 

 void loop() {

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

     move(i, 0);

     delay(20);

   }

 

   for(int i=255; i>0; i--) {

     move(i, 0);

     delay(20);

   }

 

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

     move(i, 1);

     delay(20);

   }

 

   for(int i=255; i>0; i--) {

     move(i, 1);

     delay(20);

   }

 

   stop();

   delay(1000);

 }

 

 void move(int speed, int direction) {

   digitalWrite(STBY, HIGH);

 

   if(direction == 1) { // CCW

     digitalWrite(AIN1, HIGH);

     digitalWrite(AIN2, LOW);

   } else { // CW

     digitalWrite(AIN1, LOW);

     digitalWrite(AIN2, HIGH);

   }

   analogWrite(PWMA, speed);

 }

 

 void stop() {

   digitalWrite(STBY, LOW);

 }

 

 




동작은 지난 시간에 참고용으로 봤던 소스와 동일하다. 정방향으로 속도를 점점 올리면서 돌다가, 다시 0까지 줄이면서 돌고. 다시 반대 방향으로 속도를 올리면서 돌다가, 255에서 다시 0으로 감소하면서 동작. 





뭔가 돌다 마는 듯한 찝찝한 느낌이 드는 영상이지만, 내 모터는 4.5V 모터라 속도가..ㅜㅜ 출력이 큰 모터일수록 속도나 힘에서 차이가 난다.


자세히 봐야 할 부분은 move() 함수와 stop() 함수. stop() 함수는 STBY 신호를 LOW로 만들어 모터를 정지시키는 기능을 한다.



 void move(int speed, int direction) {

  digitalWrite(STBY, HIGH);

 

  if(direction == 1) { // CCW

    digitalWrite(AIN1, HIGH);

    digitalWrite(AIN2, LOW);

  } else { // CW

    digitalWrite(AIN1, LOW);

    digitalWrite(AIN2, HIGH);

  }

  analogWrite(PWMA, speed);

}


 

move() 함수는 모터 속도를 설정하는 speed 값과 회전 방향을 설정하는 direction 값을 매개 변수로 받는 함수이며, direction 값에 따라AIN1, AIN2 신호를 HIGH, LOW로 변경하고 있다신호는 위에서 보여준 표를 기준으로 한다.


그리고는 analogWrite() 함수를 이용해 PWMA 핀으로 PWM 신호를 출력한다매개 변수로 받은 speed 값만큼. 이때 STBY 신호는 HIGH여야 한다는 것에 유의.



왜 speed 값을 PWM 신호에 넣어주는지는 지난 강좌를 참조.



 

 

loop() 함수에서는 for() 문을 이용해서 speed direction 값을 변경해가며 모터를 동작시키고, 1초 정지하는 동작을 반복한다.

 

 

이제까지 배웠던 함수들만 나온 것이므로 어렵지 않다.

 

 

중요한 건 다음 4가지.

 

 

1. DC 모터를 사용하기 위해서는 DC 모터의 사양에 맞는 모터 드라이버가 필요하다.

2. DC 모터의 동작을 위해서 DC 모터의 사양에 맞는 외부 전원이 필요하다.

3. 모터 드라이버에 따라 동작 방식이 다를 수 있으므로 모터 드라이버의 자료를 꼭 참고할 것.

4. 대부분의 DC 모터는 PWM에 의해 속도 조절이 가능하다.

 

 

모터 드라이버에 따라 핀 동작이 다를 수 있다는 걸 꼭 유의하고동작 방법은 해당 드라이버의 데이터시트 또는 설명서를 꼭 참조하길!

 

그럼 이번 시간은 여기서 이만다음 강좌에서는 스텝 모터에 대해 알아봐요안녕~ 




brown_and_cony-65

(이번 강좌는 뭔가 진지 -_-)

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

임베디드 보드

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