L298N 드라이버 모듈은 2개의 DC모터 또는 1개의 스테핑모터를 제어하기 위한 모터드라이버 이다. 두개의 DC모터를 각각 속도와 방향 제어할 수 있으므로 전동 모형자동차 제작시 전진/후진 및 가속/감속과 좌회전/우회전 등 모든 동작을 이 드라이버모듈 하나로 구현할 수 있게 된다.
L298N의 사양
- Work Mode: H bridge drive (dual-channel)
- Main Control Chip: L298N
- Logic Voltage: 5V
- Drive Voltage: 5V-35V
- Logic Current: 0mA-36mA
- Drive Current: 2A(MAX single-bridge)
- Storage Temperature: -20° to +135°
- Max. Power: 25W
- Size: 4.5*4.5*2.8cm
- Weight: 27g(approx.)
사용방법
- Output A와 Output B에 각각 DC모터를 연결한다.
- +12V Power 단자 : 모터 작동용 메인 전원을 연결하는 곳이다. 35V까지 가능하다고 되어 있으나 12V이내로 사용하는 것이 일반적이다.
- Power GND : 공통 접지단자로서 아두이노 GND단자와 +12V전원의 마이너스 접지를 함께 연결한다.
- 5V Enable 점퍼스위치 : 내장되어 있는 5V 정전압 Regulator를 가동시킬지 여부를 선택하는 점퍼이다. 연결되어 있으면 Regulator가 가동되어 내부 제어용으로 사용되며 동시에 +5V Power단자로 5V가 출력되기 때문에 이 5V를 아두이노 등 MCU의 전원으로 활용할 수 잇다. 만약 고전압용 DC모터 사용을 위해 12V이상의 전압을 +12V단자에 가해 줄 필요가 있을 경우에는 이 점퍼핀을 빼놓아 Regulator가동을 중지시키고 별도의 5V전압을 +5V Power단자에 가해 주어야 한다.
- +5V단자 : 5V 점퍼스위치가 연결되어 있을 때 (12V이내의 전압을 +12V Power단자에 연결했을 때)에는 별도의 전원을 공급해 줄 필요없고 오히려 이 단자에서 출력되는 전력을 아두이노의 VIN 작동 전원으로 사용할 수 있다. 5V 점퍼스위치가 연결되어 있지 않을 때에는 이 단자에 5V전압을 가해 주어야 한다.
-A Enable과 B Enable단자 : 각각 모터 A와 B의 출력을 제어하는 신호선이고 PWM제어가 가능하다. 점퍼스위치가 연결되어 있는 상태는 5V HIGH가 되어 최대출력으로 연결하라는 의미이고 속도제어가 필요할 경우 아두이노 PWM핀에 연결하여 적절한 PWM값을 출력하면 된다.
-Input단자 : 방향을 제어하기 위한 신호선으로서 IN1과 IN2는 모터 A의 방향, IN3와 IN4는 모터B의 방향을 제어하기 위한 것이다. 즉 IN1과 IN2를 각각 HIGH,LOW 로 주었을 때와 LOW,HIGH로 주었을 때는 모터의 진행방향이 반대로 되게 된다.
아두이노와의 연결
- 위와 같이 전원을 연결하고 Enable A와 Enable B 는 아두이노의 PWM용 핀에 연결한다. (여기에서는 10번과 5번 )
- Input 단자들은 아두이노 디지털 출력핀에 연결한다. (여기에서는 IN1~IN4를 각각 9,8,7,6번 핀에 연결)
- 5V Enale 점퍼선을 연결하고 내부 레귤레이터 가동시킴. ( +5V단자는 연결하지 않아도 되고 필요시 이 +5V단자를 아두이노 보드의 VIN단자에 연결하여 전원공급용으로 사용해도 된다.)
샘플프로그램
#define ENABLE_A 10
#define IN1_A 9
#define IN2_A 8
#define ENABLE_B 5
#define IN3_B 7
#define IN4_B 6
byte speedDC = 255;
void setup()
{
pinMode(ENABLE_A,OUTPUT);
pinMode(IN1_A,OUTPUT);
pinMode(IN2_A,OUTPUT);
pinMode(ENABLE_B,OUTPUT);
pinMode(IN3_B,OUTPUT);
pinMode(IN4_B,OUTPUT);
}
void motor_speed(int spd)
{
analogWrite(ENABLE_A,spd);
analogWrite(ENABLE_B,spd);
}
void motor_dir(int dir)
{
if ( dir == 0 ) { // forward
digitalWrite(IN1_A,HIGH);
digitalWrite(IN2_A,LOW);
digitalWrite(IN3_B,HIGH);
digitalWrite(IN4_B,LOW);
}
else if ( dir == 1 ) { // turn right
digitalWrite(IN1_A,HIGH);
digitalWrite(IN2_A,LOW);
digitalWrite(IN3_B,LOW);
digitalWrite(IN4_B,HIGH);
}
else if ( dir == 2 ) { // turn left
digitalWrite(IN1_A,LOW);
digitalWrite(IN2_A,HIGH);
digitalWrite(IN3_B,HIGH);
digitalWrite(IN4_B,LOW);
}
else if ( dir == 4 ) { // backward
digitalWrite(IN1_A,LOW);
digitalWrite(IN2_A,HIGH);
digitalWrite(IN3_B,LOW);
digitalWrite(IN4_B,HIGH);
}
}
void loop()
{
motor_dir(0);
for ( int i = 0; i < 100; i++ ) {
motor_speed(i);
delay(100);
}
motor_speed(30);
motor_dir(1);
delay(500);
motor_dir(0);
delay(3000);
}
20 ~24 line : Enable 단자에 지정하는 PWM값을 출력하여 속도를 지정한다.
26 ~52 line : INPUT단자의 값들을 변경시켜 진행방향을 제어한다.
-28~33 : A,B 모터 둘 다 순방향으로 지정하여 전진하는 동작
-34~39 : A 모터는 순방향 ,B 모터는 역방향으로 돌려 방향 전환한다.
-40~45 : A 모터는 역방향 ,B 모터는 순방향으로 돌려 반대 방향으로 전환한다.
-56~51 : A,B 모터 둘 다 역방향으로 지정하여 후진하는 동작
56 ~ 60 line : 전진 방향으로 속도를 가속한다.
구매좌표 : s.click.aliexpress.com/e/_9yxIz5
'각종 부품 사용방법 > 출력장치' 카테고리의 다른 글
아두이노용 서보모터의 종류와 사용방법 (0) | 2019.02.09 |
---|---|
BTS7960드라이버로 대용량 DC모터 구동하기 (1) | 2019.02.07 |
아두이노로 DC모터 제어하는 방법들 (0) | 2019.02.04 |
아두이노용 전동모터의 종류 (0) | 2019.02.02 |
릴레이 대신 모스펫(MOSFET)으로 DC전원 제어하기 (3) | 2019.01.29 |