Electric motors are the heart of modern electronics, robotics, industrial automation, CNC machines, 3D printers, AGVs, conveyor systems, and IoT projects. However, a microcontroller such as an Arduino Uno, Arduino Mega, ESP32, or Raspberry Pi Pico cannot directly power most motors because its GPIO pins are designed to deliver only a small amount of current.
This is where motor driver modules become essential. A motor driver acts as the interface between the microcontroller and the motor, allowing low-power control signals from the Arduino to safely drive motors that require higher voltage and current.
Whether you're controlling a small DC motor, a NEMA 17 stepper motor, or a high-current industrial motor, selecting the correct motor driver is critical for achieving reliable performance, efficient power delivery, and long hardware life.
In this guide, we'll compare five of the most popular Arduino-compatible motor drivers:
- L298N Dual H-Bridge Driver
- TB6612FNG Dual Motor Driver
- BTS7960 High Current Motor Driver
- A4988 Stepper Motor Driver
- DRV8825 Stepper Motor Driver
You'll learn how each driver works, its voltage and current ratings, compatible motors, Arduino wiring, sample code, advantages, disadvantages, and practical applications.

What Is a Motor Driver?
A motor driver is an electronic circuit that receives low-current control signals from a microcontroller and supplies the required voltage and current to a motor.
Think of the Arduino as the brain and the motor driver as the muscle.
Without a motor driver, an Arduino cannot safely power most motors because each GPIO pin can supply only around 20 mA (40 mA absolute maximum) at 5V (Arduino Uno) or 3.3V (many modern boards).
Most motors require:
- 6V–48V operating voltage
- Hundreds of milliamps to tens of amps
- Bidirectional current flow
- PWM speed control
- High startup current
Motor drivers handle all of these requirements while protecting both the microcontroller and the motor.
Why Can't Arduino Drive a Motor Directly?
One of the biggest mistakes beginners make is connecting a motor directly to an Arduino output pin.
This can permanently damage the Arduino because motors draw significantly more current than a GPIO pin can safely provide.
Arduino Uno Output Capability
| Parameter | Value |
|---|---|
| Logic Voltage | 5V |
| Recommended Current per Pin | 20mA |
| Absolute Maximum per Pin | 40mA |
| Total Current from MCU | Limited |
Typical Motor Requirements
| Motor | Voltage | Current |
|---|---|---|
| Small DC Motor | 6V–12V | 300mA–2A |
| Gear Motor | 12V–24V | 1A–10A |
| NEMA17 Stepper | 12V–24V | 1A–2.5A per phase |
| High Power DC Motor | 12V–24V | 10A–43A |
As shown above, there is a huge difference between what an Arduino can supply and what a motor requires.
Motor drivers bridge this gap safely.
How Does a Motor Driver Work?
A motor driver receives three main inputs:
- Direction signals
- PWM speed control
- Enable signal
It then switches power from an external supply to the motor using transistors or MOSFETs.
The driver provides:
- Forward rotation
- Reverse rotation
- Speed control
- Current amplification
- Electrical isolation
- Protection circuits
This allows the Arduino to control powerful motors without directly supplying the motor current.

Types of Motor Drivers
Motor drivers generally fall into two categories.
1. H-Bridge Motor Drivers
Designed primarily for brushed DC motors.
Examples:
- L298N
- TB6612FNG
- BTS7960
Capabilities:
- Forward direction
- Reverse direction
- PWM speed control
- Dual motor support (L298N & TB6612FNG)
- High current support (BTS7960)
Applications:
- Robot cars
- Conveyor systems
- Electric vehicles
- Home automation
- DC pumps
- Smart doors
2. Stepper Motor Drivers
Designed specifically for bipolar stepper motors.
Examples:
- A4988
- DRV8825
Capabilities:
- Microstepping
- Accurate positioning
- Step and Direction control
- Current limiting
- Smooth motion
Applications:
- CNC Machines
- 3D Printers
- Laser Engravers
- Camera Sliders
- Pick and Place Machines
- Robotic Arms

