Home > Projects > Motor Projects > Arduino DC Motor Control using L298N Motor Driver

Arduino DC Motor Control using L298N Motor Driver

Summary of Arduino DC Motor Control using L298N Motor Driver


This project shows how to control a DC motor with an Arduino using PWM for speed control and an L298N H-Bridge motor driver for direction control. It explains PWM duty cycle, using a MOSFET for simple PWM speed control, H-Bridge concept for reversing direction, L298N module features (onboard 5V regulator, jumpers, terminals), wiring, required components, and provides Arduino code to read a potentiometer for speed and a button for direction toggle.

Parts used in the Arduino DC Motor Control using L298N Motor Driver:

  • Arduino UNO
  • L298N Motor Driver Module
  • 12V DC Motor
  • 100KΩ Potentiometer
  • Push Button
  • 12V Power Supply
  • Breadboard
  • Connecting Wires

In this project, we will see how to control a DC Motor using Arduino and L298N Motor Driver. There are different ways to control a DC Motor but the Arduino DC Motor Control using L298N Motor Driver is becoming quite popular for many reasons.

Overview

A DC Motor is the simplest of motors that beginners and hobbyists encounter. It is very simple to operate: connect the two leads of the motor to the two terminals of a battery and voila! Your motor starts rotating.

If you switch the leads i.e. reverse the polarity, the motor will rotate in reverse direction. It is as simple as that.

If you want to control the speed of rotation of a simple DC Motor, then there is a technique called PWM DC Motor Control. The Pulse Width Modulation or PWM signal generated by this technique will allow us to control the average voltage that is being delivered to the DC Motor.

Speed Control of DC Motor using PWM

Using PWM technique, the average value of the voltage that is applied to the DC Motor is controlled by turning the power on and off at a very high rate. The frequency of this switching will be in the order of few tens of kilo Hertz.

Now, the average voltage applied to the DC Motor will depend on what is called as the Duty Cycle of the PWM Signal. Duty Cycle of a PWM Signal is nothing but the ratio of the time for which the signal is ON or HIGH to the total time period of the signal i.e. sum of ON time and OFF time.

Duty Cycle is usually expressed in percent and the following figure represents different PWM Signals of a 12V supply with different duty cycles of 0%, 25%, 50%, 75% and 100% respectively.

Now that we have controlled the average voltage that is to be supplied to a DC Motor, how do we apply this voltage to the motor? Here comes the use of Transistor.

The PWM Signal from any source like Arduino in this example, can be given to the gate of a MOSFET and depending on the duty cycle of the PWM Signal, the speed of the DC Motor will vary.

The following image shows a simple circuit diagram, where a PWM output from Arduino is given to a MOSFET and the 12V DC Motor is connected through the MOSFET.

The code for this circuit is given below. Using this code, the Arduino will vary the speed of a DC Motor in a fading fashion i.e. gradually increases the speed to peak and then gradually decreases the speed to halt.

Code

int PWMPin = 10;
int motorSpeed = 0

void setup()
{

}

void loop()
{

for (motorSpeed = 0 ; motorSpeed <= 255; motorSpeed += 10)
{
analogWrite(PWMPin, motorSpeed);
delay(30);
}

for (motorSpeed = 255 ; motorSpeed >= 0; motorSpeed -= 10)
{
analogWrite(PWMPin, motorSpeed);
delay(30);
}
}

This circuit is good for controlling the speed of the motor but not an effective way to change the direction of rotation. For changing the direction of rotation without reversing the leads of the motor every time, you need to use a special circuit called H-Bridge.

DC Motor Control using H-Bridge

An H-Bridge is a simple electronic circuit consisting of four switching elements like transistors (BJT or MOSFET) that can drive a motor in both the directions without switching the leads.

The name “H-Bridge” refers to the look of the connection consisting of four transistors and a motor in the center forming the letter “H”.

A simple H-Bridge connection using four transistors and a motor is shown below. By activating two particular transistors at the same time, we can control the flow of current through the motor and hence the direction of rotation.

The two control inputs A and B in the above circuit will determine the direction of rotation of the motor. If A is LOW and B is HIGH, transistors Q1 and Q4 will be turned on and allow current to flow through the motor in a particular direction.

If the control input A is made HIGH and B is LOW, then transistors Q2 and Q3 will turn on and the flow of current through the motor is reversed and so the direction of the rotation.

By combining both the features i.e. PWM technique for speed control and H-Bridge connection for direction control, you can have a complete control on a DC Motor.

It is tedious to use transistors for making an effective H-Bridge connection. For this purpose, there are dedicated H-Bridge Motor Driver IC available in the market and the two common IC’s are L293D and L298N.

We have already seen how to control the speed of a DC Motor using L293D in an earlier project. In this project, we will focus on the more advanced L298N Motor Driver and see Arduino DC Motor Control using L298N Motor Driver using PWM technique. 

A Brief Note on L298N Motor Driver

