본문 바로가기

[아두이노] DC 모터 사용하기(L298N 모터드라이버 사용)

by rudals.kim 2022. 2. 17. 댓글 개
반응형

DC 모터를 제어하기 위한 드라이버 모듈은 여러가지 종류가 있는데 그 중에 일반적으로 많이 사용되는 L298N을 사용한 모터 드라이버를 테스트해 보았습니다. 

 

제품 사양

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

 

외형

아래 2개의 모듈은 사이즈만 다른 같은 모터 드라이버입니다.

제가 가지고 있는 모듈은 왼쪽 버전이고 요즘에는 전부 오른쪽 버전을 많이 사용하는것 같습니다.

MOTORA/MOTORB에 각 각의 DC 모터를 연결하여 총 2개의 DC 모터를 제어할 수 있으며 또한 MOTORA/MOTORB를 모두 사용하여 4선 스텝모터 1개를 제어할 수 있습니다.

 

회로도

요즘 판매되는것과는 조금 회로도가 다른데 전체적인 회로는 유사하니 참고용으로 사용하시면 됩니다.

위 색깔 칠해져 있는 부분에 대한 설명입니다.

Motor A/B : DC 모터를 각 각 연결하거나 4선 스텝모터를 연결합니다.

ENA/ENB : 모터 A/B쪽 동작시키거나 멈추게 합니다.

+12V/GND/+5V 단자 : 5V 이상의 전원을 사용하는 모터를 사용시 +12V에 모터 전원을 연결하고,

                              5V 전원을 사용하는 모터는 +12V가 아닌 +5V 단자에 모터 전원을 연결합니다.

                              자세한 전원 관련 설정은 위 회로도를 참고하여 연결하시면 됩니다.

 

회로구성

아래와 같이 DC 모터 한개만 연결하여 테스트를 해 보았습니다.

테스트용 소스

정방향 3초 -> 역방향 3초 -> 정지 1초 -> ENA를 PWM으로 사용하여 속도 조절된 정방향 3초 -> ENA를 PWM으로 사용하여 속도 조절된 역방향 3초 -> 정지 순서로 테스트할 수 있는 코드를 작성하였습니다.

int ENA = 10;
int INA1 = 9;
int INA2 = 8;
int cmd = 0;

void setup()
{
  Serial.begin(9600);
  pinMode(ENA, OUTPUT);
  pinMode(INA1, OUTPUT);
  pinMode(INA2, OUTPUT);

  digitalWrite(ENA, LOW);
  digitalWrite(INA1, LOW);
  digitalWrite(INA2, LOW);

  Serial.println("DC motor test");

  Serial.println("Forward ");
  digitalWrite(ENA, HIGH);
  digitalWrite(INA1, HIGH);
  digitalWrite(INA2, LOW);
  delay(3000);
  
  Serial.println("Backward");
  digitalWrite(ENA, HIGH);
  digitalWrite(INA1, LOW);
  digitalWrite(INA2, HIGH);
  delay(3000);
  
  Serial.println("stop");
  digitalWrite(ENA, LOW);
  digitalWrite(INA1, LOW);
  digitalWrite(INA2, LOW);
  delay(1000);
  
  Serial.println("Forward-PWM");
  analogWrite(ENA, 150);
  digitalWrite(INA1, HIGH);
  digitalWrite(INA2, LOW);
  delay(3000);
  
  Serial.println("Backward-PWM");
  analogWrite(ENA, 150);
  digitalWrite(INA1, LOW);
  digitalWrite(INA2, HIGH);
  delay(3000);

  Serial.println("stop");
  digitalWrite(ENA, LOW);
  digitalWrite(INA1, LOW);
  digitalWrite(INA2, LOW);
}

void loop()
{
  
}

 

테스트 영상

업로드 후 실행해 보면 아래와 같이 정상적으로 동작됩니다.

 

 

반응형

댓글