The L293D Motor Driver: Capabilities and Hard Limits
The L293D is a dual H-bridge motor driver IC built on a bipolar Darlington transistor output stage. It is designed to drive two small brushed DC motors (up to 600mA continuous per channel) or one 5-wire unipolar stepper motor. The 'D' in the part number indicates integrated flyback clamp diodes, which protects the silicon from inductive voltage spikes when the motor coils are switched off—a feature that saves you from soldering external 1N4007 diodes across your motor terminals.
While it is a staple in legacy Arduino starter kits, its Darlington architecture introduces a significant voltage drop and thermal penalty that modern MOSFET-based drivers have largely eliminated. Before wiring one up, you need to know its exact electrical boundaries.
| Parameter | Value | Practical Implication |
|---|---|---|
| Logic Supply (VCC1) | 4.5V to 7V | Must be tied to your microcontroller's 5V or 3.3V logic level. |
| Motor Supply (VCC2) | 4.5V to 36V | Allows driving higher-voltage actuators, but current limits still apply. |
| Continuous Current (per ch) | 600mA | Requires adequate heatsinking via the PCB ground plane. |
| Peak Current (per ch) | 1.2A | Only sustainable for a few milliseconds (e.g., motor startup). |
| Output Voltage Drop (Vce_sat) | 1.4V typical (up to 2.6V) | You lose at least 1.4V of your battery voltage to heat inside the IC. |
Motor Type Compatibility Matrix
The L293D is not a universal motor controller. It outputs raw, bidirectional DC voltage (or stepped sequences). It cannot generate the precise 50Hz PWM control signals required by standard RC servos, nor can it perform the current-chopping microstepping required by modern bipolar steppers. Here is how it maps to common hobbyist loads.
| Motor Type | Torque Curve Profile | Control Needs | Typical Cost | L293D Compatibility |
|---|---|---|---|---|
| Brushed DC (e.g., TT Gearmotor) | Max torque at stall, drops linearly with speed | H-Bridge for direction; PWM for speed | $1 - $3 | Excellent (Ideal for <500mA loads) |
| Unipolar Stepper (e.g., 28BYJ-48) | High holding torque, detent torque when unpowered | 4-step or 8-step sequential coil energization | $2 - $5 | Good (Can drive center-tapped coils directly) |
| Bipolar Stepper (e.g., NEMA 17) | Very high holding and dynamic torque | Current-regulated chopper drive (H-bridge alone will overheat coils) | $10 - $20 | Poor (Use a DRV8825 or A4988 instead) |
| RC Servo (e.g., SG90) | High torque at specific angular positions | 50Hz PWM signal with 1-2ms pulse width | $2 - $8 | None (Connect directly to MCU GPIO PWM pins) |
Pinout and Wiring: Terminal Identification
Correctly identifying the split power rails is the most common stumbling block when wiring the L293D. The IC requires two separate positive voltage sources, unified by a common ground.
- VCC1 (Pin 16): Logic power. Connect to your Arduino/ESP32 5V pin. Do not exceed 7V, or you will fry the internal logic gates.
- VCC2 (Pin 8): Motor power. Connect to your battery pack or bench supply (up to 36V). This is the high-current rail.
- EN1, EN2 (Pins 1, 9): Enable pins. Pull HIGH to activate the respective H-bridge. Route these to MCU PWM pins if you need speed control.
- IN1-IN4 (Pins 2, 7, 10, 15): Logic inputs. Drive these HIGH/LOW to set the current flow direction through OUT1-OUT4.
- OUT1-OUT4 (Pins 3, 6, 11, 14): Motor outputs. Connect directly to your motor terminals.
- GND (Pins 4, 5, 12, 13): Ground and Heat Sink. These must be tied to the ground of both VCC1 and VCC2. On a custom PCB, pour a copper ground plane directly under these pins to pull heat away from the silicon die.
Sizing Rule of Thumb and Worked Load Example
The golden rule for sizing an L293D circuit is to account for the Darlington voltage drop. Because the output stage uses two bipolar junction transistors in series, you lose roughly 1.4V (and up to 2.6V at higher currents or temperatures) between VCC2 and the motor terminal.
Worked Load Example:
You are building a small rover using two 6V TT gearmotors. The motors draw 200mA at free-run speed and have a stall current of 1.5A. You power VCC2 with a 4xAA battery pack (6V nominal).
- Calculate Motor Voltage: 6V (Battery) - 1.4V (L293D Drop) = 4.6V at the motor.
- Evaluate Starting Torque: TT motors often struggle to overcome static friction below 4V. At 4.6V, your rover will be sluggish on carpet.
- Calculate Heat Dissipation: P = V_drop × I_load. 1.4V × 0.2A = 0.28 Watts per channel. With two motors running, the IC is dissipating 0.56W. In a plastic DIP package without forced air, this will raise the case temperature to roughly 50°C-60°C—hot to the touch, but within the 150°C junction limit.
- Check Stall Condition: If a wheel jams, current spikes toward 1.5A. The L293D's internal thermal shutdown will trigger at roughly 1.2A-1.5A, cutting power to prevent a fire. However, the voltage drop at 1.2A spikes to ~2.6V, wasting over 3 Watts as heat instantly.
Failure Signatures: Diagnosing Hum, Overheat, and Stall
When an L293D circuit misbehaves, the physical symptoms point directly to the underlying electrical fault.
1. The IC is Too Hot to Touch (Overheat)
Cause: Exceeding the continuous current limit or inadequate grounding of the thermal pins.
Fix: Measure the current with a multimeter in series with the motor. If it reads >400mA on a breadboard, you must reduce the mechanical load, increase the gear ratio, or upgrade the driver. Verify that pins 4, 5, 12, and 13 have a low-resistance path (< 1 ohm) to your battery's negative terminal.
2. Motor Emits a High-Pitched Hum but Won't Turn (Stall/Brownout)
Cause: The motor is receiving enough voltage to energize the coils (creating magnetic hum) but not enough current to break static friction, often causing the MCU to brownout and reset if sharing a poorly decoupled power rail.
Fix: Separate the logic and motor power supplies completely. Add a 100µF electrolytic capacitor and a 0.1µF ceramic capacitor across VCC2 and GND as close to Pin 8 as possible to handle inrush current demands.
3. Audible Whining During Speed Control (PWM Acoustic Noise)
Cause: The PWM frequency fed to the Enable pins is too low (typically < 1kHz), causing the motor coils and the internal transistors to vibrate at an audible frequency.
Fix: Increase the PWM frequency on your microcontroller. For an Arduino Uno, change Timer 1 or Timer 2 prescalers to push the PWM frequency above 20kHz, moving it out of the human hearing range. (See All About Circuits for timer manipulation guides).
Decision Tree: Should You Use the L293D or a Modern Alternative?
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 Load Profile Is... | Then Choose This Driver | Why? |
|---|---|---|
| 5V to 12V Brushed DC motors drawing < 1.2A continuous | TB6612FNG (Pololu Carrier) | MOSFET output stage drops only ~0.5V. Runs cool, delivers full battery voltage to the motor, and handles 1.2A continuous easily. |
| Single high-current Brushed DC motor (up to 3.6A) without direction control needs | DRV8871 | Single H-bridge, high current, minimal heat dissipation, simple PWM speed control. |
| 5-wire Unipolar Stepper (28BYJ-48) at 5V | ULN2003 or L293D | ULN2003 is cheaper and purpose-built for unipolar sequences. L293D works but is overkill and wastes board space. |
| 24V to 36V low-current (<500mA) linear actuators or relays | L293D | Modern MOSFET drivers often cap out at 15V. The L293D's 36V VCC2 limit makes it one of the few cheap hobbyist ICs that handles higher voltages safely. |
The Final Verdict
For 90% of new 5V-12V brushed DC robotics projects, the default pick is the TB6612FNG. Its MOSFET architecture eliminates the crippling voltage drop and thermal throttling inherent to the L293D's Darlington design. Reserve the L293D strictly for high-voltage (24V+) low-current actuator control, direct replacements on legacy PCBs, or when you specifically need to drive a 5-wire unipolar stepper and already have the IC in your bin.






