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

임베디드 보드

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