Skip to content
Reference
13 min read
October 17, 2026

TB6612FNG vs L298N Motor Driver: Which One Should You Use?

The L298N drops about 2.5 V at 1 A and runs hot. The TB6612FNG drops about 0.5 V. A datasheet-based comparison of voltage drop, heat, current ratings, 3.3 V logic, wiring and code for Arduino and ESP32, with a clear verdict.

Search for a dual motor driver for an Arduino or ESP32 robot and the same two names keep appearing: the L298N, the big red module with a heatsink on top, and the TB6612FNG, a small breakout board that costs about the same. Plenty of tutorials treat them as interchangeable ("use whichever you have"). They are not, and the difference shows up the first time a 6 V motor runs sluggishly at full PWM because the driver itself is using up the voltage.

This guide compares the two using the manufacturers' datasheets instead of recycled spec lists. It covers how much voltage each driver wastes, how much heat that creates, what the current ratings really mean, how each one behaves with 3.3 V logic, and the wiring and code for both on an Arduino Uno and an ESP32. It also covers the module-level traps (jumpers, the onboard regulator and the standby pin) behind most "my motor driver does not work" questions.

The short answer: for almost every small robot and battery-powered build, choose the TB6612FNG. It wastes about a fifth of the voltage the L298N does, runs cool without a heatsink, works directly with 3.3 V boards and idles at around a milliamp. Choose the L298N only when the motor supply is above 13.5 V or you need its higher continuous current rating, and accept that it will be hot and inefficient.

Image pending: An L298N module (left) and a TB6612FNG breakout (right) side by side at the same scale: the red L298N board with its finned heatsink is several times larger than the TB6612FNG board

The Quick Answer

Your situationPickWhy
Small robot, motors under about 1 A, supply 3 to 12 VTB6612FNGAbout 0.5 V lost instead of about 2.5 V, and no heatsink
Battery-powered projectTB6612FNGAbout 1 mA logic current and a standby pin
3.3 V board (ESP32, Pico, Raspberry Pi)TB6612FNGLogic supply accepts 2.7 to 5.5 V
Motor supply above 13.5 VL298NOperates up to 46 V
Motor stalls between 1.2 A and 2 AL298N (with a real heatsink)2 A DC per channel
Motor stalls above 2 ANeitherUse a higher-current driver

The rest of this guide shows where those numbers come from and how to avoid the common wiring mistakes with each board.


Two Different Technologies

The L298N and the TB6612FNG both contain two full H-bridges, so each can run two brushed DC motors forward and in reverse, or one bipolar stepper. What differs is the transistors inside.

The L298N (STMicroelectronics) is a bipolar design. Each output leg is a bipolar transistor, and even a bipolar transistor switched fully on leaves a fixed saturation voltage across it. The datasheet gives 1.35 V on the high side and 1.2 V on the low side at 1 A, and the motor current passes through both. In return it tolerates a high supply, up to 46 V in normal operation and 50 V absolute maximum, which is why it was the default choice for years. The bare chip also needs external fast flyback diodes for inductive loads; the red modules add them.

The TB6612FNG (Toshiba) uses MOSFET outputs. A MOSFET that is fully on behaves like a small resistor, and Toshiba specifies 0.5 Ω for the high-side and low-side switches combined, so the drop scales with the current instead of starting at over a volt. The trade is a much lower voltage ceiling: 13.5 V recommended and 15 V absolute maximum on the motor supply. It also adds a standby pin, thermal shutdown and low-voltage detection.

Side-by-Side Comparison

SpecL298NTB6612FNG
MakerSTMicroelectronicsToshiba
Output stageBipolar transistorsMOSFET
Motor supplyUp to 46 V (50 V absolute max), minimum about 4.8 V2.5 to 13.5 V (15 V absolute max), 4.5 V recommended minimum
Logic supply4.5 to 7 V (5 V typical)2.7 to 5.5 V
Continuous current per channel2 A DC1.2 A average (Pololu rates its board 1 A)
Peak current per channel3 A non-repetitive, 2.5 A repetitive3.2 A single pulse, 2 A for repeated 20 ms pulses at up to 20% duty
Voltage drop at 1 A (high + low side)2.55 V typical (1.8 to 3.2 V)0.5 V typical (0.7 V max)
PWM frequency25 kHz typical commutation frequencyUp to 100 kHz
Logic-high threshold2.3 V minimumWorks from a 2.7 to 5.5 V logic supply
Idle current, bridges enabledAbout 13 mA (VS) plus 24 mA (VSS) typical1.1 to 1.5 mA, plus a standby mode
ProtectionOvertemperatureThermal shutdown and low-voltage detection
Flyback diodesExternal, required (modules include them)MOSFET outputs; Toshiba advises protection for inductive loads
Typical moduleRed board with heatsink, 78M05 regulator, jumpersSmall breakout (Pololu, SparkFun, Adafruit and generic boards)

