모터 구동

전기전자 2015. 4. 6. 20:34

아두이노와 모터 드라이버를 이용한 모터구동


본 포스팅에서는 DC 모터, Servo 모터 및 BLDC모터를 아두이노와 모터드라이버를 이용하여 구동하는 예제를 다루도록 하겠습니다. 

우선 DC 모터는 L293B IC를 이용하여 구동해보도록 할게요. 

구성은 다음 그림과 같이 하면 되겠어요. 

필요한 준비물은 

아두이노 1ea

모터 1ea 

L293B IC

빵판

점퍼와이어



EN

IN1

IN2

기능

HIGH

LOW

HIGH

시계방향회전

HIGH

HIGH

LOW

반시계방향회전

HIGH

LOW

LOW

정지

HIGH

HIGH

HIGH

정지

LOW

무시

무시

정지

소스코드는 다음과 같아요.

const int in1Pin=5;

const int in2Pin=4;

void setup(){

  Serial.begin(9600);

  pinMode(in1Pin, OUTPUT);

  pinMode(in2Pin, OUTPUT);

  Serial.println("+ - to direction, any other key stops motor");

}

void loop(){

  if(Serial.available()){

    char ch =Serial.read();

    if (ch =='+')

    {

      Serial.println("CW");

      digitalWrite(in1Pin, LOW);

      digitalWrite(in2Pin, HIGH);

    }

    else if (ch =='-')

    {Serial.println("CCW");

         digitalWrite(in1Pin, HIGH);

      digitalWrite(in2Pin, LOW);

    }

    else

    {

      Serial.print("stop motor");

           digitalWrite(in1Pin, LOW);

      digitalWrite(in2Pin, LOW);

    }

  }

}

위 내용을 동영상으로 확인해 보아요~

좀 더 비싼 모터 드라이버... 

http://blog.naver.com/benzydad/220148285604

좀 더 더 비싼 모터 드라이버



서보모터 구동

서보 모터의 구조는 다음과 같이 DC 모터, 가변저항, 제어회로 및 기어박스로 구성되어 있습니다. 

<그림 1> 서보모터

첫번째 실험은 서보를 0~180도 구간으로 왕복운동을 시키는 거에요. 

하드웨어는 다음과 같이 설치하구요. 서보의 신호선(노란색 선)은 PWM입력을 받으므로 ~ 표시가 된 digital pin에 연결해야 합니다. 여기서는 ~9번에 연결했어요. 

아두이노 소스 코드는 다음과 같습니다. 

#include <Servo.h>   // Servo.h 라이브러리 불러옴

Servo myservo;         // myservo라는 이름으로 servo 지정

int angle=0;             // angle 이라는 정수를 0으로 초기화 함

void setup(){

  myservo.attach(9);   // 서보를 9번 핀에 연결함

}

void loop(){

  for(angle=0; angle<180; angle +=1)  // 0~180까지 1도씩 증가

  {

    myservo.write(angle);               // 계산된 각도를 servo에 입력

    delay(20);

  }

  for(angle=180; angle>=1; angle-=1)   //180~1까지 1도씩 감소

  {myservo.write(angle);                // 계산된 각도를 servo에 입력   

  delay(20);

  }

}



이번에는 가변 저항의 움직임과 연동해서 움직이는 예제를 볼게요. 

위의 하드웨어에 포텐셔미터 하나를 추가했고 중간핀을 아날로그 0번 핀에 연결했어요. 


#include <Servo.h>    // Servo.h 라이브러리 포함

 
Servo
myservo;         
   
int potpin = 0; // potpin(포텐셔미터 핀)을 아날로그 0으로 지정함

int val;     // val 이라는 정수를 선언함
 
void 
setup() 

 
myservo.attach(9);   

 
void 
loop() 

 
val = analogRead(potpin);  /* 포텐셔미터의 값을 아날로그 0번으로 읽어들여 val이라는 정수로 저장함*/
 
val = map(val, 0, 1023, 0, 179);    /*0~1023의 포텐셔미터 값을 0~179로 매핑함 */
 
myservo.write(val);                
  delay(15);                          

 }