Complete Specification Comparison
| Driver | Motor Type | Operating Voltage | Logic Voltage | Continuous Current | Peak Current | Best For |
|---|---|---|---|---|---|---|
| L298N | Brushed DC | 5V–35V | 5V | 2A / Channel | 3A | Robot Cars |
| TB6612FNG | Brushed DC | 2.5V–13.5V | 2.7V–5.5V | 1.2A / Channel | 3.2A | Small Robots |
| BTS7960 | High Power DC | 6V–27V | 5V | 43A | 43A+ | Industrial Motors |
| A4988 | Stepper | 8V–35V | 3.3V / 5V | 2A / Phase* | 2.5A | NEMA 17 |
| DRV8825 | Stepper | 8.2V–45V | 3.3V / 5V | 2.5A / Phase* | 4.2A | CNC & 3D Printers |
*Actual usable current depends on cooling, heatsinks, airflow, and current-limit adjustment.
Voltage Comparison
Each motor driver supports a different supply voltage range.
| Driver | Voltage Range |
|---|---|
| TB6612FNG | 2.5V–13.5V |
| L298N | 5V–35V |
| BTS7960 | 6V–27V |
| A4988 | 8V–35V |
| DRV8825 | 8.2V–45V |
Best Voltage Support
🥇 DRV8825 — Up to 45V
Best for Low Voltage Projects
🥇 TB6612FNG
Current Comparison
Current capability determines the size of the motor a driver can safely operate.
| Driver | Continuous Current |
|---|---|
| TB6612FNG | 1.2A |
| L298N | 2A |
| A4988 | 2A |
| DRV8825 | 2.5A |
| BTS7960 | 43A |
Best High Current Driver
🥇 BTS7960
Ideal for:
- Electric vehicles
- Heavy robotics
- Large conveyors
- Winches
- Industrial automation

