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

임베디드 보드

번호 제목 글쓴이 날짜 조회수
58 아두이노 [강좌] 50. 와이파이 통신 (4) - WebServer 예제 icon 양재동메이커 03-21 12,867
57 아두이노 [강좌] 49. 와이파이 통신 (3) - WebClient 예제 icon 양재동메이커 03-21 16,338
56 아두이노 [강좌] 48. 와이파이 통신 (2) - 커맨드 모드 사용하기 (WiFly 쉴드) icon 양재동메이커 03-20 11,658
55 아두이노 [강좌] 47. 와이파이 통신 (1) - 와이파이란 무엇인가 icon 양재동메이커 03-20 16,087
54 아두이노 [강좌] 46. 블루투스 통신 (5) - 프로토콜 만들기 (2) icon 양재동메이커 03-20 11,879
53 아두이노 [강좌] 45. 블루투스 통신 (4) - 프로토콜 만들기 (1) icon 양재동메이커 03-20 13,510
52 아두이노 [강좌] 44. 블루투스 통신 (3) - RN42 모듈에서 직접 접속하기 icon 양재동메이커 03-20 10,562
51 아두이노 [강좌] 43. 블루투스 통신 (2) - 스마트폰과 통신하기 icon 양재동메이커 03-20 12,725
50 아두이노 [강좌] 42. 블루투스 통신 (1) - RN42 블루투스 모듈 실습하기 icon 양재동메이커 03-20 14,028
49 아두이노 [강좌] 41. 서보 모터 (2) - Servo 함수 알아보기 icon 양재동메이커 03-20 15,779
48 아두이노 [아두이노 강좌] 40. 서보 모터 (1) - 서보 모터 동작 방식 icon 양재동메이커 03-20 16,135
47 아두이노 [강좌] 39. 스텝 모터 (3) - 모터 드라이버 EasyDriver(A3967) 사용하기 icon 양재동메이커 03-20 12,002
46 아두이노 [강좌] 38. 스텝 모터 (2) - Stepper 함수 알아보기 icon 양재동메이커 03-20 15,840
45 아두이노 [강좌] 37. 스텝 모터 (1) - 스텝 모터 동작 방식 icon 양재동메이커 03-20 12,450
44 아두이노 [강좌] 36. DC 모터 (2) - DC 모터 드라이버 실습하기 (TB6612FNG) icon 양재동메이커 03-20 12,052
43 아두이노 [강좌] 35. DC 모터 (1) - DC 모터 동작 방식 icon 양재동메이커 03-20 14,555
42 아두이노 [강좌] 34. SPI 통신 (3) - 기압 센서(MPL115A1) 실습하기 icon 양재동메이커 03-20 11,303
41 아두이노 [강좌] 33. SPI 통신 (2) – SPI 함수 알아보기 icon 양재동메이커 03-20 18,017
40 아두이노 [강좌] 32. SPI 통신 (1) - SPI 통신이란 무엇인가 icon 양재동메이커 03-20 22,922
39 아두이노 [강좌] 31. I2C 통신 (3) - 온도 센서(TMP102) 실습하기 icon 양재동메이커 03-20 18,241