여기서 0~1023의 범위가 어떻게 나왔는지 궁굼하죠?

아두이노에서 아날로그값 읽기는 ADC를 통해서 구현합니다. 아두이노에 내장된 ADC의 분해능은 2^10 = 1024 단계입니다. 그래서 0~1023이 되는거죠. 



<그림 1>에서 본 PWM파형을 실제로 보면 다음과 같아요. 


PWM에 대한 이야기는 다른 포스팅에서 좀 더 자세하게 다루어 보도록 할게요. 


BLDC모터는 DC모터와 다르게 브러쉬가 없어요. 그래서 BrushLess DC 모터인거죠. DC모터보다 수명이 길다는 장점이 있어요. 

또 한가지는 DC모터는 2가닥의 선을 가지고 있는데 BLDC는 3가닥의 선을 가지고 있어요. 


이 모터는 좀 복잡한 드라이버를 사용합니다. 


L293B 같은 드라이버는 저항, 다이오드, 트랜지스터로 이루어진 것과 달리 위의 드라이버는 마이크로프로세서를 포함하고 있어요. 위 사진에서 다리 많이 달린 까만 것이 마이크로프로세서인데 많은 드라이버들이 ATMega8과 같은 8bit 마이크로프로세서를 사용합니다. 

그만큼 제어가 복잡하다는 이야기겠죠?

좌측의 굵은 빨간선과 검정선은 주 전원선으로 이 ESC는 2S~4S Li-Po 입력(5.4~14.8VDC)을 받네요. 

그 아래의 주,적,갈색 3선은 RC 수신기와 연결하는 선인데 적, 갈색은 ESC에서 생성한 5VDC를 수신기로 보내주는 역할을 하고 오렌지색 선은 수신기에서 생성한 PWM신호를 ESC로 보내는 선입니다. 

우측의 검정색 3선은 BLDC 모터의 3선과 연결되는 선으로 구분없이 아무렇게나 연결하고 만약 모터가 원하는 방향과 반대로 돈다면 3선중 아무 2선을 분리해서 바꾸어 연결하면 방향이 바뀐답니다. 

'전기전자' 카테고리의 다른 글

트랜지스터 NPN? PNP?  (0) 2015.04.06
가변 저항  (0) 2015.03.21
저항기 - 전압배분  (0) 2015.03.21
LED 태우기  (0) 2015.03.21
오옴의 법칙- 직렬회로  (0) 2015.03.17
Posted by J1Lee
,

트랜지스터는 

규소나 저마늄(게르마늄)으로 만들어진 반도체를 세 겹으로 접합하여 만든 전자회로 구성요소이며 전류나 전압흐름을 조절하여 증폭, 스위치 역할을 한다. 가볍고 소비전력이 적어 진공관을 대체하여 대부분의 전자회로에 사용되며 이를 고밀도로 집적한 집적회로가 있다. 접합형 트랜지스터와 전기장 효과 트랜지스터로 구분한다.

[네이버 지식백과] 트랜지스터 [transistor] (두산백과)


우리가 자주 사용하는 트랜지스터는 NPN과 PNP형으로 구분이 되는데 생긴것이 거의 똑같아서 육안으로 구분이 어렵습니다. 사진에는 잘 안보이는데 평평한 면에 씌여져 있는 것을 보고 datasheet를 찾아서 확인하는 방법도 있습니다만 이번 포스팅에서는 멀티미터를 이용해서 체크하는 방법을 알아보도록 하죠. 



별로 어렵진 않습니다. 다이오드 심벌이 있는 멀티미터는 모두 측정이 가능하구요. 물론 저항값을 이용해서 하는 방법도 있지만 이번에는 다이오드 기능을 이용해서 해보도록 하겠습니다. 


멀티미터의 다이오드 측정 기능 이야기가 나온김에 Light Emitting Diode(LED)의 극성 측정에도 사용할 수 있답니다. LED도 다이오드의 일종이에요. 


트랜지스터는 위에서 증폭이나 스위치의 역할을 한다고 했죠? 스위치로 쓰이는 예를 볼게요. 