Two rows decide most purchases: the voltage drop and the idle current. Everything else is a trade between voltage range and efficiency.


The Real Difference: Voltage Drop and Heat

Every volt the driver drops is a volt the motor does not get, and the lost voltage times the current becomes heat in the chip. Using the typical datasheet figures at a steady 1 A:

SupplyDriverVoltage at the motorHeat in the driverShare of supply reaching the motor
6 VL298Nabout 3.5 Vabout 2.6 Wabout 58%
6 VTB6612FNGabout 5.5 Vabout 0.5 Wabout 92%
12 VL298Nabout 9.5 Vabout 2.6 Wabout 79%
12 VTB6612FNGabout 11.5 Vabout 0.5 Wabout 96%

These are calculated from the typical values in each datasheet at 25 °C. Real L298N drop at 1 A is specified anywhere from 1.8 V to 3.2 V, so treat the table as a realistic middle case, not a guarantee.

A pack of four AA cells (6 V) driving a 1 A motor through an L298N leaves roughly 3.5 V at the motor. The same motor on a TB6612FNG gets about 5.5 V. That gap is why motors feel weak on L298N robot kits, and why the usual fix, a bigger battery, mostly turns more energy into heat.

Image pending: Voltage reaching the motor at 1 A: L298N versus TB6612FNG at 6 V and 12 V supply, calculated from the typical saturation figures in the ST and Toshiba datasheets

Heat follows from the same numbers. At 1 A the L298N dissipates about 2.5 W per active channel, while the TB6612FNG dissipates about 0.5 W. ST gives the L298N's junction-to-ambient thermal resistance as up to 35 °C/W for the Multiwatt package, so a single channel at 1 A with no heatsink would raise the die roughly 90 °C above ambient. With both channels loaded the chip cannot survive without a heatsink, which is why the module carries a large finned one, and why it is still too hot to touch under load. The datasheet's operating junction temperature ends at 130 °C.

The TB6612FNG's half-watt per channel is small enough that breakout boards ship with no heatsink at all, and thermal shutdown is there as a backstop if a stalled motor pushes it too far.

Image pending: Thermal camera view after five minutes driving the same 1 A motor load: the L298N heatsink and chip are far hotter than the TB6612FNG breakout

What the Current Ratings Really Mean

The headline figures look reversed: 2 A for the L298N and 1.2 A for the TB6612FNG. Three details change how to read them.

Size against stall current, not running current. A brushed motor that is starting or blocked can draw several times its normal current, and a driver that is fine in free spin can trip or fail when a wheel jams. Find your motor's stall current before comparing anything.

The TB6612FNG's higher figures are short pulses. Toshiba lists 1.2 A average, 3.2 A for a single pulse and 2 A for repeated 20 ms pulses at up to 20% duty. Pololu rates its breakout board more conservatively at 1 A continuous and 3 A peak. The L298N lists 2 A DC per channel, 2.5 A repetitive and 3 A non-repetitive peak.

Both can be paralleled for more. ST says an L298N with its channels paralleled (outputs 1 with 4, and 2 with 3) can drive up to 3 A DC and 3.5 A repetitive peak. Pololu rates its paralleled TB6612FNG board at 2 A continuous. If your motor stalls above those figures, neither chip is the right tool.


Logic Levels, 3.3 V Boards and Idle Current

The L298N needs a 5 V logic supply (VSS, 4.5 to 7 V). On the red module that comes from a 78M05 regulator or from your own 5 V supply. Its inputs are TTL level: the datasheet gives a logic-high threshold of 2.3 V minimum and a logic-low of up to 1.5 V, so a 3.3 V GPIO from an ESP32 or Raspberry Pi Pico drives it reliably as long as the chip's own VSS is 5 V.

The TB6612FNG's logic supply (VCC) runs from 2.7 V to 5.5 V, so a 3.3 V board can power it from the same rail with no level shifting.

Idle current is where the two differ most. With the bridges enabled and inputs low, the L298N draws a typical 13 mA from the motor supply plus 24 mA from the logic supply. The TB6612FNG draws 1.1 mA typical at 3 V and 1.5 mA at 5.5 V, and its STBY pin drops it into standby when the motors are not needed. On a battery that matters.


How You Control Each One

L298N. The enable pin (ENA or ENB) switches the bridge on, and the two input pins set the direction. You put the PWM on the enable pin. ST's own rule is to drive the enable inputs low before turning the supply on or off.

