[아두이노] [강좌] 35. DC 모터 (1) - DC 모터 동작 방식

brown_and_cony-32 


요즘 회사 일 관계로 강좌 업로드 간격이 길어져서 죄송. 사실 모터에 대해서 정리할 시간이 엄청나게 필요했던 것도 한 몫 했음. ㅜㅜ 모터 드라이버 종류는 왜케 많아!


암튼, 늦어진 점 사과드리며 다시 강좌 시작! 

(기다렸다고 말해줘)




모터의 종류는 생각보다 많다내가 알고 있는 것만해도 DC 모터스텝 모터(또는 스테핑 모터), 서보 모터세 가지다실제로는 이거보다 종류가 더 많겠지내가 알고 있는 건 이 세 가지이므로이 세 가지에 대해서 알아보고 동작도 해보자.

 

그러려면 우선 모터가 있어야 하는데모터는 모터 단독으로 동작하기보다 모터 드라이버를 이용해서 제어하는 경우가 대부분모터 드라이버에 따라 제어하는 방법도 천차만별이다그래서 예제 소스를 올려도 내가 가지고 있는 드라이버랑 같은 게 아니면 맞지 않을거야

brown_and_cony-78 

 


 

그래서 이 강좌에서는 모터 구동 예제보다는 모터 동작 원리에 대해 집중해서 살펴보자예제는 참고용.





DC 모터



DC 모터는 내 기준에서 가장 간단하게 사용할 수 있었던 모터이다. PWM 신호만 넣어주면 동작했으니까보통 DC 모터의 경우 입력 핀 2개만으로 제어가 가능한데두 핀의 전압 차이를 이용해서 동작하는 거라 생각하면 쉽다.

 

이 전에 PWM 신호를 주는 함수를 왜 “analogWrite”라고 이름 붙였는지에 대해 설명한 적이 있던가?? 기억이 안나노.

 

신호를 HIGH LOW를 번갈아 빠른 속도로 주게 되면 받는 쪽에서 하드웨어적인 특성(나 하드웨어는 잘 몰라요ㅜㅜ 그래서 특성이라고밖에 설명할 수 없음.)에 의해 HIGH LOW 신호를 대충 절충한 전압 신호를 받아들이게 되는 경우가 있는데이 절충한 전압의 크기는HIGH/LOW 비율에 따라 달라지게 되어 DAC(Digital to Analog Converter)처럼 동작할 수 있게 된다.

 

대충 그림으로 나타내면 이런 느낌이려나?


a3ed5c5e257eb4a661a315d2017cbc80.jpg


위 그림은 그냥 이해를 돕기 위해 그린 것이니 참고만 하면 된다.

 

아무튼 모터에 입력되는 전압이 PWM 듀티비에 따라 달라져서 모터의 속도를 조절할 수 있게 된다속도를 정확하게 제어할 수는 없다같은 듀티비에서도 모터에 따라 약간씩 차이가 날 수도 있고그래서 DC 모터는 정밀 제어 필요 없이 간단한 속도 조절만을 사용할 때또는 아예 속도 조절이 필요 없을 때 사용된다.

 

그런데 DC모터는 입력 핀이 2두 핀의 전압 차이를 이용한다고 했었다전압 차를 이용하려면 두 핀의 입력 전압이 달라야 한다는 이야기위 그림처럼 PWM 신호에 따라 모터의 속도를 제어하려면 PWM이 입력되는 핀 말고 나머지 한 핀에는 0V가 고정으로 입력되어야 한다또는 5V가 고정으로 입력되던지, 5V가 입력될 경우에는 모터 입력 전압이 높을수록 속도가 낮고낮을수록 속도가 빠를 것이다전압 차이로 동작하니까, 5V와 차이가 큰 듀티비 20% 구간에서 속도가 더 빠르다는 말.

 

그럼 나머지 한 핀은 신호 고정용으로 사용하는 것인가아니다. DC 모터는 어느 핀의 전압이 더 높은가에 따라 모터의 방향이 결정된다. 1번 핀이 전압이 높으면 정방향, 2번 핀이 높으면 역방향뭐 이런 식으로.

 

예제를 보면 쉽게 이해가 갈 것이다. DC 모터의 핀 2개를 각각 아두이노 보드의 7, 8번 핀에 연결하여 구동하는 소스이다하지만 아래 소스로 모터를 구동하지는 말자모터 드라이버가 없는 상태에서 아두이노와 모터를 직접 연결하여 구동하는 것은 아주아주 위험한 일이다소스는 그냥 참고용.



 DCMotorTest01.ino

 

 void setup() { 

   // 핀 모드 설정

   pinMode(7, OUTPUT);     

   pinMode(8, OUTPUT);

 

   // 신호 초기화 (LOW)

   digitalWrite(7, LOW);

   digitalWrite(8, LOW);


   delay(1000);

 }

 

 void loop() {

   // 7번 핀에 듀티비 증가 (8번 핀 LOW 유지)

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

     analogWrite(7, i);

     delay(20);

   }

   // 7번 핀에 듀티비 감소 (8번 핀 LOW 유지)

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

     analogWrite(7, i);

     delay(20);

   }

   // 8번 핀에 듀티비 증가 (7번 핀 LOW 유지)

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

     analogWrite(8, i);

     delay(20);

   }

 // 8번 핀에 듀티비 감소 (7번 핀 LOW 유지)

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

     analogWrite(8, i);

     delay(20);

   }


   // Motor 정지

   analogWrite(7, LOW);

   analogWrite(8, LOW);

   delay(1000);

 

 }




소스를 살펴보자.

 

