How “Rotation per Pulse” Specification Works in Digital Micro Servos

Common Specifications and Parameters / Visits:5

If you’ve ever ripped open a tiny 9g plastic gearbox, stared at the three wires (orange, red, brown), and wondered why the datasheet says “0.1ms pulse = 0°” and “0.5ms pulse = 180°” — you’re not alone. The real magic (and confusion) lives in a spec called Rotation per Pulse (RPP). Unlike stepper motors, where one pulse equals one fixed angular step, a digital micro servo uses pulses as timing references, not step counts. But here’s the kicker: in the world of digital servos, the phrase “rotation per pulse” is often misused, misunderstood, or simply hidden behind marketing fluff. Let’s tear it apart.

The Core Concept: Pulse Width, Not Pulse Count

First, kill the stepper mindset. A micro servo does not rotate a fixed number of degrees per pulse. Instead, it rotates to a target angle based on the width (duration) of a repeating pulse. The typical hobby servo uses a 50Hz refresh rate, meaning a pulse arrives every 20 milliseconds. The width of that pulse — usually between 500µs and 2500µs — maps linearly to the output shaft angle.

So when someone says “rotation per pulse,” they actually mean “rotation per pulse-width change.” For example:

  • 500µs → 0°
  • 1500µs → 90° (neutral)
  • 2500µs → 180°

But digital micro servos (like the SG90, MG90S, or the newer digital ones with 16-bit processors) handle this differently from analog servos. That’s where the spec gets spicy.

Why Digital Changes the Game

Analog servos use a simple comparator chip. The incoming pulse width is compared to a feedback potentiometer voltage. If they don’t match, the motor turns until they do. Simple, but slow and jittery.

Digital micro servos, on the other hand, sample the incoming pulse at a much higher frequency — often 300Hz to 500Hz internal update rate, even if the external signal is still 50Hz. They use a microcontroller to read the pulse width, then drive the motor with a PWM signal at a higher frequency (e.g., 30kHz) for smoother torque. This means the “rotation per pulse” is not just about the external pulse; it’s about how the internal firmware interprets that pulse and then subdivides the movement into micro-steps.

The Hidden Sub-Step Resolution

Here’s the part most hobbyists miss: the deadband and resolution of a digital servo are far better than analog. A typical analog servo has a deadband of 5µs to 10µs, meaning a pulse width change smaller than that produces no movement. A digital micro servo can have a deadband of 1µs or less. So the “rotation per pulse” spec is really a measure of minimum incremental angular change per unit of pulse width change.

Let’s do the math:

  • Usable pulse range: 500µs to 2500µs = 2000µs span
  • Angular range: 180°
  • So: 180° / 2000µs = 0.09° per 1µs pulse change

That means if your controller can output a 1µs change in pulse width, a digital micro servo can theoretically rotate 0.09°. But the actual spec sheet might say “0.1° per 1µs” — close enough. This is your true rotation per pulse.

Sub-Title: The 16-Bit vs 8-Bit Microcontroller Effect

Not all digital micro servos are created equal. The internal microcontroller’s timer resolution dictates how finely it can measure the incoming pulse. An 8-bit timer (common in cheap SG90 clones) can only divide a 20ms period into 256 counts. That’s about 78µs per count — terrible. But those cheap servos don’t actually use digital processing; they’re analog with a digital label.

A true digital micro servo uses a 16-bit timer, which gives 65536 counts over 20ms. That’s about 0.3µs per count. Now the rotation per pulse becomes:

  • 0.3µs × 0.09°/µs = 0.027° per timer count

That’s sub-tenth-of-a-degree precision. You won’t feel it, but a camera gimbal or a robotic finger will.

The Refresh Rate Trap

Here’s a trap: many digital micro servos do not require a 50Hz refresh. Some accept up to 500Hz (2ms period). If you send a 1500µs pulse at 500Hz, the pulse occupies 75% of the period. The servo’s internal firmware must handle that. If it does, you get faster response. But the rotation per pulse spec doesn’t change — it’s still the same angular mapping. What changes is latency and torque ripple.

So when you see a spec like “0.1ms pulse = 0°, 0.5ms pulse = 180°” on a digital micro servo, it’s actually using a narrower pulse range than the standard 1ms to 2ms. For example, some digital servos use 500µs to 2500µs, but others use 400µs to 2000µs. That changes the rotation per pulse:

  • 180° / (2000µs - 400µs) = 180° / 1600µs = 0.1125° per µs