L298N Motor Driver IC is a 15-lead high voltage, high current Motor Driver IC with two full bridge drivers. The logic levels of L298N IC are compatible with standard TTL and IC can be used to drive different inductive loads like DC Motors, Stepper Motors, Relay, etc.

The following image shows the Pin Diagram of the L298N IC in Multiwatt Package (Multi Leaded Power Package).

Since the L298N Motor Driver IC is a dual full bridge driver IC, you can control two motors at the same time with individual inputs. The logic supply voltage is 5V but the motor supply voltage can be as high as 45V. The peak output current per channel is 2A.

Generally, L298N Driver is available as modules that contains all the necessary components and connectors for controlling two DC Motors. One such module is shown below. I’ll explain few important components on this module.

The L298N Motor Driver Module consists of two 2-pin screw terminal blocks for connecting two motors. It also has six pin male headers for connecting the two enable inputs and the four input pins (two for each motor).

There is a 3-pin screw terminal block through which you need to give the supply voltage to the motor. If the motors used are rated for 12V or less, then the 12V supply is given through this screw terminal and the onboard 5V regulator will provide the 5V logic supply to the L298N IC.

You can also access this regulated 5V through the third pin in the 3-pin screw terminal block. The jumper provided near the 3-pin screw terminal must be engaged for supply voltages up to 12V as this jumper will enable the onboard regulator. The 5V output from the third pin of the 3-pin screw terminal is available only when the jumper is engaged i.e. supply voltage is 12V. This 5V output can be used to power your Arduino Board.

If the supply voltage is greater than 12V, then remove the jumper as it might damage the regulator. In this case, the logic supply of 5V to the L298N IC is given through the third pin of the 3-pin screw terminal.

Arduino DC Motor Control using L298N

We will now see a simple circuit where we control the speed and direction of a DC Motor using Arduino and L298N IC. You need few additional components for this project and the complete list is given below. In the Arduino DC Motor Control using L298N Project, we will control both the functionalities of a simple DC Motor i.e. speed and direction of rotation using a combination of PWM Signal and L298N (H-Bridge).

Circuit Diagram

Components Required

  • Arduino UNO  [Buy Here]
  • L298N Motor Driver Module  [Buy Here]
  • 12V DC Motor  
  • 100KΩ Potentiometer  
  • Push Button  
  • 12V Power Supply  
  • Breadboard  
  • Connecting Wires  

Code

int mot1 = 8;
int mot2 = 9;
int en1 = 10;
int dir = 6;
bool state = true;
int nob = A0;
int val=0;

void setup()
{
pinMode(mot1,OUTPUT);
pinMode(mot2,OUTPUT);
pinMode(en1,OUTPUT);
pinMode(dir,INPUT_PULLUP);

}

void loop()
{

val = analogRead(nob);

analogWrite(en1, val / 4);

if(digitalRead(dir)==LOW)
{
state=!state;
while(dir==LOW);
delay(300);
}
if(state)
{
digitalWrite(mot1,HIGH);
digitalWrite(mot2,LOW);
}
else
{
digitalWrite(mot1,LOW);
digitalWrite(mot2,HIGH);
}

}

Source: Arduino DC Motor Control using L298N Motor Driver

Quick Solutions to Questions related to Arduino DC Motor Control using L298N Motor Driver:

  • What technique is used to control the speed of a DC Motor?
    Pulse Width Modulation (PWM) is used to control the average voltage and thereby the speed.
  • How does duty cycle affect motor speed?
    The duty cycle is the percent of time the PWM signal is ON; a higher duty cycle increases the average voltage and motor speed.
  • Can Arduino PWM be used with a MOSFET to drive a DC Motor?
    Yes, the PWM output from Arduino can be given to the gate of a MOSFET to control motor speed.
  • Why use an H-Bridge for motor control?
    An H-Bridge allows changing motor rotation direction without reversing the motor leads.
  • What motor driver ICs are mentioned as common H-Bridge solutions?
    L293D and L298N are mentioned as common dedicated H-Bridge motor driver ICs.
  • What voltages does the L298N module support?
    The logic supply is 5V and the motor supply can be up to 45V; the onboard regulator provides 5V from up to 12V input when jumper is engaged.
  • When should the jumper on the L298N module be removed?
    Remove the jumper when supply voltage is greater than 12V to avoid damaging the onboard regulator and provide 5V logic separately.
  • What components are used in the example Arduino project to control speed and direction?
    The example uses Arduino UNO, L298N module, 12V DC motor, 100K potentiometer for speed, and a push button for direction toggle.
  • How does the provided Arduino code read speed input?
    The code reads an analog value from a potentiometer (analogRead) and maps it to PWM via analogWrite on the enable pin.
  • How is direction toggled in the example code?
    The push button input toggles a boolean state; depending on state the code sets motor input pins to drive the motor forward or reverse.

About The Author

Scroll to Top