우선 setup() 함수에서 DC모터에 연결된 두 핀을 출력 모드로 설정한다. 7번 핀과 8번 핀을 사용하므로 해당 핀 번호를 넣어준다. PWM 신호를 출력할 것이기 때문에 PWM 핀 중 선택하여 사용하면 된다.

 

그리고 두 핀을 LOW로 초기화시켜 준다위에서 말했다시피 DC모터는 두 핀의 전압 차로 동작하기 때문에 두 핀이 모두 LOW이면 모터는 정지한다마찬가지로 두 핀이 모두 HIGH 상태여도 모터는 동작하지 않는다. delay(1000) 구문으로 1초간 정지 상태를 유지한다.

 

for 반복문으로 각 핀에 듀티비를 증가시켰다가 감소시킨다이 코드를 실행시켜보면 모터가 천천히 돌다가 점점 빨라지고 다시 느려진다그리고 반대 방향으로 한번 더 속도가 증가하며 돌다가 다시 감소하여 정지한다.

 

듀티비가 증가하면 모터 속도가 빨라지고감소하면 줄어들다가 듀티비 0이되면 완전히 정지한다사실 0이 되기 전에 모터가 정지하는데이건 모터가 동작하기 위한 최소의 전압이 충족되지 않기 때문그래서 일정 듀티비 이하에서는 모터가 동작하지 않을 수 있다.

 

PWM 신호를 주는 핀에 따라 모터 동작 방향이 바뀌는 것도 기억하도록.

 

 


이건 일반적인 DC 모터의 구동 방식이고실제로 아두이노로 모터를 구동하기 위해서는 모터 드라이버가 필수로 사용되어야 한다아두이노에서 핀으로 출력되는 전압은 5V지만, 모터에서 요구하는 전압이 5V보다 높을 수 있기 때문이다. 또 출력되는 전류 값 역시 모터를 구동할 만큼 크지 않다모터는 모터가 구동되기 위한 최소의 전류가 충족되어야 동작하기 때문에 만일 맞지 않는 전압과 전류로 모터를 구동하려 한다면모터에서 구동에 필요한 전류를 강제로 쫘~악 땡기면서 둘 다 사망에 이를 수도 있다농담 아님.


brown_and_cony-69 


 

그래서 모터 드라이버의 사용은 필수

다음 강좌에서 모터드라이버(TB6612FNG)를 이용하여 DC 모터를 동작시키는 실습을 진행해보자. 


그럼 이번 강좌는 여기서 이만. 안녕!

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

임베디드 보드

번호 제목 글쓴이 날짜 조회수
58 아두이노 [강좌] 50. 와이파이 통신 (4) - WebServer 예제 icon 양재동메이커 03-21 9,546
57 아두이노 [강좌] 49. 와이파이 통신 (3) - WebClient 예제 icon 양재동메이커 03-21 13,220
56 아두이노 [강좌] 48. 와이파이 통신 (2) - 커맨드 모드 사용하기 (WiFly 쉴드) icon 양재동메이커 03-20 8,629
55 아두이노 [강좌] 47. 와이파이 통신 (1) - 와이파이란 무엇인가 icon 양재동메이커 03-20 12,397
54 아두이노 [강좌] 46. 블루투스 통신 (5) - 프로토콜 만들기 (2) icon 양재동메이커 03-20 8,919
53 아두이노 [강좌] 45. 블루투스 통신 (4) - 프로토콜 만들기 (1) icon 양재동메이커 03-20 10,408
52 아두이노 [강좌] 44. 블루투스 통신 (3) - RN42 모듈에서 직접 접속하기 icon 양재동메이커 03-20 7,745
51 아두이노 [강좌] 43. 블루투스 통신 (2) - 스마트폰과 통신하기 icon 양재동메이커 03-20 9,846
50 아두이노 [강좌] 42. 블루투스 통신 (1) - RN42 블루투스 모듈 실습하기 icon 양재동메이커 03-20 10,983
49 아두이노 [강좌] 41. 서보 모터 (2) - Servo 함수 알아보기 icon 양재동메이커 03-20 12,702
48 아두이노 [아두이노 강좌] 40. 서보 모터 (1) - 서보 모터 동작 방식 icon 양재동메이커 03-20 12,633
47 아두이노 [강좌] 39. 스텝 모터 (3) - 모터 드라이버 EasyDriver(A3967) 사용하기 icon 양재동메이커 03-20 8,984
46 아두이노 [강좌] 38. 스텝 모터 (2) - Stepper 함수 알아보기 icon 양재동메이커 03-20 12,547
45 아두이노 [강좌] 37. 스텝 모터 (1) - 스텝 모터 동작 방식 icon 양재동메이커 03-20 9,325
44 아두이노 [강좌] 36. DC 모터 (2) - DC 모터 드라이버 실습하기 (TB6612FNG) icon 양재동메이커 03-20 9,190
43 아두이노 [강좌] 35. DC 모터 (1) - DC 모터 동작 방식 icon 양재동메이커 03-20 11,465
42 아두이노 [강좌] 34. SPI 통신 (3) - 기압 센서(MPL115A1) 실습하기 icon 양재동메이커 03-20 8,136
41 아두이노 [강좌] 33. SPI 통신 (2) – SPI 함수 알아보기 icon 양재동메이커 03-20 14,504
40 아두이노 [강좌] 32. SPI 통신 (1) - SPI 통신이란 무엇인가 icon 양재동메이커 03-20 18,976
39 아두이노 [강좌] 31. I2C 통신 (3) - 온도 센서(TMP102) 실습하기 icon 양재동메이커 03-20 14,790