For light-duty hobbyist positioning tasks under 2.5 kg-cm, the micro servo motor (Arduino compatible) like the TowerPro SG90 or MG90S is the default choice. These actuators operate on standard 50Hz PWM (500-2400µs pulse widths) and integrate a built-in potentiometer, DC motor, and gearbox into a single 9-gram package. However, the most common point of failure in embedded projects isn't the C++ code—it's the power delivery. Never run more than one micro servo directly from the Arduino Uno's onboard 5V regulator; the inrush current during startup will pull the rail down and trigger a brownout reset, endlessly rebooting your microcontroller.

Micro Servo vs. Stepper vs. DC: Which Fits Your Load Profile?

Choosing the right actuator requires matching the motor's torque curve and control topology to your mechanical load. Beginners often treat steppers and servos as interchangeable positioners, but their underlying physics dictate entirely different use cases. A micro servo is a closed-loop system: it reads its own output shaft position via an internal potentiometer and adjusts the H-bridge drive to correct errors. A stepper is open-loop: it moves in discrete magnetic steps and assumes the load followed. If a stepper misses a step due to a load spike, the controller never knows, and your positional accuracy is permanently lost until you re-home.

Use the comparison matrix below to select the correct motor topology for your specific mechanical profile.

Motor Type Torque Curve & Profile Control Needs & Feedback Typical Cost (USD) Best Load Profile
Micro Servo (SG90/MG90S) High stall torque at zero RPM; drops off at speed. Holds position actively. 50Hz PWM signal. Closed-loop (internal pot). No external driver needed. $2.00 - $6.00 RC linkages, pan/tilt camera mounts, robotic grippers, throttle valves.
NEMA 17 Stepper High holding torque; relatively flat torque curve up to mid-range RPM. Step/Dir pulses via driver (A4988/TMC2209). Open-loop (unless using encoders). $12.00 - $25.00 3D printer axes, CNC routers, precision conveyors, linear actuators.
Coreless DC Motor Peak torque at stall; linear drop-off to zero torque at no-load max RPM. H-Bridge for speed/direction. Requires external encoder for position control. $5.00 - $15.00 Drive wheels, continuous rotation conveyors, high-speed spindles.
Brushless DC (BLDC) High efficiency, flat torque curve, excellent thermal dissipation. 3-phase ESC with Hall sensors or sensorless back-EMF zero-crossing detection. $20.00 - $60.00+ Drones, high-speed cooling fans, electric skateboards, gimbals.

Sizing Rule of Thumb and Micro Servo Specifications

Micro servos are categorized by their stall torque, usually measured in kg-cm or oz-in at 4.8V to 6.0V. Stall torque is the maximum force the servo can exert before the gearbox physically locks or the motor stalls. In practice, you should never design a mechanism that requires the servo to operate continuously near its stall torque. Doing so will cause the internal DC motor to draw maximum current, rapidly overheating the windings and melting the plastic gear teeth.

Here is a spec-sheet breakdown of the three most common micro and standard servos used in Arduino prototyping:

Model Stall Torque (4.8V) Gear Material Pulse Width Range Dead Band Weight
TowerPro SG90 1.8 kg-cm Nylon (Plastic) 500 - 2400 µs 10 µs 9g
TowerPro MG90S 2.2 kg-cm Brass/Steel (Metal) 500 - 2400 µs 5 µs 13.4g
DS3218 (20kg Digital) 20.0 kg-cm Hardened Steel 500 - 2500 µs 2 µs 60g
Sizing Rule of Thumb: Always apply a 2x to 3x safety factor to your calculated static load. Dynamic loads (acceleration, vibration, and external shocks) can瞬间 multiply the torque requirement. If your static calculation demands 1.0 kg-cm, select a servo rated for at least 2.0 kg-cm.

Worked Load Example: Pan/Tilt Camera Mount

Suppose you are building a pan/tilt mechanism for a 150g ESP32-CAM module. The camera's center of mass is mounted 4 cm away from the servo's output shaft pivot point.

  1. Calculate Force: Mass × Gravity = 0.15 kg × 9.81 m/s² = 1.47 Newtons.
  2. Calculate Static Torque: Force × Distance = 1.47 N × 0.04 m = 0.0588 N·m.
  3. Convert to kg-cm: 0.0588 N·m ÷ 0.0980665 = 0.6 kg-cm.
  4. Apply Safety Factor: 0.6 kg-cm × 2.0 (dynamic safety factor) = 1.2 kg-cm required.

