L298N Dual H-Bridge 모터 드라이버 모듈

1. L298N Dual H-Bridge: 모터 드라이버 모듈?

DC 모터의 방향, 속도를 제어하기 위해 사용하는 모듈입니다. 대용량 모터용으로 최대 2A까지 지원한다고 합니다. 하나의 모듈로 2개의 모터를 제어가 가능하고, 중간에 방열판이 달려있어 공간을 애매하게 많이 차지하는 놈입니다.;;;

제품 사양

– 드라이버 칩 : L298N 듀얼 H-브리지 드라이버 칩
– 드라이브 부분의 공급전압 VMS : +5 V ~ 35 V-
– 드라이브 부분의 최대전류 : 2A / bridge
– 로직 부분의 공급전압 VSS : 4.5-5 0.5 V 
– 로직 부분의 작동 전류 범위 :0 ~ 36mA
– 입력제어신호 전압 범위 : H: 4.5~ 5.5V / L: 0V
– 최대 소비 전력 : 20W
– 보관 온도 : -25 ℃까지 130 ℃
– 드라이버 보드 크기 : 55mm * 60mm * 30mm
– 드라이버 보드 무게 : 33g
– 기타 기능 : 방향 제어 표시LED, 전원 표시 LED

 

2. 연결방법

img_5124a

그림에서 상단에 나사가 달려있는 포트 중 가운데 3개의 포트(파란색)를 아래와 같이 연결합니다. 일반 PC USB 포트가 최대 500mA 정도의 전원을 공급하는데 힘 좀 쓰는 모터들은 500mA 이상이라고 하네요. 별도의 외부전원을 구해야 합니다.

아두이노 모터 드라이버 모듈 배터리
5V 5V  
GND GND (-)
  VMS (+)

그리고 좌우에 있는 초록색 포트를 각각 모터 A, B에 연결해 줍니다.

이제 모터의 회전 방향과 출력을 제어할 수 있도록 아두이노 보드와 연결해 줄 차례입니다. 위 그림에서 하단 가운데에 있는 ENA, IN1, IN2 (이상 모터 A 제어용), IN3, IN4, ENB (이상 모터 B 제어용) 핀을 아두이노 보드에 연결합니다. ENA, ENB는 아두이노의 PWM 지원되는 핀(D3, 5, 6, 9, 10, 11)에 연결하고 나머지는 임의의 Digital 핀에 연결합니다.

 

3. 동작방법

ENA와 ENB는 모터 A, B를 Enable 시킬 것이냐를 결정합니다. 아두이노에서 ENA, ENB에 High 전압을 걸어주고 IN1, IN2 입력을 조절해서 모터 방향을 제어할 수 있습니다. 아래 표를 참고하세요. ENA, ENB에 Low 를 걸어주면 IN1, IN2에 관계없이 정지합니다. ENA, ENB에 아두이노 PWM 핀(D3, 5, 6, 9, 10, 11)과 연결하면 모터의 속도를 변경 시킬 수 있습니다.

ENA (or ENB) IN1 (or IN3) IN2 (or IN4) 모터 A (or B)
High High Low 정방향 회전
High Low High 역방향 회전
High High High 정지
High Low Low 정지
Low 상관없음 상관없음 정지

 

4. 코드 (스케치)

본 예제 코드에서는 IN1, IN2, ENA (D2, D4, D5), IN3, IN4, ENB (D7, D8, D9) 순서로 연결하였습니다. 그리고 전진, 후진, 좌회전, 우회전을 아래와 같이 구현하였습니다. (빠진 부분을 적당히 채우고 수정해서 쓰세요)