Slightly finer. But the catch: your controller must be able to generate that exact pulse width without jitter. A generic Arduino delayMicroseconds() has about ±2µs jitter, which at 0.1125°/µs gives ±0.225° error. That’s fine for a toy, but not for a precision pan-tilt system.

Sub-Title: How to Actually Read a Digital Micro Servo Datasheet

Let’s dissect a typical datasheet for a digital micro servo (say, the DS3218 or the Miuzei MG90D). The spec table might look like this:

  • Control System: Digital PWM
  • Pulse Width Range: 500µs ~ 2500µs
  • Operating Angle: 180° ± 5°
  • Deadband: 1µs
  • Rotation per Pulse: 0.09° / µs (calculated, not stated)

You’ll rarely see “rotation per pulse” written explicitly. Instead, you’ll see “Deadband: 1µs” and “Resolution: 0.09°”. That’s your RPP. If the datasheet says “0.1ms pulse = 0°, 0.5ms pulse = 180°,” they’re using a shorthand where the pulse range is 400µs to 2000µs. Don’t assume it’s the same as your other servos.

The Feedback Potentiometer and Its Nonlinearity

Here’s a dirty secret: the rotation per pulse is not perfectly linear across the full 180°. The feedback pot inside a micro servo is a cheap carbon track, and its resistance vs. angle curve can be off by 2-3%. That means at 0° you might get 0.09°/µs, but at 90° you might get 0.11°/µs. Digital servos try to correct this with a firmware lookup table, but cheap ones don’t.

If you’re building a robot arm and need repeatable positioning, you should calibrate the servo manually. Send a pulse width, measure the actual angle with a protractor or encoder, and build your own mapping table. That’s the only way to get true rotation per pulse accuracy.

Sub-Title: The Role of Pulse Timing Jitter in Real-World Performance

Now let’s talk about the elephant in the room: jitter. Your microcontroller sends a pulse every 20ms. But if your code has interrupts or you’re using delay(), the pulse width can vary by ±5µs. On a digital micro servo with a 1µs deadband, that jitter translates into constant micro-oscillations. The servo will buzz and draw more current.

To get stable rotation per pulse, you need:

  1. A hardware PWM timer (not software delays)
  2. A stable power supply (5V ± 0.1V)
  3. A signal isolator if using long wires (over 30cm)

For example, on an STM32 or ESP32, use the LEDC or MCPWM peripheral to generate a 50Hz signal with 16-bit resolution. Set the duty cycle to (pulse_width / 20ms) * 65535. For a 1500µs pulse, that’s (1500 / 20000) * 65535 = 4915. That gives you a resolution of 0.0003° per bit — far beyond the servo’s mechanical capability. But it ensures that the servo’s internal deadband is the only limiting factor.

The “Pulse Stretch” Trick for Digital Servos

Some advanced digital micro servos (like those used in robotics competitions) support a feature called “pulse stretch” or “overdrive”. If you send a pulse wider than 2500µs, the servo interprets it as “go to max speed in that direction” rather than “go to a specific angle.” This is not rotation per pulse — it’s rotation per second at full throttle. But it’s often confused because the datasheet might say “pulse width 500-2500µs for angle, 2500-3000µs for speed control.” The rotation per pulse spec becomes meaningless in this mode because the servo ignores the absolute width and just goes full speed.

Sub-Title: How to Measure Rotation per Pulse Yourself

If you don’t trust the datasheet, here’s a quick bench test:

  1. Mount a 10cm long pointer (like a toothpick) on the servo horn.
  2. Point it at a protractor or use a laser pointer on a wall 2 meters away.
  3. Send a 1000µs pulse. Record the angle.
  4. Send a 1100µs pulse. Record the angle.
  5. Difference in angle / 100µs = your actual rotation per pulse (in °/µs).

Repeat at 1500µs and 2000µs. You’ll likely see a variation of ±0.02°/µs. That’s normal. If you see a variation of ±0.1°/µs, the servo is either broken or it’s not a true digital servo.

The Impact of Load on Rotation per Pulse