EnableIN1IN2Motor
HIGHHIGHLOWForward
HIGHLOWHIGHReverse
HIGHLOWLOWFast stop (brake)
HIGHHIGHHIGHFast stop (brake)
LOWanyanyFree-running stop (coast)

TB6612FNG. Each channel has its own PWM pin, so the two direction pins stay purely about direction, and a shared STBY pin must be HIGH for anything to move.

IN1IN2PWMSTBYMotor
HIGHLOWHIGHHIGHClockwise
LOWHIGHHIGHHIGHCounter-clockwise
HIGH / LOWLOW / HIGHLOWHIGHShort brake during the off part of each PWM cycle
HIGHHIGHanyHIGHShort brake
LOWLOWHIGHHIGHStop (outputs off, coast)
anyanyanyLOWStandby

Note the PWM behaviour in the TB6612FNG's table: during the off part of each PWM cycle the outputs short the motor (brake) instead of letting it float, which is how Toshiba defines it.

Image pending: Control logic at a glance: the L298N takes PWM on its enable pins, while the TB6612FNG has a dedicated PWM pin per channel and a shared STBY pin

Wiring

L298N module to Arduino Uno (motor A)

Module pinConnect to
12V (VS) terminalMotor battery +, 7 to 12 V
GNDBattery − and Arduino GND (common ground)
5VOutput of the onboard regulator when the 5V-EN jumper is fitted
ENAD9 (PWM), after removing the ENA jumper
IN1D8
IN2D7
OUT1 / OUT2Motor A

⚠️ Warning

The 5V-EN jumper on the L298N module enables the onboard 78M05 regulator, which is only meant for a motor supply up to 12 V. Above 12 V, remove it and feed 5 V into the 5V terminal yourself, or the regulator can overheat. Below roughly 7 V the regulator has no headroom, so feed 5 V yourself there as well. The ENA and ENB jumpers tie the enable pins to 5 V: leave one on and that motor runs at full speed, and a wire from a PWM pin fights the jumper. Remove them for speed control.

Image pending: Wiring diagram: L298N module, Arduino Uno, motor and battery, with the ENA jumper removed and a common ground between battery and Arduino

TB6612FNG breakout to Arduino Uno (motor A)

Breakout pinConnect to
VMMotor battery +, 4.5 to 13.5 V
VCCArduino 5V (or 3.3 V on a 3.3 V board)
GNDBattery − and Arduino GND (common ground)
STBYD6 (or tie directly to VCC)
PWMAD5 (PWM)
AIN1D7
AIN2D8
AO1 / AO2Motor A

Add a bulk capacitor across VM and GND close to the board: Toshiba's application circuit shows capacitors on the motor supply to absorb noise.

On an ESP32, use GPIO 25 for PWMA, 26 for AIN1, 27 for AIN2 and 33 for STBY, and connect VCC to 3V3. Avoid the strapping pins (GPIO 0, 2, 5, 12 and 15) for motor control, because their state at boot can change how the board starts. The ESP32 pinout guide lists which pins are safe.

⚠️ Warning

If a TB6612FNG does nothing and you have checked the wiring, look at STBY first. Pololu notes that STBY defaults low, which keeps the chip in standby, so it must be connected to VCC or driven HIGH. Also confirm the grounds are common: a motor supply ground that is not tied to the microcontroller ground is the other classic cause.

Image pending: Wiring diagram: TB6612FNG breakout, Arduino Uno, motor and battery, showing VM versus VCC, the STBY connection and the common ground

The Code

Both sketches expose a motorA(speed) function that takes -255 to 255, so swapping drivers later only changes the pin setup. First the L298N. Remove the ENA jumper before you run it, or the speed will not change.

C++

The TB6612FNG version is almost the same, with one extra line to take the chip out of standby and a brake function that uses its short-brake mode:

C++

💡 Tip

An Arduino Uno runs analogWrite() at about 490 Hz on most pins and about 980 Hz on pins 5 and 6, which is within hearing range and shows up as a whine from the motor. The TB6612FNG accepts PWM up to 100 kHz, and the L298N lists 25 kHz as its typical commutation frequency, so on an ESP32 a PWM frequency of 20 kHz is a good silent choice for either driver.

On an ESP32 the only change is the PWM setup. This version uses the current ESP32 Arduino core (3.x) and a 20 kHz PWM frequency:

C++

Troubleshooting