Which Driver Is Used for Which Motor?
| Motor | Recommended Driver |
|---|---|
| Small DC Motor | TB6612FNG |
| DC Gear Motor | L298N |
| High Power DC Motor | BTS7960 |
| NEMA 17 Stepper | A4988 |
| High Torque NEMA 17 | DRV8825 |
Choosing the correct driver depends on three key factors:
- Motor Type (DC or Stepper)
- Operating Voltage
- Current Requirement
Selecting a driver with insufficient current capacity can lead to overheating, missed steps (for steppers), unstable operation, or permanent damage.
Complete Driver Specifications, Wiring & Arduino Code
In this section, we'll examine each motor driver individually, covering its working principle, electrical specifications, Arduino wiring, complete Arduino code, advantages, disadvantages, and recommended applications.
L298N Dual H-Bridge Motor Driver
The L298N is one of the most popular motor drivers for Arduino projects. It is designed to control two brushed DC motors or one bipolar stepper motor and is commonly used in educational robotics, robot cars, conveyor systems, and automation projects.
Although it is an older bipolar transistor-based design, it remains a favorite due to its affordability and ease of use.
Key Features
- Dual H-Bridge Driver
- Controls 2 DC Motors
- Controls 1 Bipolar Stepper Motor
- PWM Speed Control
- Direction Control
- Easy Arduino Interface
- Onboard 5V Regulator (module dependent)
Electrical Specifications
| Parameter | Value |
|---|---|
| Motor Voltage | 5V–35V DC |
| Logic Voltage | 5V |
| Continuous Current | 2A per Channel |
| Peak Current | 3A |
| Channels | 2 |
| PWM Support | Yes |
| Reverse Direction | Yes |
Pin Description
| Pin | Function |
|---|---|
| ENA | Motor A Speed |
| IN1 | Motor A Direction |
| IN2 | Motor A Direction |
| ENB | Motor B Speed |
| IN3 | Motor B Direction |
| IN4 | Motor B Direction |
| 12V | Motor Power |
| GND | Ground |
| 5V | Logic Power |
Arduino Wiring
| Arduino | L298N |
|---|---|
| D5 | ENA |
| D6 | IN1 |
| D7 | IN2 |
| D9 | ENB |
| D10 | IN3 |
| D11 | IN4 |
| GND | GND |
| 5V | 5V |
Arduino Code
const int ENA=5;
const int IN1=6;
const int IN2=7;
void setup()
{
pinMode(ENA,OUTPUT);
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
}
void loop()
{
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
analogWrite(ENA,180);
delay(3000);
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
delay(3000);
}
Advantages
✔ Easy to use
✔ Low cost
✔ Widely available
✔ Excellent for beginners
✔ Supports PWM
Limitations
✖ Lower efficiency
✖ Generates more heat
✖ Voltage drop due to bipolar transistors
Best Applications
- Robot Cars
- DC Fans
- Conveyor Belts
- Educational Projects
- Small Automation Systems
TB6612FNG Dual Motor Driver
The TB6612FNG is a modern MOSFET-based motor driver that is significantly more efficient than the L298N. It produces less heat, offers lower voltage loss, and is ideal for battery-powered robotics.
Key Features
- Dual H-Bridge
- MOSFET Technology
- High Efficiency
- Battery Friendly
- PWM Speed Control
- Reverse Direction
Electrical Specifications
| Parameter | Value |
|---|---|
| Motor Voltage | 2.5V–13.5V |
| Logic Voltage | 2.7V–5.5V |
| Continuous Current | 1.2A |
| Peak Current | 3.2A |
| Channels | 2 |
Arduino Wiring
| Arduino | TB6612FNG |
|---|---|
| D5 | PWMA |
| D6 | AIN1 |
| D7 | AIN2 |
| D9 | PWMB |
| D10 | BIN1 |
| D11 | BIN2 |
| GND | GND |
| 5V | VCC |
Arduino Code
const int PWMA=5;
const int AIN1=6;
const int AIN2=7;
void setup()
{
pinMode(PWMA,OUTPUT);
pinMode(AIN1,OUTPUT);
pinMode(AIN2,OUTPUT);
}
void loop()
{
digitalWrite(AIN1,HIGH);
digitalWrite(AIN2,LOW);
analogWrite(PWMA,200);
delay(3000);
}
Advantages
✔ Higher efficiency than L298N
✔ Low heat generation
✔ Ideal for battery-powered robots
✔ Compact size
Limitations
✖ Lower maximum voltage
✖ Not suitable for high-current industrial motors
Best Applications
- Mini Robots
- Line Following Robots
- Arduino Cars
- Battery Projects
- STEM Kits
BTS7960 High Current Driver
The BTS7960 is a powerful MOSFET-based H-Bridge driver designed for high-current DC motors. It is widely used in industrial automation, electric vehicles, robotic platforms, and conveyor systems.
Key Features
- High Current Driver
- MOSFET Technology
- PWM Control
- Reverse Direction
- Thermal Protection
- Overcurrent Protection
Electrical Specifications
| Parameter | Value |
|---|---|
| Motor Voltage | 6V–27V |
| Logic Voltage | 5V |
| Continuous Current | 43A |
| Peak Current | 43A+ |
Arduino Wiring
| Arduino | BTS7960 |
|---|---|
| D5 | RPWM |
| D6 | LPWM |
| D7 | R_EN |
| D8 | L_EN |
| GND | GND |
| 5V | VCC |
Arduino Code
const int RPWM=5;
const int LPWM=6;
void setup()
{
pinMode(RPWM,OUTPUT);
pinMode(LPWM,OUTPUT);
}
void loop()
{
analogWrite(RPWM,200);
analogWrite(LPWM,0);
delay(3000);
analogWrite(RPWM,0);
analogWrite(LPWM,200);
delay(3000);
}
Advantages
✔ Extremely high current
✔ Industrial quality
✔ MOSFET efficiency
✔ Heavy-duty applications
Limitations
✖ Larger physical size
✖ Requires external power supply
Best Applications
- Electric Vehicles
- Conveyor Systems
- AGVs
- Heavy Robots
- Winches
- Industrial Automation
A4988 Stepper Driver
The A4988 is one of the most widely used drivers for NEMA 17 stepper motors. It supports microstepping, adjustable current limiting, and smooth motion, making it ideal for CNC machines, laser engravers, and 3D printers.
Key Features
- Step & Direction Interface
- Adjustable Current Limit
- Microstepping up to 1/16
- Thermal Protection
- Overcurrent Protection
Electrical Specifications
| Parameter | Value |
|---|---|
| Motor Voltage | 8V–35V |
| Logic Voltage | 3.3V / 5V |
| Current | 2A per Phase |
| Microstepping | Full, 1/2, 1/4, 1/8, 1/16 |
Arduino Wiring
| Arduino | A4988 |
|---|---|
| D2 | STEP |
| D3 | DIR |
| D8 | ENABLE |
| 5V | VDD |
| GND | GND |
Arduino Code
#define STEP_PIN 2
#define DIR_PIN 3
void setup()
{
pinMode(STEP_PIN,OUTPUT);
pinMode(DIR_PIN,OUTPUT);
}
void loop()
{
digitalWrite(DIR_PIN,HIGH);
for(int i=0;i<200;i++)
{
digitalWrite(STEP_PIN,HIGH);
delayMicroseconds(800);
digitalWrite(STEP_PIN,LOW);
delayMicroseconds(800);
}
delay(1000);
}
Best Applications
- CNC Machines
- 3D Printers
- Plotters
- Camera Sliders
- Pick and Place Machines
DRV8825 Stepper Driver
The DRV8825 is an enhanced stepper motor driver with higher voltage support, greater current capability, and finer microstepping than the A4988. It is commonly used in professional CNC routers, laser cutters, and advanced robotics.
Key Features
- Step & Direction Interface
- Microstepping up to 1/32
- Adjustable Current Limit
- Thermal Shutdown
- Overcurrent Protection
Electrical Specifications
| Parameter | Value |
|---|---|
| Motor Voltage | 8.2V–45V |
| Logic Voltage | 3.3V / 5V |
| Continuous Current | 2.5A per Phase |
| Peak Current | 4.2A |
| Microstepping | Full, 1/2, 1/4, 1/8, 1/16, 1/32 |
Arduino Wiring
| Arduino | DRV8825 |
|---|---|
| D2 | STEP |
| D3 | DIR |
| D8 | ENABLE |
| 5V | VDD |
| GND | GND |
Arduino Code
#define STEP_PIN 2
#define DIR_PIN 3
void setup()
{
pinMode(STEP_PIN,OUTPUT);
pinMode(DIR_PIN,OUTPUT);
}
void loop()
{
digitalWrite(DIR_PIN,HIGH);
for(int i=0;i<400;i++)
{
digitalWrite(STEP_PIN,HIGH);
delayMicroseconds(500);
digitalWrite(STEP_PIN,LOW);
delayMicroseconds(500);
}
delay(1000);
}
Advantages
✔ Higher voltage support
✔ Better torque at higher speeds
✔ Up to 1/32 microstepping
✔ Excellent for precision motion
Limitations
✖ Requires careful current-limit adjustment
✖ Needs good cooling under high loads
Best Applications
- CNC Routers
- Professional 3D Printers
- Laser Engravers
- Precision Robotics
- Industrial Motion Control
Driver Selection, Real Projects, FAQs & Complete Buying Guide