Here’s a subtle but critical point: rotation per pulse is a no-load spec. When you attach a load (like a robotic arm), the servo’s internal PID loop has to fight inertia and friction. The actual angular change per pulse will be slightly less, and there will be a small overshoot. Digital servos handle this better because their high-frequency PWM (e.g., 30kHz) allows for faster torque correction. But if you stall the servo, the pulse-to-angle mapping drifts.

For example, a MG90S digital micro servo at 5V and 0.5kg·cm load might have a rotation per pulse of 0.085°/µs instead of 0.09°/µs. That’s a 5% error. If you’re doing open-loop positioning, that’s unacceptable. You need a closed-loop servo (with an external encoder) for that.

Sub-Title: Why “Rotation per Pulse” Doesn’t Matter for Most Hobbyists

Let’s be honest: if you’re building a pan-tilt camera mount, a small robot arm, or a RC car steering linkage, you don’t need 0.02° precision. You need repeatability — the ability to return to the same angle when given the same pulse. Digital micro servos excel at this because their deadband is tiny (1µs vs 5µs for analog). So even if the absolute rotation per pulse is slightly nonlinear, the relative movement is consistent.

But if you’re designing a continuous rotation servo (like the FS90R), the spec changes entirely. A continuous rotation servo doesn’t have a rotation per pulse — it has a speed per pulse. For example, 1500µs = stopped, 1000µs = full speed clockwise, 2000µs = full speed counterclockwise. The “pulse” now controls velocity, not position. So don’t mix those up.

The Future: Closed-Loop Digital Micro Servos with Feedback

The latest trend in micro servos (like the FEETECH FS90 with encoder, or the Dynamixel XL330) is to include a magnetic encoder on the output shaft. These servos report their actual angle back to the controller via a serial bus (UART or TTL). In that case, “rotation per pulse” becomes irrelevant — you just send a target angle (e.g., 45°) and the servo’s internal PID loop handles the rest. The pulse width is only used for compatibility mode.

But for 99% of the cheap digital micro servos you’ll buy on Amazon or AliExpress, the spec is still pulse-width-based. And the “rotation per pulse” is a derived value, not a direct measurement. So when you see that spec, ask yourself: What’s the deadband? What’s the refresh rate? What’s the power supply voltage? Only then does the number make sense.

Sub-Title: Practical Code Example for Precise Pulse Generation

Here’s a quick ESP32 Arduino snippet that uses hardware PWM to get stable rotation per pulse:

cpp

include <esp32-hal-ledc.h>

define SERVO_PIN 13

define PWM_FREQ 50

define PWM_RES 16

void setServoAngle(int angle) { // Map angle (0-180) to pulse width (500-2500us) int pulseus = map(angle, 0, 180, 500, 2500); // Convert to duty cycle (16-bit) uint32t duty = (pulse_us * 65535) / 20000; ledcWrite(0, duty); }

void setup() { ledcSetup(0, PWMFREQ, PWMRES); ledcAttachPin(SERVO_PIN, 0); }

void loop() { setServoAngle(0); // 500us pulse delay(1000); setServoAngle(90); // 1500us pulse delay(1000); setServoAngle(180); // 2500us pulse delay(1000); }

This gives you a jitter-free pulse width with a resolution of about 0.3µs. The rotation per pulse will be exactly what the servo’s deadband allows — nothing more, nothing less.

Sub-Title: The Bottom Line on Rotation per Pulse

So here’s the takeaway:

  • Rotation per pulse is not a fixed number. It’s a ratio of angular travel per microsecond of pulse width change.
  • Digital micro servos have a smaller deadband and higher internal PWM frequency, making that ratio more precise and responsive.
  • The spec is load-dependent and temperature-dependent. Don’t trust it for closed-loop applications.
  • Always measure it yourself if you need sub-degree accuracy.

Next time you pick up a digital micro servo and see “0.1ms pulse = 0°” on the box, remember: that’s just the anchor point. The real story is in the deadband, the timer resolution, and the quality of your signal generation. And now you know exactly how to read between the lines.

Copyright Statement:

Author: Micro Servo Motor

Link: https://microservomotor.com/common-specifications-and-parameters/micro-servo-rotation-per-pulse.htm

Source: Micro Servo Motor

The copyright of this article belongs to the author. Reproduction is not allowed without permission.

About Us

Lucas Bennett avatar
Lucas Bennett
Welcome to my blog!

Tags