void setup() {
  pinMode(2, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
}

void loop() {
    if(direction == 1)  // Forward
    {
        digitalWrite(2, HIGH);
        digitalWrite(4, LOW);
        analogWrite(5, speed);
        
        digitalWrite(7, HIGH);
        digitalWrite(8, LOW);
        analogWrite(9, speed);
    }
    else if(direction == 4) // Backward
    {
        digitalWrite(2, LOW);
        digitalWrite(4, HIGH);
        analogWrite(5, speed);
        
        digitalWrite(7, LOW);
        digitalWrite(8, HIGH);
        analogWrite(9, speed);
    }
    else if(direction == 2) // Left
    {
        digitalWrite(2, LOW);
        digitalWrite(4, HIGH);
        analogWrite(5, speed);
        
        digitalWrite(7, HIGH);
        digitalWrite(8, LOW);
        analogWrite(9, speed);
    }
    else if(direction == 3) // Right
    {
        digitalWrite(2, HIGH);
        digitalWrite(4, LOW);
        analogWrite(5, speed);
        
        digitalWrite(7, LOW);
        digitalWrite(8, HIGH);
        analogWrite(9, speed);
    }
    else if(direction == 0) // Stop
    {
        analogWrite(5, 0);

        analogWrite(9, 0);
    }
    
}

 

Post Author: TORTUGA

TORTUGA
궁금하신 점은 새로 개편한 홈페이지의 QnA 게시판을 이용해주세요!!!!!!! http://www.hardcopyworld.com/gnuboard5/bbs/board.php?bo_table=qna

18 thoughts on “L298N Dual H-Bridge 모터 드라이버 모듈

    정상

    (2014년 5월 28일 - 5:39 오후)

    안녕하세요 아두이노 블루투스 연동된 RC카 제작하고 있는 학생인데요..

    이상태에서 블루투스 연결하려고하면 어떻게 해야하는지 궁금해서 댓글남깁니다…

    꼭 이 댓글을 보셨으면 좋겠습니다.

    sany90@naver.com

    chiiwhite

    (2014년 6월 17일 - 10:59 오전)

    안녕하세요 올려주신 모터 드라이버를 이용하여 만들어보고 있습니다.
    모터는 타미야의 3볼트 정격의 플라즈마모터를 2개 사용하고 있고요,
    아두이노하고 모두 연결해서 정 역회전을 해보고 있는데요.
    아무리 외부 전원을 인가해도 모터가 움직이지를 않네요.
    제가 어떤 부분을 확인하면 해결할 수 있을까요?
    외부전원으로는 1.2v*4 aaa 건전지, 1.5*4 aa 건전지, 9v 건전지, 핸드폰 외장 배터리를
    이용한 5v 1a 전원까지 써보았으나 어떤것도 모터를 움직이는데는 실패했습니다.

      TORTUGA

      TORTUGA

      (2014년 6월 17일 - 3:10 오후)

      음.. 어떻게 연결되어 있는지 모르겠네요.. 아두이노-L298N-배터리 연결을 확인해보시구요 (특히 GND 라인이 모두 연결되도록) 그리고 모터 제어할 때 L298N 보드에 IN1, IN2, IN3, IN4 LED가 정확히 들어오는지 확인해보세요.

      ZENEZ

      (2018년 5월 26일 - 11:59 오후)

      아두이노 +5v를 모터드라이브 +5v에 연결해서 모터드라이브 작동용 전원 공급이 안될때 바퀴가 안돌아요.
      제가 모터드라이브 제조사 백서, 구동사례 보아도 보드 입력전원은 빼고 구성하던데 100% 똑같은 배선해도 안움직이더라구요. 그래서 칩으로 된 L293D 회로도 보고 유추해서 L298N에도 보드 구동전원 넣어줬더니 되데요.
      또 하나 외부전원 + – 를 모터에 공급하고 그 외부전원의 -를 아두이노에 접지 시켜줘야 합니다.

    아두이노

    (2014년 6월 22일 - 4:53 오후)

    저희는 모터 드라이버를 안쓰고 그냥 IC만 쓰고 있거든요 그런데 소스를 바꾸다보니 무엇이 문제인지 모르겠어서요.
    모터를 1개밖에 쓰지 않기 때문에 2, 4번만 가지고 쓰고 있구요.
    초보자여서 따로 include로 헤더 같은것을 써야 하는건지 잘모르겠습니다 ㅠㅠ
    일단은 시리얼 모니터로 속도값 받고 싶은데 다들 스위치로 on/off하더라구요
    스위치 없이 그냥 전원 연결하면 정, 역회전을 먼저 해보고 차례로 속도 조절도 하고 on/off도 넣고 하려고 합니다.
    답글 부탁드립니다. (정,역회전만 해보고 싶습니다. 댓글로 힘들면 메일로 답변 주시면 감사하겠습니다.)

    int in1Pin = 2;
    int in2Pin = 4;
    int enPin = 11;
    int DIR = 1; // motor direction, digitalpin

    void setup()
    {
    pinMode(in1Pin, OUTPUT);
    pinMode(in2Pin, OUTPUT);
    pinMode(enPin, OUTPUT);
    pinMode(DIR, OUTPUT);
    }

    void loop()
    {
    if(DIR == 1)
    {
    digitalWrite(in1Pin, HIGH);
    digitalWrite(in2Pin, LOW);
    analogWrite(enPin, 50);
    }
    else if(DIR == 2)
    {
    digitalWrite(in1Pin, LOW);
    digitalWrite(in2Pin, HIGH);
    analogWrite(enPin, 50);
    }
    else if(DIR == 0)
    {
    analogWrite(enPin, 0);
    }
    }

      TORTUGA

      TORTUGA

      (2014년 6월 23일 - 4:51 오후)

      적어주신 코드에서 DIR 변수가 pin 넘버를 저장하고 있는것 같은데.. 아래 loop 안에서는 방향을 판별하는 조건문에 사용되고 있네요. 이 부분 확인이 필요할 것 같습니다.

    yo-yo

    (2014년 8월 25일 - 9:25 오후)

    안녕하세요! 제가 올려주신 모터 드라이버와 아두이노를 외부전력으로 AA건전지X6(9V)와 연결시켜서
    사용하려고 하는데요. 자료에 정리된 것처럼 아래와 같이 연결을 하면 되나요?

    1) 9V와 모터드라이버 VMS를 연결하고
    2) 9V와 모터드라이버와 아두이노 GND를 연결하고
    3) 모터 드라이버 5V와 아두이노 5V를 연결하는게 맞나요?
    이 때, 모터 드라이버의 5V가 아두이노 5V로 흘러서 아두이노는 USB선으로 전원을 연결 안해도 작동하는게 맞는건가요?

    아두이노 모터 드라이버 모듈 배터리
    5V 5V
    GND GND (-)
    VMS (+)

    도움 부탁드립니다 ㅠ

      TORTUGA

      TORTUGA

      (2014년 8월 26일 - 12:07 오전)

      아두이노는 아두이노용 전원을 따로 공급하시고 위 표대로 연결해서 실험해보세요. 만약 안되시면 5V 연결은 제외하고 테스트 해보세요.

    Rc

    (2015년 8월 4일 - 2:33 오후)

    저상태에서 wifi를 연결하려고 하는데 어떻게 해야 하는지 모르겟네요

    서로 별개인거 같은데… 소스를 합쳐야 하나요?

      TORTUGA

      TORTUGA

      (2015년 8월 4일 - 11:28 오후)

      네 별개의 소스들을 구해서 합치셔야 합니다. WiFi 모듈이 훨씬 복잡하니까 일단 WiFi 소스를 기본으로 위 소스를 더하시면 되겠습니다.

    박강민

    (2015년 11월 13일 - 3:39 오전)

    L298N모터드라이버랑 같이 모터 2개를 이용하려고 하는데요
    모터의규격을 드라이버 부분의 공급전압이랑 전류범위 맞추어야 되나요 아니면 로직부분에 공급전압이랑 전류범위를 맞추어야 되나요?
    그리고 이부분(PC USB 포트가 최대 500mA 정도의 전원을 공급하는데 힘 좀 쓰는 모터들은 500mA 이상이라고 하네요.)에 대해서도 규격을 맞추어야 되나요?
    모터부분 초보자라서요 빠른 답변 부탁드립니다. ㅠㅠㅠ

      TORTUGA

      TORTUGA

      (2015년 11월 24일 - 9:44 오전)

      드라이브 부분의 공급전압 VMS : +5 V ~ 35 V
      즉, VNS 핀에 들어가는 전압이 모터로 들어가게 됩니다. 이걸 제어해서 모터 속도를 변화시키는게 드라이버 모듈의 역할이구요. 따라서 모터도 (+5 V ~ 35 V) 범위에서 동작가능한 모터여야 합니다. 모터의 스펙에 맞게 VMS에 알맞은 전압을 걸어줘야 하구요.

      PC USB 포트가 최대 500mA 정도의 전원을 공급…
      이 부분은 PC USB 포트의 전원이 약하기 때문에 아두이노에서 전원을 빼서 모터로 넣지 말라는 얘기입니다. 대부분의 모터는 이보다 훨씬 많은 전력을 사용하기 때문에 모터를 제어할 외부 전원을 사용하고, 다시 이를 제어하기 위해 드라이버 모듈을 사용합니다.

    열혈청년

    (2016년 2월 13일 - 11:21 오후)

    라즈베리파이로 해보는데, 위에 설명대로 연결했으나, 모터 동작은 안합니다. 모터를 9V에 바로 연결하면 모터가 작동하는데, 모듈을 사용하면 작동하지않네요.. 혹시 왜그런지 알수있을까요?

    열혈청년

    (2016년 2월 14일 - 1:12 오전)

    아 잘되네요! 제가 코드안짜고, in1에 신호줄때 바로 5v로 high 줫거든요. low를 따로 연결하지않구요. 그 이유는 제 생각에는 바로 5v로 high주고 low에는 안물리면 low다!라고생각했는데 그게아니엿네요.. low를 0을 신호를 줘야 돌아가네요..참고들하세요!

    초보초보

    (2016년 6월 30일 - 5:27 오후)

    제가 처음 접하는 부분이라 일단 rc카의 뒷바퀴 정회전과 정지 시키는 것을 구동시켜보려고 했습니다.
    int IN3 = 5;
    int IN4 = 4;

    void setup()
    {
    // 핀 초기화
    pinMode(IN3, OUTPUT);
    pinMode(IN4, OUTPUT);
    }

    void loop()
    {
    MotorRotate();
    delay(5000);
    MotorStop();
    delay(5000);
    }

    //뒷바퀴 정회전
    void MotorRotate()
    {
    digitalWrite(IN3, HIGH);
    digitalWrite(IN4, LOW);
    }

    //뒷바퀴 회전 정지
    void MotorStop()
    {
    digitalWrite(IN3, LOW);
    digitalWrite(IN4, LOW);
    }
    이렇게 코드를 작성해 업로드를 해보았는데 뒷바퀴고 눈꼽만큼도 움직이지가 않습니다.
    도와주세요ㅠㅠ

    전승현

    (2016년 7월 6일 - 11:25 오후)

    제가 이걸 만들려고 하는데 홈페이지 올라온걸로는 이해가 잘 안되서 그러는데 혹시 이 자동차를 만드는데 필요한 모든 쟤료들하고, 방법좀 자세히 알려주실수 있을까요?
    이메일 enoxju554@naver.com 이나 댓글 부탁드립니다.

    김님우

    (2017년 5월 27일 - 4:50 오후)

    지금 사용하고 있는 모터가 3~6V DC 모터인데,
    모듈을 이걸 사용하면 기존보다 힘을 끌어올릴 수 있나요?

댓글 남기기

이메일은 공개되지 않습니다.