Which Motor Driver Should You Choose?
Selecting the right motor driver depends on four important factors:
- Motor Type
- Operating Voltage
- Current Requirement
- Required Precision
The following guide helps you quickly identify the best driver for your project.
| If You Are Building... | Recommended Driver | Why? |
|---|---|---|
| Beginner Arduino Robot | L298N | Easy to use and affordable |
| Battery Powered Robot | TB6612FNG | High efficiency and low heat |
| High Power Robot | BTS7960 | Supports up to 43A |
| CNC Machine | DRV8825 | Higher voltage and 1/32 microstepping |
| 3D Printer | A4988 / DRV8825 | Smooth and accurate stepper control |
| Robotic Arm | DRV8825 | Excellent precision |
| Conveyor System | BTS7960 | High torque motor support |
| Camera Slider | A4988 | Smooth positioning |
| Automatic Door | L298N | Simple DC motor control |
| Industrial Automation | BTS7960 | Heavy-duty performance |
Driver Recommendation by Motor
| Motor | Driver |
|---|---|
| DC Motor | L298N |
| Small DC Motor | TB6612FNG |
| High Power DC Motor | BTS7960 |
| NEMA17 | A4988 |
| NEMA23 | DRV8825 |
| Geared Motor | L298N |
| High Torque Stepper | DRV8825 |
Driver Recommendation by Current
| Current | Recommended Driver |
|---|---|
| Under 1A | TB6612FNG |
| 1A–2A | L298N |
| 2A–3A | DRV8825 |
| Above 10A | BTS7960 |
| Up to 43A | BTS7960 |
Driver Recommendation by Voltage
| Voltage | Recommended Driver |
|---|---|
| 3V–12V | TB6612FNG |
| 5V–35V | L298N |
| 6V–27V | BTS7960 |
| 8V–35V | A4988 |
| 8V–45V | DRV8825 |

