The L298N is a dual full-bridge motor driver capable of handling up to 2A per channel (3A peak non-repetitive) and 5V to 35V DC. It is the default choice for driving brushed DC motors and bipolar stepper motors in low-to-medium torque Arduino projects. However, because it relies on older Bipolar Junction Transistor (BJT) technology rather than modern MOSFETs, it suffers from a significant voltage drop and thermal inefficiency. If you are pushing past 1.2A continuous per channel, or attempting to drive RC servos or brushless (BLDC) motors, the L298N is the wrong tool for the job.

The L298N Reality Check: Motor Types and Load Profiles

Before wiring up your breadboard, you must match the motor type to the driver's commutation capabilities. A common mistake in beginner robotics is treating all motors as interchangeable loads. Steppers and servos, for example, demand entirely different control architectures. The L298N is strictly an H-bridge driver meant for raw coil commutation; it cannot process the internal potentiometer feedback required by standard hobby servos.

Motor Type Compatibility and Load Profiles for H-Bridge Drivers
Motor Type Torque Curve Profile Control Needs L298N Fit? Typical Cost (2026)
Brushed DC (Gearmotor) High starting/stall torque, drops as RPM increases Simple H-bridge (Direction + PWM speed) Excellent (up to 1.5A) $3 - $12
Bipolar Stepper (e.g., NEMA 17) Maximum holding torque at zero speed, drops at high RPM Dual H-bridge with sequenced coil phasing Good (for low-speed/high-holding) $12 - $25
Unipolar Stepper (e.g., 28BYJ-48) Low holding torque, smooth low-speed operation 4-channel low-side switching (ULN2003 preferred) Poor (Overkill, wastes half the coils) $2 - $5
RC Servo (e.g., SG90, MG996R) High positional torque at specific angles 5V PWM signal (internal controller handles H-bridge) Incompatible $4 - $15
BLDC (Outrunner/Inrunner) High continuous torque, massive RPM ceiling 3-phase ESC with Hall sensor or sensorless back-EMF Incompatible $20 - $60+
Callout: The Servo Misconception
Never wire an RC servo to the OUT1/OUT2 terminals of an L298N. Servos contain their own internal H-bridge and control logic. They require a clean 5V power rail and a 50Hz PWM signal directly from an Arduino GPIO pin. Feeding a servo from an L298N output will result in erratic jittering and likely destroy the servo's internal potentiometer.

Wiring the L298N: Terminal Identification and Power Routing

The standard red L298N breakout board found on Amazon and AliExpress for about $2.50 exposes the raw pins of the STMicroelectronics Multiwatt-15 IC. Proper power routing is critical because the board features an onboard 7805 linear voltage regulator that can easily overheat if misconfigured.

L298N Breakout Board Terminal Identification
Terminal / Pin Function Wiring Rules & Constraints
12V (VSS) Motor Power Supply Input Accepts 5V to 35V DC. This powers the motors, not the Arduino logic.
GND Common Ground Must be shared with the Arduino GND and the battery negative terminal.
5V (VDD) Logic Power / Regulator Output Outputs 5V if VSS ≤ 12V and jumper is ON. Input 5V if VSS > 12V.
ENA / ENB Enable / PWM Speed Control Remove the physical jumper caps. Wire to Arduino PWM pins (e.g., 5, 6).
IN1, IN2, IN3, IN4 Direction Logic Inputs 5V TTL logic. Wire to standard Arduino digital GPIO pins.
OUT1 / OUT2 Channel A Motor Output Connects to Motor A. Polarity dictates direction.
OUT3 / OUT4 Channel B Motor Output Connects to Motor B (or Stepper coils A and B).
Pro-Tip: The 12V Jumper Rule
Look at the small jumper cap next to the 12V/GND/5V block. If your motor power supply is 12V or less, leave the jumper ON; the board will step down the voltage to power the Arduino via the 5V pin. If your power supply is greater than 12V (e.g., a 24V battery), you must remove the jumper and supply 5V to the VDD pin separately. Leaving the jumper on with a 24V source will instantly vaporize the onboard 7805 regulator.

Sizing Your Load: A Worked Example and Failure Signatures

The most misunderstood specification of the L298N is its 2A continuous current rating. While the STMicroelectronics L298N Datasheet lists 2A per channel, this assumes an infinite heatsink and optimal ambient temperatures. In reality, the L298N uses BJT transistors which suffer from a high saturation voltage drop ($V_{CE(sat)}$).

