The 28BYJ-48 is a 5V unipolar stepper motor producing roughly 34 mN·m (0.48 kg·cm) of holding torque. It is the default choice for low-load, low-speed precision tasks like automated blinds, camera pan-tilt mounts, and sensor positioning, typically costing between $2 and $4 per unit. However, it is entirely unsuited for CNC routing, 3D printing, or high-speed robotics. If your load demands more than 15 mN·m of dynamic torque or speeds above 15 RPM at the output shaft, you need to upgrade to a NEMA 17 bipolar stepper.
The 28BYJ-48 Spec Sheet and Wiring Identification
Before wiring this motor to a microcontroller, you need to understand its internal gearing and the reality of its step count. The 28BYJ-48 is not a direct-drive stepper; it contains an internal spur gear reduction. While the datasheet often claims a 1:64 gear ratio, the actual physical ratio is 1:63.68395. This means that while a standard 64-step-per-revolution motor requires 4096 steps for a full 360-degree output rotation, the 28BYJ-48 actually requires approximately 4076 steps. If you command exactly 4096 steps in a repeating loop, your mechanism will drift by about 1.7 degrees per revolution.
| Parameter | Value | Practical Implication |
|---|---|---|
| Nominal Voltage | 5V DC | Can be driven directly from Arduino 5V rail for light loads; use external 5V PSU for continuous duty. |
| Holding Torque | ~34 mN·m | Maximum static load before shaft slips. Dynamic (pull-out) torque is significantly lower. |
| Current Draw | ~160 mA per phase | Total draw ~320 mA when two phases are energized. Exceeds standard USB power limits if driven directly. |
| Step Angle (Output) | 5.625° / 63.68 | Results in ~4076 steps per output revolution in full-step mode. |
| Coil Resistance | 50 Ω per half-coil | High resistance limits current, keeping heat low but restricting high-speed torque. |
Wiring and Terminal Identification
The motor terminates in a 5-pin JST connector. It is a unipolar motor, meaning it has a center tap for each of the two internal coils.
- Red (Pin 3): Common center tap. Connects to VCC (5V).
- Orange (Pin 1) & Yellow (Pin 2): Coil 1 (Phase A). Connect to driver outputs 1 and 2.
- Pink (Pin 4) & Blue (Pin 5): Coil 2 (Phase B). Connect to driver outputs 3 and 4.
Motor Type Comparison: 28BYJ-48 vs. NEMA 17 vs. Micro Servos
A common mistake in embedded projects is treating steppers and servos as interchangeable. They are not. A servo (like the SG90) uses an internal potentiometer for closed-loop absolute positioning—it knows exactly where it is upon power-up. A stepper motor is open-loop; it assumes every electrical pulse results in physical movement. If a stepper stalls, the microcontroller has no way of knowing it missed a step. You must choose based on your load profile and positioning needs.
| Motor Type | Peak Torque | Speed/Torque Curve | Control Hardware | Typical Cost |
|---|---|---|---|---|
| 28BYJ-48 (Unipolar Stepper) | 34 mN·m | High torque at stall, drops sharply above 15 RPM output speed. | ULN2003 Darlington Array | $2 - $4 |
| NEMA 17 (Bipolar Stepper) | 400 - 500 mN·m | Flat torque curve up to 300+ RPM when driven with chopper drivers. | A4988, DRV8825, or TMC2209 | $10 - $18 |
| SG90 / MG996R (RC Servo) | 18 mN·m (SG90) to 1300 mN·m (MG996R) | N/A (Position controlled, not continuous rotation speed). | Direct PWM from Microcontroller | $3 - $15 |
The 28BYJ-48 wins strictly on cost and ease of integration for slow, continuous, multi-revolution tasks where a servo's limited 180-degree mechanical sweep would be a dealbreaker. According to Adafruit's comprehensive guide on stepper motors, unipolar motors like the 28BYJ-48 are ideal for beginners because they do not require complex current-chopping driver boards, but they sacrifice high-speed performance to achieve that simplicity.
Sizing Rule of Thumb and Worked Load Example
The golden rule for stepper motor sizing is the 50% Torque Margin. Because stepper motors suffer from mid-range resonance and lose torque as speed increases, your maximum required dynamic load should never exceed 50% of the motor's rated holding torque. For the 28BYJ-48, this means your load must demand no more than 17 mN·m of torque at the operating speed.
Worked Example: Automated Camera Slider
Suppose you are building a motorized pulley system to slide a 200g (0.2 kg) smartphone gimbal along a horizontal rail. The drive pulley has a radius of 2.5 cm (0.025 m).
- Calculate Force: On a horizontal rail with low-friction bearings, the primary force to overcome is inertia and friction. Assuming a conservative friction coefficient of 0.1, the friction force is F = μ × m × g = 0.1 × 0.2 kg × 9.81 m/s² = 0.196 N.
- Calculate Required Torque: Torque = Force × Radius = 0.196 N × 0.025 m = 0.0049 N·m (4.9 mN·m).
- Apply the 50% Rule: 4.9 mN·m is well below the 17 mN·m safe operating limit of the 28BYJ-48.
Verdict: The 28BYJ-48 is perfectly sized for this load. However, if you were trying to lift that same 200g camera vertically against gravity (Force = 1.96 N, Torque = 49 mN·m), the 28BYJ-48 would immediately stall. You would need to upgrade to a NEMA 17 or add a high-ratio worm gear.
Driver Demands and Failure Signatures
Because the 28BYJ-48 is a unipolar motor, it demands a specific type of driver: a sink-current array. The universal standard is the ULN2003 Darlington transistor array. You cannot use standard bipolar chopper drivers like the A4988 or TMC2209 out of the box. While it is physically possible to open the motor casing and cut the PCB trace connecting the red wire to the center taps to convert it to a bipolar motor, the high 50Ω coil resistance makes it perform poorly on modern chopper drivers. Stick to the ULN2003.
When debugging a 28BYJ-48 circuit, listen and feel for these specific failure signatures:
- The 'Hum' Without Movement: The motor vibrates and hums but the shaft doesn't turn. This means the microcontroller is sending pulses, but the start frequency is too high for the load's inertia, or the phase sequence is wrong. Fix: Lower the RPM in your code to 5 RPM to start, then ramp up.
- Overheating Driver Board: The ULN2003 IC is too hot to touch (>60°C). The ULN2003 has no automatic current limiting; it feeds full 5V to the coils continuously when a pin is HIGH. Fix: In your Arduino code, ensure you write all four control pins
LOWimmediately after the motor reaches its target position to cut the holding current. - High-Pitched Whine and Stalling (Resonance): The motor runs fine at 5 RPM, but stalls when you command 12 to 18 RPM. Unipolar steppers suffer from severe mid-range mechanical resonance. Fix: Implement software microstepping (half-stepping) in your code sequence, or add physical dampening (like a rubber grommet) to the motor mount.
Decision Tree: Should You Use the 28BYJ-48?
Do not default to the 28BYJ-48 just because it is cheap and comes in the Arduino starter kit. Run your project requirements through this decision matrix to select the correct actuator.
| Project Condition | If YES | If NO |
|---|---|---|
| Is the dynamic load < 15 mN·m? | Proceed to next question. | STOP. Pick a NEMA 17 Stepper + A4988 driver. |
| Is the required speed < 15 RPM? | Proceed to next question. | STOP. Pick a NEMA 17 Stepper + TMC2209 driver. |
| Do you need multi-revolution continuous rotation? | Proceed to next question. | STOP. Pick an MG996R Metal Gear Servo. |
| Is the budget strictly under $5 per axis? | Pick the 28BYJ-48. | Pick a NEMA 14 or NEMA 17 for reliability. |






