The L293D at a Glance: Specs and Load Profile Match

The motor controller IC L293D is a dual H-bridge driver designed to bidirectionally control two small brushed DC motors or one low-current bipolar stepper motor. It is the default 'hello world' motor driver for Arduino and ESP32 beginners, but its internal architecture dictates strict load limits that many hobbyists overlook until a component melts.

The L293D uses a Bipolar Junction Transistor (BJT) output stage rather than modern MOSFETs. This results in a high internal voltage drop (typically 1.4V to 2.0V) and significant heat dissipation. It is best suited for high-voltage, low-current applications where efficiency is secondary to simplicity and low upfront cost.

L293D Core Specifications (Source: Texas Instruments Datasheet)
ParameterValuePractical Implication
Continuous Current per Channel600 mADo not exceed with continuous mechanical loads.
Peak Current per Channel1.2 A (100ms)Handles brief startup spikes or momentary stalls.
Motor Supply Voltage (VCC2)4.5V to 36VGreat for 12V/24V systems; poor for 3.7V LiPo cells.
Logic Supply Voltage (VCC1)4.5V to 7VDirectly compatible with 5V Arduino/ESP32 GPIO.
Output Voltage Drop (Vce sat)~1.4V to 2.0VWastes battery life; reduces torque at low voltages.
Flyback DiodesInternal (The 'D' variant)No external 1N4007 diodes required on motor terminals.

Motor Type Comparison: Where the L293D Fits

Not all motors demand the same drive topology. The L293D provides two independent H-bridges, which dictates which motor types it can physically drive. Below is a comparison of common hobbyist motors and their compatibility with this IC.

Motor TypeTorque CurveControl NeedsAvg CostL293D Compatibility
Brushed DC (TT Gearmotor)High stall torque, drops linearly with speed1 H-Bridge (Direction + PWM speed)$2 - $5Excellent (if stall < 1.2A)
Bipolar Stepper (NEMA 14)High holding torque, drops at high RPM2 H-Bridges (Stepped sequencing)$8 - $15Fair (Limited to < 600mA/phase)
Unipolar Stepper (28BYJ-48)Low torque, high step resolution4 Low-side switches (Darlington array)$3 - $6Poor (Overkill; use ULN2003 instead)
RC Servo (SG90)Positional holding torquePWM signal (50Hz pulse width)$2 - $4None (Requires direct GPIO, not H-bridge)
BLDC (Gimbal/Drone)High efficiency, flat torque curve3-Phase commutation (6 MOSFETs)$15 - $30None (Requires dedicated 3-phase ESC)
Bench Insight: Never treat steppers and servos as interchangeable. A stepper requires continuous coil energization to hold position (drawing constant current), while a servo only draws significant current while actively moving to a new PWM-commanded angle. The L293D is designed for the continuous coil energization of DC and bipolar steppers.

Wiring and Terminal Identification for the L293D

The L293D comes in a 16-pin DIP package. Correctly identifying the logic, motor, and ground pins is critical, as swapping VCC1 and VCC2 will instantly destroy the internal logic gates if your motor supply exceeds 7V.

  • Pin 1 & 9 (EN1, EN2): Enable pins. Connect to microcontroller PWM pins for speed control, or pull HIGH to 5V for full-speed on/off.
  • Pin 2, 7, 10, 15 (IN1, IN2, IN3, IN4): Logic inputs. Connect to standard digital GPIO pins. Set one HIGH and one LOW to drive the motor forward; swap them to reverse.
  • Pin 3, 6, 11, 14 (OUT1, OUT2, OUT3, OUT4): Motor outputs. Connect directly to the motor terminals.
  • Pin 8 (GND): Motor ground. Must share a common ground with your microcontroller and motor power supply.
  • Pin 16 (VCC1): Logic power. Connect to 5V from your Arduino/ESP32.
  • Pin 4, 5, 12, 13 (GND): Internal heat sink ground. These four pins are tied together internally to help dissipate heat. Connect them all to your main ground plane.
  • Pin 8 (VCC2): Motor power. Connect to your external motor power supply (4.5V to 36V).

Note on the 'D': The L293D includes internal clamp diodes to protect against back-EMF voltage spikes when the motor stops. If you are using the older L293 (without the D), you must solder four external 1N4007 flyback diodes across the motor terminals, or the back-EMF will punch through the output transistors on the first direction reversal.

Sizing Rule of Thumb and Worked Load Example

The golden rule of motor driver sizing is: The driver's continuous current rating must exceed the motor's stall current, not its running current. When a motor starts from a dead stop, or jams against a mechanical limit, it draws stall current. If your driver cannot handle this, it will trigger thermal shutdown or permanently fail.