Real Projects Using These Motor Drivers
These motor drivers are widely used in hobby, educational, commercial, and industrial electronics.
Robot Car
Recommended Driver
✅ L298N
Alternative
✅ TB6612FNG
Motor
- TT Gear Motor
- DC Gear Motor
Smart Line Following Robot
Recommended Driver
✅ TB6612FNG
Reason
Low power consumption and high efficiency.
Robotic Arm
Recommended Driver
✅ DRV8825
Motor
NEMA17
Reason
Smooth positioning and excellent accuracy.
CNC Machine
Recommended Driver
✅ DRV8825
Reason
Supports high voltage and fine microstepping.
3D Printer
Recommended Drivers
- A4988
- DRV8825
Used For
- X Axis
- Y Axis
- Z Axis
- Extruder
Conveyor Belt
Recommended Driver
✅ BTS7960
Reason
Supports high-current industrial motors.
Automatic Gate
Recommended Driver
✅ BTS7960
Motor
24V DC Gear Motor
Electric Vehicle
Recommended Driver
✅ BTS7960
Reason
Handles very high motor current safely.
Camera Slider
Recommended Driver
✅ A4988
Motor
NEMA17
Reason
Accurate movement with smooth microstepping.
Pick and Place Machine
Recommended Driver
✅ DRV8825
Reason
Excellent precision and repeatability.

Best Practices for Motor Driver Projects
Following these practices will improve reliability and extend the life of both your motor driver and motor.
Always Use an External Power Supply
Never power medium or high-power motors directly from the Arduino's 5V pin.
Share a Common Ground
Connect the Arduino GND and motor driver's GND together. A shared reference is essential for stable communication.
Set the Current Limit
For A4988 and DRV8825, adjust the current limit before connecting the motor to prevent overheating and missed steps.
Add a Heat Sink
Drivers operating near their current limits should use a heat sink and, if necessary, active cooling.
Match Voltage and Current Ratings
Choose a driver that comfortably exceeds your motor's requirements to provide a safety margin.
Check Wiring Before Powering On
Verify motor phases, polarity, and power connections to avoid damaging the driver or motor.
Common Problems & Solutions
| Problem | Cause | Solution |
|---|---|---|
| Motor Not Rotating | Incorrect wiring | Verify connections |
| Driver Overheating | Excessive current | Add heat sink or reduce current |
| Stepper Vibrating | Wrong coil wiring | Identify correct motor phases |
| Missed Steps | Current limit too low | Increase current limit carefully |
| Arduino Resetting | Shared unstable power | Use separate motor power supply |
| No Speed Control | PWM pin incorrect | Connect to a PWM-capable Arduino pin |
Frequently Asked Questions (FAQs)
Which motor driver is best for beginners?
The L298N is beginner-friendly due to its simple wiring and widespread community support.
Which driver is the most efficient?
The TB6612FNG uses MOSFET technology, resulting in lower heat and better efficiency than the L298N.
Which driver is suitable for industrial motors?
The BTS7960 is designed for high-current applications up to 43A, making it suitable for many industrial and heavy-duty projects.
Which driver should I use for a NEMA 17 stepper motor?
Both the A4988 and DRV8825 are suitable. Choose the DRV8825 if you need higher voltage support or finer microstepping.
Can I connect a motor directly to an Arduino?
No. Most motors require significantly more current than an Arduino GPIO pin can safely provide. Always use an appropriate motor driver.
Can one driver control multiple motors?
- L298N: Up to two DC motors.
- TB6612FNG: Up to two DC motors.
- BTS7960: Typically one high-current DC motor.
- A4988 / DRV8825: One bipolar stepper motor per driver.
Related Products
Explore these products on Chip.pk to build your robotics and automation projects:
- Arduino Uno R3 ATmega328P Development Board
- Arduino Mega 2560 R3
- Raspberry Pi Pico 2
- Raspberry Pi Pico 2 W
- L298N Dual H-Bridge Motor Driver
- TB6612FNG Dual Motor Driver Module
- BTS7960 43A High-Power Motor Driver
- A4988 Stepper Motor Driver
- DRV8825 Stepper Motor Driver
- NEMA 17 Stepper Motor
- 28BYJ-48 Stepper Motor with ULN2003 Driver
- SG90 Micro Servo Motor
- MG996R High Torque Servo Motor
- TT DC Gear Motor
- DC Geared Motor Series
- Breadboards
- Jumper Wire Kits
- DC Power Supply Modules
Continue Learning & Explore More Resources
📘 Original Article (Chip.pk Knowledge Hub)
Read the complete guide with detailed explanations, comparison tables, Arduino code, wiring diagrams, and product recommendations.
💻 GitHub Repository
Access the complete Arduino sketches, wiring diagrams, documentation, and project resources.
🛠️ Hackster.io Project
Follow the hands-on implementation with practical examples and hardware guidance.
✍️ Medium Article
Read the concise developer-focused version of this comparison.
👨💻 DEV Community (DEV.to)
Explore additional Arduino programming examples and embedded systems insights.