The SG90 (1.8 kg-cm) easily handles this load. However, if you upgrade to a heavier 300g action camera on a 6 cm arm, the required torque jumps to 3.6 kg-cm. The SG90 and MG90S will both strip their gears under this load; you must step up to a larger digital servo like the DS3218 or redesign the arm with a counterweight to reduce the moment arm.

Wiring, Terminal Identification, and Power Delivery

Micro servos utilize a standard 3-pin JR/Futaba connector. While wire colors can occasionally vary by manufacturer, the industry standard pinout is:

  • Signal (PWM): Orange or Yellow wire. Carries the 50Hz control pulse.
  • VCC (Power): Red wire. Nominally 4.8V to 6.0V DC.
  • GND (Ground): Brown or Black wire. The common return path.

When wiring a micro servo motor to an Arduino, the most critical rule is establishing a common ground. If you power the servo from an external 5V/6V battery pack or buck converter, you must tie the battery's GND directly to the Arduino's GND. Without this shared reference plane, the PWM signal from the Arduino's GPIO pin has no voltage baseline, causing the servo to interpret electrical noise as position commands and spin violently out of control.

ESP32 Logic Level Warning: Standard Arduino Uno pins output 5V logic, which perfectly matches the SG90's expectations. The ESP32 outputs 3.3V logic. While most modern micro servos will reliably trigger on a 3.3V HIGH signal, some older or strict 5V-only models will fail to register the pulse, resulting in a dead servo. If your ESP32 project exhibits unresponsive servos, insert a logic level shifter or use a dedicated PCA9685 I2C servo driver board, which handles the 5V PWM generation independently.

For power delivery, assume a single SG90 draws roughly 10mA at idle, but can spike to 500mA - 700mA during a heavy stall or rapid direction reversal. If your project uses two or more servos, bypass the Arduino's linear regulator entirely. Use a dedicated UBEC (Universal Battery Elimination Circuit) or a buck converter set to 5.0V, wired directly to the servo power rails, capable of sourcing at least 1.5A per servo.

Failure Signatures: Hum, Overheat, and Stall Diagnostics

Servos rarely fail without warning. Because they contain a closed-loop feedback system, mechanical and electrical faults manifest as distinct physical and audible signatures. Recognizing these symptoms early will save your gearbox and your microcontroller.

1. High-Frequency Jitter or Twitching

Symptom: The servo shaft vibrates rapidly back and forth by 1 or 2 degrees, even when the Arduino code is commanding a static position.
Cause: This is almost always a power quality or grounding issue. Micro servos are highly sensitive to voltage ripple on the VCC rail. If you are powering the servo from the same 5V rail as a WiFi module (like an ESP8266 transmitting data), the RF transmission causes massive voltage sags. The servo's internal comparator misreads the potentiometer voltage during the sag, thinks it has moved out of position, and aggressively corrects.
Fix: Add a 100µF to 470µF electrolytic capacitor directly across the VCC and GND wires at the servo connector to smooth out transient current spikes. Ensure your external PSU has adequate current headroom.

2. Continuous Humming Without Movement

Symptom: The servo emits a loud buzzing or humming sound, but the output shaft does not rotate, or it rotates erratically.
Cause: The servo is in a stall condition. The mechanical load exceeds the stall torque, or the internal potentiometer is coated in carbon dust (common in cheap SG90s after heavy use). If the pot is dirty, the servo's internal circuitry cannot determine the true shaft position, so it continuously pulses the motor trying to find the target.
Fix: Remove the load and test the servo bare. If it still hums and hunts, the potentiometer is degraded. For critical applications, replace the unit with a metal-gear MG90S or a digital servo, which uses magnetic encoders or higher-grade pots and tighter dead-bands (as noted in the Pololu RC Servo Guide).

3. Overheating and 'Hot Smell'

Symptom: The servo casing becomes too hot to touch, accompanied by a distinct melting plastic or ozone odor.
Cause: Prolonged stalling. When a DC motor stalls, it loses back-EMF and acts purely as a low-resistance short circuit. A micro servo can pull over 700mA continuously when stalled. The internal H-bridge transistors and the motor windings will rapidly overheat, eventually melting the plastic gear teeth or burning out the driver IC.
Fix: Implement a software timeout. If using the Arduino Servo Library, use servo.detach() immediately after the servo reaches its target position in applications where holding torque is not strictly required (e.g., a latch mechanism). This cuts power to the internal motor, eliminating idle current draw and preventing thermal runaway.