The Sizing Rule of Thumb: Never exceed 60% to 70% of the rated continuous current for sustained operation without active forced-air cooling. Target a maximum of 1.2A to 1.4A continuous per channel. Furthermore, you must account for the voltage drop: at 1A, the L298N drops approximately 2V to 2.5V internally. If you supply 12V, your motor only sees ~9.5V.

Worked Load Example: 12V Robot Chassis

Imagine you are building a differential-drive robot using two 12V brushed DC gearmotors.

  • Motor Specs: 12V nominal, 0.6A running current, 1.8A stall current.
  • Power Supply: 3S LiPo battery (11.1V nominal, 12.6V fully charged).

Analysis: The 0.6A running current is well within our 1.4A safe continuous limit. However, when the robot starts from a dead stop or hits a wall, the current spikes toward the 1.8A stall current. Because 1.8A is dangerously close to the 2A absolute maximum, the driver will heat up rapidly during stall events. Additionally, at 0.6A, the L298N will drop about 1.8V. Your 12.6V LiPo will deliver roughly 10.8V to the motor terminals, slightly reducing your top speed but keeping the driver cool. Verdict: Acceptable for intermittent use, but add a 5A fast-blow fuse on the main battery line to protect against prolonged stalls.

Recognizing Failure Signatures

When you push the L298N past its physical limits, it will tell you through three distinct failure modes:

  • The Hum (Audible Whine): If you hear a high-pitched hum from the motor but it isn't moving, your PWM frequency might be too low (below 1kHz), causing the coils to vibrate audibly. Alternatively, the motor is mechanically stalled, and the driver is pushing maximum current into a locked rotor. Check your Arduino analogWrite frequency or inspect the drivetrain for binding.
  • Overheat (Thermal Shutdown): The L298N has an internal thermal shutdown that triggers at roughly 150°C junction temperature. If the heatsink is too hot to touch (>85°C) and the motors randomly cut out then restart a minute later, you are experiencing thermal cycling. Calculate your heat dissipation: 2V drop × 1.5A = 3 Watts of pure heat per channel. Upgrade to a MOSFET-based driver like the TB6612FNG or BTS7960.
  • Stall & Brownout: If your Arduino randomly resets or the screen goes blank when the motors engage, the motor's stall current is causing a massive voltage sag on the shared power rail. This is a brownout. Fix this by adding a large electrolytic capacitor (e.g., 1000μF, 25V) across the L298N's 12V and GND terminals to buffer transient current spikes.

Frequently Asked Questions

Can I use the L298N motor driver for an Arduino RC servo?

No. The L298N is an H-bridge designed to reverse polarity across raw motor coils. RC servos (like the SG90 or MG996R) contain their own internal H-bridge, motor, and feedback potentiometer. They require a stable 5V power supply and a 50Hz PWM control signal directly from an Arduino digital pin. Wiring a servo to the L298N outputs will not work and may damage the servo's control board.

Why is my Arduino resetting when I use the L298N motor driver?

This is almost always caused by a voltage brownout. When a DC motor starts or stalls, it draws 3 to 5 times its running current. If your battery cannot supply this transient spike, the voltage on the shared rail drops below the Arduino's minimum operating voltage (usually ~4.5V for the 5V regulator), causing a reset. Additionally, ensure you have a common ground wire connecting the Arduino GND, the battery negative, and the L298N GND terminal. Without a common ground, the logic signals will float and cause erratic behavior.

How do I control the speed of a DC motor with the L298N and Arduino?

Speed is controlled by applying a PWM (Pulse Width Modulation) signal to the ENA or ENB pins. First, remove the physical jumper caps on the ENA/ENB pins. Wire ENA to an Arduino PWM-capable pin (e.g., Pin 5). In your code, use the analogWrite(5, 128) function to set the motor to roughly 50% speed. A value of 0 stops the motor, and 255 runs it at full speed (minus the L298N's internal voltage drop).

What is a better alternative to the L298N for higher current motors?

If you need more than 1.5A continuous per channel, or if you want to stop wasting battery power as heat, abandon the L298N. For small-to-medium loads (up to 1.2A continuous, 3.2A peak) with high efficiency, use the TB6612FNG (~$6), which uses MOSFETs and drops only ~0.5V. For high-current applications like e-bikes, heavy winches, or large robotic arms (up to 43A), use the BTS7960 high-power motor driver module (~$15-$20), which features massive copper pours and opto-isolated logic inputs.