Arduino Modules - L298N Dual H-Bridge Motor Controller

863,573

353

126

Introduction: Arduino Modules - L298N Dual H-Bridge Motor Controller

About: Here I am!

Quick and simple start guide for using and exploring an L298N Dual H-Bridge Motor Controller module with an Arduino.

The model in the example I am using is from Ebay.

Materials needed:

  • L298N Dual H-Bridge Motor Controller module (various models will work)
  • Male to Female jumper wires
  • An Arduino, any flavor.
  • A DC power supply, 7-35v
  • A motor that is the correct voltage for your power supply used.

Step 1: Getting to Know Your L298N Dual H-Bridge Motor Controller Module:

Usage:

H-Bridge's are typically used in controlling motors speed and direction, but can be used for other projects such as driving the brightness of certain lighting projects such as high powered LED arrays.

How it works:

An H-Bridge is a circuit that can drive a current in either polarity and be controlled by *Pulse Width Modulation (PWM).

* Pulse Width Modulation is a means in controlling the duration of an electronic pulse. In motors try to imagine the brush as a water wheel and electrons as a the flowing droplets of water. The voltage would be the water flowing over the wheel at a constant rate, the more water flowing the higher the voltage. Motors are rated at certain voltages and can be damaged if the voltage is applied to heavily or if it is dropped quickly to slow the motor down. Thus PWM. Take the water wheel analogy and think of the water hitting it in pulses but at a constant flow. The longer the pulses the faster the wheel will turn, the shorter the pulses, the slower the water wheel will turn. Motors will last much longer and be more reliable if controlled through PWM.

Pins:

  • Out 1: Motor A lead out
  • Out 2: Motor A lead out
  • Out 3: Motor B lead out
  • Out 4: Mo (Can actually be from 5v-35v, just marked as 12v)
  • GND: Ground
  • 5v: 5v input (unnecessary if your power source is 7v-35v, if the power source is 7v-35v then it can act as a 5v out)
  • EnA: Enables PWM signal for Motor A (Please see the "Arduino Sketch Considerations" section)
  • In1: Enable Motor A
  • In2: Enable Motor A
  • In3: Enable Motor B
  • In4: Enable Motor B
  • EnB: Enables PWM signal for Motor B (Please see the "Arduino Sketch Considerations" section)

Specifications:

  • Double H bridge Drive Chip: L298N
  • Logical voltage: 5V Drive voltage: 5V-35V
  • Logical current: 0-36mA Drive current: 2A (MAX single bridge)
  • Max power: 25W
  • Dimensions: 43 x 43 x 26mm
  • Weight: 26g

*Built-in 5v power supply, when the driving voltage is 7v-35v

Step 2: Wiring to an Arduino:

There are several different models of these L298N Dual H-Bridge Motor Controllers. The generic wiring schematic above should do the trick for most.

Two things to mention;

  • Make sure you have all of your grounds tied together; Arduino, Power source, and the Motor controller.
  • The PWM Pins are unnecessary if you do not want to control PWM features.

Step 3: Arduino Sketch Considerations:

The Arduino code sketch is pretty straight forward. Since there isn’t a library for the L298N Dual H-Bridge Motor Controller you just have to declare which pins the controller is hooked to.

The “int dir(number)Pin(letter)”‘ pins can be connected to any available digital pin you have available, as long as you declare the correct pin in your sketch. This makes the L298N Dual H-Bridge Motor Controller very versatile if your project is using a lot of Arduino pins.

The int“speedPin(letter)” pins need to be connected to a PWM pin on the Arduino if you want to enable speed control through PWM.

As a quick cheat I have included a list of PWM pins for the main two types of Arduino's I use:

  • AT MEGA – PWM: 2 to 13 and 44 to 46. Provide 8-bit PWM output with the analogWrite() function.
  • UNO – PWM: 3, 5, 6, 9, 10, and 11. Provide 8-bit PWM output with the analogWrite() function.

Step 4: Arduino Sketch Example:

This code example I wrote to allow a serial monitor program such as Putty to control the L298N Dual H-Bridge Motor Controller via a keyboard with key presses.

Controls:

Key .......... Motor

1 ............... Motor 1 Forward

2 ............... Motor 1 Stop

3 ............... Motor 1 Reverse

4 ............... Motor 2 Forward

5 ............... Motor 2 Stop

6 ............... Motor 2 Reverse

Code:

  • Fixed the formatting issues (12/29/2014):

Download the attached L298N_Dual_H_Bridge_Keyboard_Control_Reichenstein7.ino

Alternate Download: http://www.mediafire.com/download/z654e8at1b21d7e/L298N_Dual_H_Bridge_Keyboard_Control_Reichenstein7.ino

Microcontroller Contest

Participated in the
Microcontroller Contest

4 People Made This Project!

Recommendations

  • Micro:bit Contest

    Micro:bit Contest
  • Plastic Challenge

    Plastic Challenge
  • Halloween Contest

    Halloween Contest

126 Comments

0
Reichenstein7

I have added a link to the .ino file via Mediafire for those who are still seeing formatting errors.

0
YveG1
YveG1

Reply 6 years ago on Introduction

Why do you connect Pi's 5V to the 5V on the board??

This seems weird. Everywhere else I read that the board will supply 5V when running off 7-12V supply. But they never say you should put 5V from the Pi in it???!

0
Reichenstein7
Reichenstein7

Reply 6 years ago on Introduction

This step is not necessary, I like to tie together rails of equal v-value for stability of my projects (some components are heavier draw than others and v-droop is annoying). What is necessary is to make sure your projects components are always grounded together.

0
IgorS32
IgorS32

Reply 5 years ago