Worked Load Example: 12V DC Gearmotor

Let's size a driver for a standard 12V, 30RPM DC gearmotor commonly used in DIY robot chassis.

  • No-load running current: 60 mA
  • Stall current: 800 mA
  • Operating voltage: 12V

The Math: The motor draws 800mA at stall. The L293D has a peak limit of 1.2A (for 100ms) and a continuous limit of 600mA. Because the 800mA stall current exceeds the 600mA continuous rating, the L293D will overheat if the motor remains jammed for more than a fraction of a second. However, for normal operation where the motor spins freely (drawing ~200mA under typical load), the L293D is adequate.

The Voltage Drop Penalty: At a 200mA continuous load, the L293D's BJT output stage drops approximately 1.8V (based on the Vce(sat) specs for the high-side and low-side transistors combined).
Your 12V motor actually receives 10.2V.
The L293D dissipates the remaining 1.8V as heat: 1.8V × 0.2A = 0.36 Watts. While 0.36W won't melt the chip, scaling this to 500mA pushes dissipation to 0.9W, which will make the DIP-16 package too hot to touch without a heatsink.

Failure Signatures: Hum, Overheat, and Stall

When pushing the L293D near its limits, it exhibits distinct physical failure signatures before catastrophic death. Recognizing these saves your microcontroller and your motors.

1. Overheat (Thermal Shutdown)

Symptom: The IC casing is too hot to touch (>100°C), and the motor randomly stops and starts every few seconds.
Cause: The L293D features internal thermal shutdown. When the silicon junction exceeds ~150°C, it cuts the outputs. As it cools, it re-enables, creating a start-stop loop.
Fix: You are exceeding the 600mA continuous limit. Reduce the mechanical load, add a heatsink to the ground pins, or upgrade to a MOSFET-based driver.

2. Audible Hum or Whine

Symptom: The motor emits a high-pitched whine, or a low-frequency hum without rotating.
Cause (Whine): Your PWM frequency is in the human hearing range (e.g., 500Hz on a standard Arduino `analogWrite`). The motor coils are physically vibrating at the PWM frequency.
Fix (Whine): Change the timer registers to output a PWM frequency above 20kHz (ultrasonic).
Cause (Hum): The motor is stalling because the L293D cannot deliver the required peak current, or the voltage drop is leaving the motor with insufficient voltage to overcome static friction.
Fix (Hum): Increase the VCC2 supply voltage to compensate for the 1.8V internal drop.

3. Dead Stall (No Thermal Trip)

Symptom: The motor stops under load, the IC is warm but not burning hot, and the logic inputs are still correct.
Cause: Brownout on the logic line. The motor's startup current spike caused a voltage sag on the shared power rail, dropping VCC1 below 4.5V and resetting the internal logic latches.
Fix: Separate the logic power (VCC1) and motor power (VCC2) supplies, tying only their grounds together. Add a 100µF electrolytic capacitor across VCC2 and GND.

The Final Decision Tree: Should You Use the L293D?

Do not default to the L293D simply because it is in your starter kit. Use this decision path to select the correct driver for your specific load profile.

If your project requires...Then choose this driver...Why?
Breadboard prototyping with 6V-12V TT motors, budget < $2, and efficiency doesn't matter.L293DDIP-16 package fits standard breadboards; internal diodes save wiring time.
Battery-powered robots (LiPo/Li-ion), 2.7V to 10.8V logic, continuous loads up to 1.5A.DRV8833 or TB6612FNGMOSFET outputs drop only ~0.4V, doubling battery life and eliminating heat issues. (Pololu DRV8833 Carrier)
NEMA 17 Stepper motors for CNC, 3D printers, or precision robotics requiring > 1.5A per phase.A4988 or DRV8825The L293D lacks microstepping and current-chopping. These drivers actively limit current to prevent stepper coil burnout.
High-torque 12V/24V DC motors drawing 5A to 30A (e.g., wheelchair motors, winches).BTS7960 or discrete MOSFET H-BridgeThe L293D will instantly vaporize at these currents. You need a high-amperage module with massive heatsinks.
The Default Recommendation: If you are building a permanent, battery-operated mobile robot or an ESP32 IoT device, skip the L293D and buy a DRV8833 or TB6612FNG breakout board. The L293D's 1.8V voltage drop will cripple your torque on 3.7V LiPo cells and drain your battery 30% faster. Reserve the L293D strictly for 12V desktop learning environments where heat and inefficiency are acceptable trade-offs for easy breadboard insertion.