The Arduino motor controller L298N is a bipolar junction transistor (BJT) dual H-bridge designed to drive two brushed DC motors (up to 2A per channel continuously, 3A peak) or one 2-phase bipolar stepper motor. While it remains a staple in 2026 electronics starter kits due to its low cost (typically $2 to $4 per module), its internal BJT architecture causes a fixed 1.5V to 2.0V voltage drop across the driver. This makes it highly inefficient for low-voltage, battery-powered robots compared to modern MOSFET-based drivers like the TB6612FNG or DRV8871.
If you are designing a high-current rover or a precision CNC plotter, you must account for this voltage drop and the resulting thermal dissipation. Below is the exact framework for selecting the right motor, sizing your power supply, and wiring the L298N without triggering its internal thermal shutdown.
Which Motor Type Fits the L298N Load Profile?
The L298N is strictly an H-bridge. It reverses polarity to control direction and uses PWM on the enable pins to control speed. It does not generate step pulses or 3-phase commutation internally. Therefore, it is only compatible with specific motor topologies.
| Motor Type | Torque Curve Profile | Control Needs | L298N Compatibility | Typical Cost (2026) |
|---|---|---|---|---|
| Brushed DC (Gear) | Max torque at stall (0 RPM), drops linearly as speed increases. | H-Bridge for direction; PWM for speed. | Ideal. Fits the 2A continuous limit perfectly for 12V-24V systems. | $5 - $15 |
| Bipolar Stepper | Max holding torque at 0 RPM, drops sharply at high step rates. | Sequenced H-Bridge pulses (requires library like AccelStepper). | Good. Can drive one 4-wire stepper using both channels. Lacks microstepping. | $10 - $25 |
| BLDC (Outrunner/Inrunner) | High efficiency, flat torque curve across mid-range RPM. | 3-phase ESC with Hall sensors or sensorless back-EMF commutation. | Incompatible. L298N only has 2 channels; BLDC requires 3. | $20 - $60 |
| Hobby Servo (Standard) | High torque at specific angular positions via internal gearbox. | Direct 50Hz PWM signal (1-2ms pulse width) from microcontroller GPIO. | Incompatible. Servos have built-in drivers; they do not use H-bridges. | $4 - $12 |
Wiring, Terminals, and the 2V Voltage Drop Reality
The most common mistake when deploying the L298N driver is ignoring the forward voltage drop of the internal Darlington transistor pairs. When current flows through the L298N, you lose roughly 2V to heat. If you supply 12V to the module, your motor only sees ~10V.
Terminal Identification and Logic Power
- VS (Motor Power): Accepts 5V to 35V DC. This powers the motors.
- GND (Common Ground): Must be shared with your Arduino/ESP32 ground and your power supply negative terminal.
- VCC (Logic Power): Powers the internal optocouplers and logic IC. Requires exactly 5V.
- 5V Jumper: If your VS supply is between 7V and 12V, leave the jumper ON. The board's internal 7805 linear regulator will step down VS to power VCC. If VS exceeds 12V, you MUST remove this jumper and supply 5V directly to the VCC pin, or the 7805 will overheat and fail.
- ENA / ENB: PWM inputs for speed control of Channel A and Channel B.
- IN1, IN2, IN3, IN4: Digital logic pins for direction control.
Sizing Rule of Thumb and Worked Load Example
When sizing a power supply for an L298N-driven DC motor, use the 1.5x Stall Current Rule. Motors draw their maximum current when stalled or starting from rest. If your power supply cannot deliver this surge, the voltage will sag, causing the Arduino to brownout and reset.
Worked Example: You are driving a 12V nominal DC gear motor with a running current of 0.8A and a measured stall current of 2.5A.
- Calculate Required Supply Voltage: Motor needs 12V. L298N drops 2V. Minimum VS input = 14V. (A 3S LiPo battery at 12.6V fully charged will only deliver ~10.6V to the motor, resulting in a 15% speed loss. A 14.4V 4S Li-ion pack or a 12V SLA battery peaking at 13.8V is a better fit).
- Calculate Required Supply Current: 2.5A (stall) × 1.5 (safety margin) = 3.75A minimum continuous supply rating.
- Calculate Heat Dissipation: At 2A continuous load, the L298N wastes P = V × I = 2V × 2A = 4 Watts per channel. The stock aluminum heatsink is barely sufficient for 4W in still air. If ambient temperature exceeds 30°C, you must add active cooling or derate the continuous current to 1.5A.
Failure Signatures: Hum, Overheat, and Stall
Because the L298N is a legacy BJT design, it fails in highly predictable ways. Recognizing these signatures will save you hours of multimeter probing.
| Symptom | Root Cause | Measurement / Fix |
|---|---|---|
| Motor Hums but Won't Spin | Logic power (5V) is present, but motor power (VS) is missing, or the common ground is broken. | Measure voltage between the motor output terminals. If it reads 0V while IN1 is HIGH, check the VS screw terminal and the shared GND wire. |
| Heatsink is Too Hot to Touch | Exceeding the 2A continuous limit, or driving a high-inductance motor without adequate flyback diode snubbing. | The L298N triggers thermal shutdown at ~150°C junction temp. If the heatsink exceeds 60°C, reduce PWM duty cycle or upgrade to a MOSFET driver like the TB6612FNG. |
| Arduino Resets on Motor Start | Voltage brownout caused by motor inrush current collapsing the shared power rail, or inductive kickback corrupting logic. | Ensure the power supply meets the 1.5x stall current rule. Add a 1000µF electrolytic capacitor across the VS and GND terminals to buffer inrush spikes. |
| Motor Only Spins in One Direction | One of the direction logic pins (e.g., IN2) is floating or wired to a dead GPIO pin. | Use a multimeter in DC voltage mode to check IN1 and IN2 while commanding a reverse. Both must toggle cleanly between 0V and 5V. |
Frequently Asked Questions
Can I use the Arduino motor controller L298N for a 24V DC motor?
Yes, the L298N absolute maximum rating for VS is 35V, making 24V systems perfectly safe for the silicon. However, you must remove the 5V jumper on the module. If you feed 24V into the onboard 7805 linear regulator, it will attempt to dissipate (24V - 5V) × 0.03A = 0.57W of heat in a tiny TO-220 package without a heatsink, leading to rapid thermal failure. Remove the jumper and power the VCC pin directly from the Arduino's 5V output.
Why is my L298N getting hot but the motor isn't spinning?
This usually indicates a short circuit in the motor windings, a jammed mechanical load causing a continuous stall condition, or a wiring fault where the motor leads are shorted together. The L298N will pass current continuously if the logic pins are held HIGH, even if the motor cannot physically turn. Measure the resistance across the motor terminals; a healthy 12V gear motor should read between 5 and 20 ohms. If it reads near 0 ohms, the internal windings are shorted.
How does the L298N compare to the TB6612FNG for battery-powered rovers?
For battery-powered applications, the TB6612FNG is vastly superior. The L298N uses BJTs, resulting in a ~2V drop and roughly 15-20% wasted energy as heat. The TB6612FNG uses MOSFETs with an R_DS(on) of just 0.5Ω, dropping only about 0.5V at 1A and operating at >90% efficiency. If your rover runs on LiPo batteries and you need maximum runtime, abandon the L298N and use the TB6612FNG. The only advantage the L298N retains in 2026 is its ability to handle higher voltages (up to 35V vs the TB6612FNG's 15V limit) and its rugged, beginner-friendly screw terminals.
Do I need to connect the 5V jumper on the L298N module?
Only if your motor power supply (VS) is between 7V and 12V. The jumper routes VS through an onboard 7805 voltage regulator to generate the 5V needed for the logic chips. If your VS is a 6V battery pack, the 7805 won't have enough headroom to output a stable 5V, and you must remove the jumper and supply 5V externally. If your VS is a 24V supply, the 7805 will overheat, so you must also remove the jumper and supply 5V externally.






