The 28BYJ-48 Stepper Motor: Capabilities, Limits, and Load Profiles
The 28BYJ-48 is a 5V unipolar stepper motor featuring an internal 1/63.684 planetary gear reduction. Out of the box, it delivers roughly 34.3 N·cm (350 g·cm) of holding torque at the output shaft and resolves 4096 steps per revolution in half-step mode. If you are asking which motor type fits a specific load profile, the 28BYJ-48 is strictly suited for low-speed, high-precision, low-inertia applications like camera pan-tilt rigs, automated window blinds, or slow-rotation sensor sweeps. It is entirely unsuited for high-speed CNC routing, 3D printer extruders, or heavy-load conveyor belts.
Because it is unipolar and heavily geared, it trades speed for positional accuracy at a remarkably low price point (typically under $4 for the motor and driver bundle). However, treating it like a standard bipolar NEMA motor or a closed-loop servo will lead to immediate frustration. Understanding its exact torque curve, wiring topology, and thermal limits is the difference between a reliable embedded project and a melted driver board.
Motor Type Comparison: 28BYJ-48 vs NEMA 17 vs Micro Servos
Choosing the right actuator requires looking past peak torque and examining the torque curve and control overhead. Below is a direct comparison of the 28BYJ-48 against the standard NEMA 17 bipolar stepper and the ubiquitous SG90 micro servo.
| Motor Type | Peak / Holding Torque | Torque Curve Behavior | Control Needs | Typical Cost |
|---|---|---|---|---|
| 28BYJ-48 (Geared Unipolar) | ~34.3 N·cm (at shaft) | High at stall, drops precipitously above 15 RPM. Gear backlash introduces ~0.5° dead zone. | ULN2003 Darlington array. Simple digital GPIO sequencing. | $2 - $4 |
| NEMA 17 (Bipolar Hybrid) | 40 - 55 N·cm (no gears) | Flat torque curve up to 300+ RPM. Excellent dynamic response. | A4988, DRV8825, or TMC2209 with step/dir interface and current limiting. | $12 - $25 |
| SG90 Micro Servo | ~1.8 N·m (18 N·cm) | High holding torque via internal potentiometer feedback, but strips plastic gears under shock loads. | PWM signal (50Hz). Requires closed-loop library mapping. | $2 - $5 |
When to choose the 28BYJ-48: Choose it when you need multi-turn absolute positioning without a homing switch, your load is light, and your speed requirement is under 10 RPM.
When to choose NEMA 17: Choose it for 3D printers, CNC machines, or any application requiring high speed and high dynamic torque.
When to choose a Servo: Choose it for robotic arms or RC steering where you need fast, 180-degree closed-loop sweeps and do not require continuous 360-degree rotation.
Wiring, Pinout, and Driver Selection
The 28BYJ-48 uses a 5-pin JST connector. Unlike 4-wire bipolar steppers, the 5th wire is a center-tap for the unipolar coil windings. Here is the standard terminal identification:
- Red (Pin 1): VCC / Common Center-Tap. Connects to the positive supply (5V or 12V depending on motor variant).
- Pink (Pin 2): Coil 1A
- Orange (Pin 3): Coil 2A
- Yellow (Pin 4): Coil 1B
- Blue (Pin 5): Coil 2B
The standard driver demanded by this motor is the ULN2003, a Darlington transistor array that sinks current from the four phase wires to ground. It is robust, cheap, and easily driven by 3.3V or 5V microcontrollers like the ESP32 or Arduino Uno.
For advanced users, you can modify the 28BYJ-48 to act as a bipolar stepper. By opening the blue plastic housing and carefully cutting the center-tap trace on the PCB with an X-Acto knife, you isolate the coils. This allows you to wire it as a 4-wire bipolar motor and drive it with an A4988 or TMC2209 driver for true microstepping, though you will lose some overall torque due to the unipolar winding geometry.
Sizing Rule of Thumb and Worked Load Example
Stepper motors suffer from a severe drop-off in dynamic torque as speed increases. According to Adafruit's motor selection guidelines, relying solely on holding torque specs will result in a stalled system the moment the rotor starts moving.
The 50% Dynamic Rule: Never demand more than 50% of a stepper’s rated dynamic torque at your target operating speed. For the 28BYJ-48, the dynamic torque at 10 RPM is roughly 15 N·cm. Therefore, your maximum continuous load torque should not exceed 7.5 N·cm.
Worked Load Example: Rotating a Webcam on a Pan-Tilt Arm
Suppose you are building a desk camera mount. The webcam weighs 250g (0.25 kg) and its center of mass sits 4 cm (0.04 m) from the 28BYJ-48 output shaft.
- Calculate Force: F = mass × gravity = 0.25 kg × 9.81 m/s² = 2.45 N.
- Calculate Required Torque: Torque = Force × radius = 2.45 N × 0.04 m = 0.098 N·m (or 9.8 N·cm).
In this scenario, the required torque (9.8 N·cm) exceeds our 50% safety margin (7.5 N·cm). If you attempt to pan the camera at 15 RPM, the motor will likely skip steps. To fix this, you must either move the camera closer to the shaft (reducing the radius to 2.5 cm, dropping torque to 6.1 N·cm), add a counterweight to balance the arm, or slow the pan speed to under 5 RPM where dynamic torque is higher.
Failure Signatures: Diagnosing Hum, Overheat, and Stall
When a 28BYJ-48 system fails, it rarely fails silently. Here is how to read the physical symptoms and apply the correct fix.
1. Humming or Buzzing (Stalled Rotor)
Symptom: The motor vibrates and hums but the output shaft does not turn.
Cause: The load exceeds the motor's stall torque, or the step rate is too high for the rotor inertia to catch up. The coils are energizing, but the magnetic field is slipping past the rotor teeth.
Fix: Implement acceleration ramping in your code. Using the AccelStepper library, set a conservative max speed and a low acceleration value (e.g., setMaxSpeed(500); setAcceleration(100);) to allow the rotor to build momentum gradually.
2. Overheating Motor Housing
Symptom: The blue aluminum can is too hot to touch (>60°C) after a few minutes of holding position.
Cause: The ULN2003 driver has no active current limiting. When the motor is stationary but energized, it continuously draws maximum current, dumping roughly 1.2W of heat into a small, unventilated housing.
Fix: De-energize the coils when the motor is not moving. In your Arduino/ESP32 code, set all four control pins to LOW immediately after the movement sequence completes. You will lose holding torque, but you will save the motor's internal plastic gears from melting.
3. Missed Steps and Drift
Symptom: The motor completes a movement, but over multiple cycles, the final position drifts from the expected angle.
Cause: Steppers are open-loop. If the load spikes (e.g., a wire snags on the camera mount), the motor skips steps, and the microcontroller has no way of knowing. Additionally, the 28BYJ-48 has internal gear backlash.
Fix: Always approach your target position from the same direction. If you need to move from 90° to 45°, overshoot to 40° and then move forward to 45° to take up the mechanical slack in the planetary gears.
Frequently Asked Questions
Why does my 28BYJ-48 stepper motor not complete a full 360-degree rotation in code?
This is the most common trap for beginners. Most tutorials and library examples assume the 28BYJ-48 has a 1/64 gear reduction, calculating 4096 steps per revolution (512 × 8). However, the actual physical gear ratio is 1/63.68395. To achieve a true 360-degree rotation, you must command exactly 4076 steps in half-step mode. If you use 4096, your motor will drift by about 1.5 degrees every full rotation, which compounds into massive errors over multiple turns.
Can I run a 5V 28BYJ-48 stepper on a 12V power supply?
Technically yes, but not by wiring it directly to 12V through a standard ULN2003. Applying 12V to a 5V winding will cause the current to exceed the wire's thermal limits, melting the internal coils or the plastic gear train within minutes. If you want to run it at 12V for higher torque and speed, you must use a chopper driver (like an A4988) configured to limit the current to ~200mA, or implement high-frequency PWM current limiting in your microcontroller code. For 99% of hobbyist projects, stick to a 5V supply.
How do I wire the 28BYJ-48 to an ESP32 without frying the GPIO pins?
The ESP32 operates at 3.3V logic, while the standard ULN2003 board often expects 5V logic to fully saturate the Darlington transistors. Fortunately, the ULN2003 will usually trigger at 3.3V, but it is operating on the edge of its threshold. For reliable operation, power the ULN2003 VCC pin with 5V, but connect the ESP32 GPIO pins directly to the IN1-IN4 logic inputs. The ULN2003 inputs have internal pull-down resistors and are high-impedance, meaning the ESP32 will not source dangerous current back into its 3.3V regulators. Just ensure the grounds are tied together.