'전기전자' 카테고리의 다른 글

모터 구동  (0) 2015.04.06
가변 저항  (0) 2015.03.21
저항기 - 전압배분  (0) 2015.03.21
LED 태우기  (0) 2015.03.21
오옴의 법칙- 직렬회로  (0) 2015.03.17
Posted by J1Lee
,

Ornithopter

항공우주 2015. 4. 5. 13:12

로봇새

레오나르도다빈치의 스케치 이후 많은 사람들이 Ornithopter에 대한 연구를 하였으나 큰 성과를 거두지 못하고 있죠. 특히 사람이 탈 수 있는 유인 Ornithopter는 2006년 캐나다에서 약 14초 비행한 것이 최초의 비행으로 알려져 있을 정도로 쉽지 않은 과제인것 같아요. 


그에 비해 소형 로봇새들은 완구류로 나온 것들이 상당히 많이 존재하고 심지어 고무동력 Ornithopter도 집에서 손쉽게 만들 수 있답니다. 

호기심에 RC 로봇새를 하나 구매해 봤어요. 

뭐 값싼 중국산이라 퀄리티는 쫌 별로인듯 해요. 

그래도 근래 조립했던 쿼드콥터들과는 달리 무려 매뉴얼이 들어있더군요. 그것도 A3 한장으로... 근데 영어 공부좀 하던지 영어 잘하는 사람들한테 자문을 좀 구하던지 해야지 매뉴얼이 좀 어설펐어요. 

대부분 다 조립이 되어 있구요. 박스 뜯어보면 

본체가 이렇게 조립이 되어 있어요. 

본체 좌측에는 비행제어기가 달려있어요. 약간의 안정화와 조종을 위한 믹싱같은것들이 되어 있는 마이크로컨트롤러가 들어있어요.

본체 우측에는 BLDC모터와 드라이버가 달려있구요. 3단으로 구성된 기어가 감속기로 쓰이고 있습니다. 제일 큰 기어 윗쪽에는 주 날개가 달릴 힌지가 구성되어 있군요. 

뒷부분의 서보들은 롤, 피치, 요를 제어하기 위한 것들입니다. 

카울은 이런식으로 씌워지구요. 클립같은걸로 고정하게 되어 있어요. 


주 날개는 아래 사진과 같이 볼트를 관통해서 연결하고 기어에 연결된 connecting rod(금색)가 약간 거리를 두고 연결이 되어 날개짓을 할 수 있도록 되어 있습니다. 볼트로 연결되는 부분이 좀 구조적으로 아쉬워 보이지만 400g대의 무게로 만들려면 달리 방법이 없어보이긴 하네요. 

주 날개 뒷부분입니다. T자 형태로 되어있는 부분에 주 날개를 지지하는 지지대가 연결되고 원활한 회전운동을 할 수 있도록 볼링크 구조로 되어 있네요. 아래 사진에서는 아직 서보가 연결이 되지 않았으나 우측의 볼링크 뒷부분에 에일러론 서보가 연결되어 T자 구조가 좌우로 틸트가되어 롤 운동을 유도할 수 있도록 되어 있습니다. 

구조상 진동이 심하므로 모든 볼트, 너트류에 아래와 같은 락타이트를 시공합니다.

수신기 설치

러더 서보가 엘리베이터 서보에 연결되어 있네요. 


조종면의 구동은 다음 동영상을 참고하세요.

 


모든 조인트는 원활한 회전 운동을 위해 윤활처리를 해줍니다.

수신기에 비행제어기에서 나온 선들을 차례로 연결해 주고

배터리는 11.1V 1000mAh Li-Po를 달아봅니다. 

이렇게 설치 했구요. 

전체 무게(카울 제외)는 약 443g입니다. 



'항공우주' 카테고리의 다른 글

CC3D setting  (0) 2015.04.24
Q900 first flight  (1) 2015.04.24
NAZE32 setting - CleanFlight  (0) 2015.04.03
NAZE32 세팅  (0) 2015.04.03
ORCA 280 쿼드콥터 전자장비 설치하기  (0) 2015.04.03
Posted by J1Lee
,