SymptomLikely causeFix
L298N: motor is slow or weak even at full PWMThe driver drops about 2.5 V at 1 ARaise the supply, use a motor rated for the lower voltage, or switch to a TB6612FNG
L298N: driver too hot to touchDissipating 2.5 W or more per channelReduce the load, add airflow or a larger heatsink, or change driver
L298N: motor runs at full speed and ignores PWMENA jumper still fittedRemove the ENA and ENB jumpers and wire the pins to PWM outputs
L298N: regulator overheats on a 12 V or larger pack5V-EN jumper fitted above 12 VRemove the jumper and supply 5 V separately
TB6612FNG: nothing movesSTBY low or floatingTie STBY to VCC or drive it HIGH
TB6612FNG: motor starts, then stops, driver warmStall current above the rating, thermal shutdownCheck stall current and use a smaller motor or a stronger driver
Either: microcontroller resets when the motor startsSupply sag or noise from the motorPower motors separately, add a bulk capacitor at the driver supply, keep a common ground
Either: only one direction worksLoose or swapped IN wiresRe-check IN1 and IN2, or swap the motor leads
Either: motor whines at low speedPWM frequency within hearing rangeRaise the PWM frequency (20 kHz on an ESP32)

Choosing by Project

ProjectPickWhy
2WD or 4WD robot car with TT gear motors, 4 AA or 2 Li-ion cellsTB6612FNGKeeps the voltage small motors need
Line follower with N20 micro gearmotorsTB6612FNGLow current, tiny board, 3.3 V logic
ESP32 battery robotTB6612FNG3.3 V logic supply and a standby pin
12 V motor with stall current above 1.2 A (small pump, wiper)L298N with a heatsinkIt rates 2 A DC per channel
24 V motorL298NThe only one of the two that accepts it
Small bipolar stepperEither, with careNeither regulates motor current, so match the motor's rated voltage to the supply or use a dedicated stepper driver
Motor stalling above 2 ANeitherUse a higher-current driver
Classroom kit that already includes an L298NL298NIt works with small loads; keep a heatsink fitted

If neither fits, a single-channel brushed-motor driver module (a BTS7960-based board for large motors, or a DRV8871-class driver for mid-range ones) is the usual next step.

Image pending: Decision flowchart: motor supply voltage, stall current and logic level lead to TB6612FNG, L298N or a higher-current driver

Verdict

If your motors run on 12 V or less and stall below about 1.2 A (nearly every hobby robot), the TB6612FNG is the better driver. It delivers most of the battery voltage to the motor, stays cool, runs from 3.3 V logic and sips power, in a board a fraction of the size.

If your motor supply is above 13.5 V, or the motor stalls between 1.2 A and 2 A, the L298N is the cheap, familiar option and the only one of the two that can do it. Fit the heatsink, keep an eye on the jumpers, and plan for the 2 to 3 V it will take off the top.

If the motor stalls above 2 A, skip both and pick a driver designed for that current.


Quick Answers to Common Questions

Is the TB6612FNG better than the L298N? For low-voltage, small motors, yes: lower voltage drop, far less heat, a smaller board and 3.3 V logic. The L298N wins only on supply voltage and continuous current.

Can the TB6612FNG run 12 V motors? Yes. The motor supply is rated 4.5 to 13.5 V recommended, with 15 V absolute maximum, as long as the motor's stall current stays within about 1.2 A.

Can I drive an L298N from a 3.3 V ESP32? Yes, if the L298N's logic supply is 5 V. Its input-high threshold is 2.3 V, which 3.3 V outputs exceed.

Why does my L298N get so hot? Its bipolar outputs drop about 2.5 V at 1 A, and that drop turns into heat in the chip.

Can I power my Arduino from the L298N's 5V pin? Yes, but only when the 5V-EN jumper is fitted and the motor supply is 12 V or less. The regulator on the module is small, so do not use it for much more than the Arduino.

Do I need flyback diodes? The bare L298N chip requires them, and the red modules include them. Toshiba advises adding protection for inductive loads on the TB6612FNG, and the breakout boards are built accordingly.

Is the L298N obsolete? ST still publishes the datasheet (revised October 2023), so it is documented and available, but it is an older bipolar design that wastes more than modern MOSFET drivers.

Can I run four motors from two TB6612FNG boards? Yes. Each board drives two motors, and each needs its own STBY connection.


Where to Go Next

Once the driver is chosen, the next decisions are the pins and the power. The ESP32 pinout guide shows which GPIOs are safe for PWM and direction, and the Arduino Uno pinout guide lists which Uno pins carry PWM.


Sources and Further Reading

The voltage-drop, heat and efficiency figures in this article are calculated from the typical datasheet values at 25 °C and a steady 1 A. Real devices vary with temperature, supply voltage and unit-to-unit spread.

Signal In

Built from what makers search for

The lookups piling up in SolderHub's search bar every day shape what we publish next — new component pages, board guides, and firmware notes, sent out as they go live.

By subscribing you agree to our Privacy Policy. Unsubscribe anytime.