Electronic – arduino – Is a 600+Hz R/C Servo/ESC refresh rate possible

arduinomicrocontrollermotor controllerremote controlservo

In the R/C multirotor scene, the trend at the moment is to have very high refresh rates on your ESCs (speed controllers).

My understanding of how servos/ESCs are driven is a 1-2ms pulse is sent to the servo/ESC. at the standard rate this happens every 20ms giving a 50Hz refresh rate.
More here: WikiPedia article on Servo Control

I can understand how this happens up to 500Hz, where full throttle (or full lock on a servo) would mean the line is just pulled high (one 2ms pulse ends at exactly the same time as the next one begins), and 0 throttle (or full lock the other way on a servo) would be a 50% duty cycle signal with a period of 2ms.

I have just seen this: HobbyWing X-Rotor 20A OPTO ESC For Multirotor Applications which is an ESC that states: "supports a signal frequency of up to 621Hz." How is that possible? By my calculations the pulses would overlap at full throttle.

Best Answer

The standard R/C hobby servo pulse width range of 1~2ms gives a maximum repetition rate of just under 500Hz, but if a non-standard range is used then it can be higher. High-speed servos designed for helicopter tail rotors are often designed accept 410~1140us (centering at 760us instead of 1.5ms) which theoretically could be sent at up to 877Hz.

The manufacturer's specifications for the XRotor-20A say this:-

1.5 Compatible with various flight-control systems and supports a signal frequency of up to 621Hz (Note: all throttle signals over 500Hz are non-standard signals)

Although servo pulses are a type of PWM, they encode the servo position into a specific pulse width rather than an on/off ratio. the servo or ESC detects the rising and trailing edge of the pulse and measures the time between them, so the repetition frequency has no bearing on the decoded position. Having the line 'just pulled high' is invalid because there would be no pulse to measure!