안녕하세요 대짜이찐입니다.
이번 시간에는 DC모터를 제어하는 방법을 차근차근 단계적으로 배워서
DC모터 드라이버를 제작하는 포스팅을 하려고 합니다.
글이 여러개로 나뉘어 올라갈예정이니, 열심히 따라와주시길 바랍니다.
기본적으로 DC모터는 전원(+,-)만 제대로 준다면, 동작합니다.
전원(+,-)을 반대로 하면 방향도 바뀌고, 전압을 높히면 속도도 빨라지죠.
하지만 이렇게 모터를 제어하려면 회로 구성이 필요합니다.
모터 제어 회로 | ||
첫번째로 모터를 동작/정지 시키는 기본부터 배워보겠습니다.
AVR, 아두이노, ARM, PIC 등의 MCU에서 핀의 출력은
20~40mA 정도 밖에 안됩니다.
따라서 핀의 전류로는 최소 100mA 이상의 전류가 필요한
모터를 구동시키기에는 부족합니다.
따라서 트랜지스터를 스위치로 사용해서 제어 합니다.
DC 모터를 동작시켜 회전하는 동안에는 모터의 코일 내부에
에너지가 생성되어서 쌓이게 되고 모터가 정지하면 원래 흐름과 반대방향으로
기전력이 발생합니다. 이것을 역기전력(Back EMF)라고 합니다.
역기전력을 흘려보내지 않으면, 트랜지스터와 MCU에 손상을 줄 수 있습니다.
따라서 전류를 흘려보낼 수 있게, 쇼트키 다이오드(Schottky Diode)나,
패스트 리커버리 다이오드(Fast Recovery Diode)를 연결하여,
역기전력을 흘려줍니다.
이 다이오드를 환류 다이오드(Free Wheeling Diode)라고도 부릅니다.
H 브릿지 회로 | ||
위의 모터 제어 회로로 모터의 동작은 할 수 있지만,
단일전원일때 회전의 방향을 제어할 수 없습니다.
단일전원일때 회전의 방향을 제어할 수 없습니다.
그 문제를 해결해주는 회로가 H 브릿지(bridge) 회로입니다.
트랜지스터가 배열된 모습이 H모양을 닮아서 H 브릿지 회로로 부르고
풀 브릿지(Full bridge) 회로라고도 합니다.
트랜지스터는 바이폴라 트랜지스터(BJT)를 사용하였으며,
트랜지스터는 NPN으로만 사용하였지만,
PNP와 조합하여, 구성하기도 합니다.
회로에서 B와 C에 HIGH신호를 주고, A와 D에는 LOW 신호를 주면,
B와 C에 있는 트랜지스터 C-E가 연결되고, 전류가 흐르며
모터가 돌게됩니다.
마찬가지로 반대방향은
A와 D에 HIGH신호를 주고, B와 C에는 LOW 신호를 주면,
B와 C에 있는 트랜지스터 C-E가 연결되고, 전류가 흐르며
모터가 돌게됩니다.
A,B,C,D 모두 LOW 신호를 주면 OFF 상태이고,
그리고 B와 D에만 HIGH 신호를 주면 모터에 브레이크 동작을 할수 있습니다.
주의사항으로는 A,B,C,D 모두 HIGH 신호를 주면
전원이 쇼트 되므로, 조심하시기 바랍니다.
최종적으로 만든 H 브릿지 회로 입니다.
스위칭 동작을 위해 2n2222 바이폴라 트랜지스터를 사용하였습니다.
역기전력을 흘려주기위한 다이오드는
패스트 리커버리 다이오드 FR107을 사용했습니다.
모터는 작은 소형 모터로 아두이노 로봇에
주로 사용되는 DC모터를 사용했습니다.
아래 회로는 아두이노로 간단히 HIGH, LOW신호만 주어서
만들어본 H 브릿지 회로를 동작시키는 예제입니다.
H-Bridge
|
아두이노
|
배터리
|
A
|
D8
| |
B
|
D9
| |
C
|
D10
| |
D
|
D11
| |
Vcc
|
BAT+
| |
GND
|
BAT-
|
굳이 아두이노를 사용하지않고 다른 MCU를 사용해도 괜찮습니다.
/*
Tr_H_bridge circuit test
http://www.devicemart.co.kr/
*/
const int a=8;
const int b=9;
const int c=10;
const int d=11;
void setup()
{
pinMode(a,OUTPUT);
pinMode(b,OUTPUT);
pinMode(c,OUTPUT);
pinMode(d,OUTPUT);
}
void loop()
{
digitalWrite(a,HIGH);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,HIGH);
delay(3000);
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
delay(1000);
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,LOW);
delay(3000);
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
delay(1000);
}
|
다음 시간에는 MOSFET을 사용하고, PWM제어로 속도까지 제어하는
방법에 대해 알려드리겠습니다.
감사합니다.
아래링크에서 제품들을 구매할 수 있습니다.
DC모터
Fast Recovery 다이오드
바이폴라 트랜지스터
일반 막대 저항
아두이노
0 댓글