That's not a good idea. In the best case it won't do a thing, in the worst (most likely) case, you are shorting 2 voltage sources that are *not* identical, hence generating a voltage delta across a very small resistor.

0
fbujold
fbujold

5 years ago

I have been searching for a while but i cannot find the answer.

I connected a stepper motor to A and B output, left the 5 volt and both enables jumper in place, connected the IN1-4 to arduino 8-11, feed the arduino with the bridge 5 V source, loaded the arduino "one turn" (200 pulse) stepper sample routine. Runs like a charm for about 90 seconds then thermal protection kicks in??

Any idea anyone?

0
mike_dolphin_advantage
mike_dolphin_advantage

Reply 21 days ago

You could try adding a heat sink to the L298N chip.

0
tengfoong_lam
tengfoong_lam

Reply 4 years ago

I got the same problem supplying 12V to power my stepper motor. Apparently the battery was supplying too much power to the driver and after awhile, the steppers will stall, probably due to the chip overheating. Essentially, the solution is to use the EnA and EnB pins to control the power going to the stepper.

What I did was:

1) I kept the 12V Jumper ( Labelled number 3 in https://www.instructables.com/id/Control-DC-and-st... on the chip, contrary to instructions online that indicated that is should be removed if supplying >12V. I tried removing it and the entire chip would not function at all.

2) I took out the jumpers from PWM pins EnA and EnB. I connected two Arduino Pins with PWM functionality (Eg 45 and 46 on the Arduino Mega) to EnA and EnB. In the Arduino Code, I used analogWrite for the pins and adjusted the written value (should be around 50-200 depending on power source and stepper motor specs) until the power supplied to the stepper is just right so it can rotate over a long time without the driver overheating).

Note 1: Maximum value for analogWrite is 255, which is equivalent to attaching the jumpers back onto EnA and EnB pins, which means full power from the battery is being supplied to the stepper. So a value lower would reduce power to the stepper and prevent overheating.

Note 2: I use "power" in my answer because I am not sure whether the voltage or current is at fault here. Maybe an electronics expert could shed some light on this?

Yeap that's the answer I came up with based on my experimentation with this motor driver. Most tutorials on the internet disregard the En pins when teaching how to wire up stepper motors, which is a solution that will only work if your battery source is tailored to the stepper motor you are using.

0
fbujold
fbujold

Reply 5 years ago

Forgot, i am running the bridge from 7 to 9 VDC, with the same results

0
ElmoO2
ElmoO2

Reply 5 years ago

I'd suggest a stepper driver.

0
Stephen RoyK
Stephen RoyK

4 years ago

Can i use it as 5v power source after connecting 12v supply

0
mike_dolphin_advantage
mike_dolphin_advantage

Reply 21 days ago

Yes. The shield provides regulated 5VDC that can be connected to Arduino 5V pin. It also worked when I connected it to the Arduino Vin.
It works if you're using 12V supply in to the shield. I even cranked it up to 18V (not recommended), and it worked fine. After I went over 20V it burned up the L298N shield.

0
MuhannadS2
MuhannadS2

3 years ago

I already know the way of change the speed of motors, but i wonder how the H-Bridge control the speed ?

0
mike_dolphin_advantage
mike_dolphin_advantage

Reply 21 days ago

H-Bridge controls the motor direction. It switches the pins high/low signals to reverse the motor direction.
You change the speed by sending signal from 0 to 255 to the Enable pins.

0
maas69
maas69

Question 7 months ago on Introduction

Can I control motor with out Ardinio. LDR to logic input via +5v and resistor ?

0
jopado1
jopado1

Question 10 months ago on Step 4

I'm using the L298N along with Uno R3 Plus to perform simple motor control. See attached diagram showing power connections. The sketch and circuit work fine. My problem is that the circuit seems highly susceptible to interference. Without using the up/down button, the motor will activate by itself. Seems to correlate with other activity on the house circuit where the wall wort is plugged in. I have two of these circuits at different locations - one is in kitchen where a dimmer switch exists and really wreaks havoc with the motor activating in fits and starts. Pretty much makes the circuit unusable in this environment (unless dimmer switch is off). The only thing I have tried is moving the 5V output from the L298N to the 5V on the Uno. Behavior is the same either way. Is there an issue with my circuit wiring? Any advise appreciated.

WiringDiagram.png
0
samuelivor
samuelivor

1 year ago

Hello, I want to use this driver with a Raspberry Pi 3+ and the GPIO ports. However, the GPIO ports can only output up to 3.3V. Can I still connect them to the in1, in2, in3, in4, enA and enB ports ? Should I plug the Raspberry's 3.3V output to the driver's 5V input as a reference voltage or is that not how this port work?

0
TDpereczon
TDpereczon

2 years ago

Hi, I'm building a RC go-kart, and i would like to do the windshield wiper motor for steering, great idea, but I'm having a problem, i tried the L298N, didn't work and the 43A BTS7960B DC Motor Driver Drive Module H-Bridge PWM Control Fast Braking, and nothing is happening, I did it just like all the videos iv'e seen, i don't know what I'm doing wrong, what does the voltage need to be on in 1 & 2, can i use any servo, my receiver works on 5v or 9.3v , tried both no difference, do these things need to be programmed before use or are they plug and play, cause I'm not playing, LOL, please help if you can, I'm using a spectrum DX5C... THANK YOU, Danny........

0
Zah12345
Zah12345

Reply 1 year ago

I'm sure your windshield wiper motor draws more current than the 2 Amp this unit can supply. Check the current drawn by the windshield wiper motor when you connect it to your 12 Volt supply directly. You probably find it draws more that 10 Amp!!!

0
Ralphxyz
Ralphxyz

2 years ago

I am getting a "redefinition of 'void setup()'" error