Standard R/C Servo Signaling

The OpenServo now optionally supports control signaling used by standard R/C Servo Motors.


Standard R/C signaling consists of a variable-width pulse between 1 and 2 milliseconds in duration delivered at a frequency between 50Hz and 60Hz. The OpenServo will measure the pulse width with a 10-bit resolution and convert the width to a command position between 0x000 and 0x3FF. When the control signal is not received the OpenServo will release control of the motors to emulate the operation of standard R/C servos.

Using R/C Servo Signaling

To enable R/C signaling control of the OpenServo set the PULSE_CONTROL_ENABLED option value to 1 and then compile and flash the OpenServo software on the servo. Because pulse control takes over command of the seek position it may conflict with other features of the OpenServo. Such conflicts should be warned about during compilation of the software.

To control the OpenServo attach a standard TTL-level servo pulse signal to the MOSI port on the OpenServo edge connector. Note that the I2C interface to the OpenServo remains in operation and configuration parameters such as PID gains can be adjusted while the OpenServo is being commanded by the standard servo pulse signal.

Warning: Keep in mind that the standard design of the OpenServo requires a power supply of at least 6.5 volts. A standard servo controller may not supply this amount of voltage to the OpenServo and thus the OpenServo may need an alternate power supply arrangement. This issue whould be addressed in future versions of the OpenServo design.

Customizing R/C Servo Signaling

Pulse width control of the OpenServo is implemented in the 'pulsectl.c' source file. This file can be customized by the end user to change how the OpenServo responds to the duration of the pulse. For instance, the default configuration is for the OpenServo to move to a position of 0x000 when the pulse is 1 millisecond in duration, a position of 0x200 when the pulse is 1.5 milliseconds in duration and a position of 0x3ff when the pulse is 2 milliseconds in duration. To better emulate the motion of commercial digital servos you may wish to scale the pulse duration so that a 0.8 millisecond pulse is the 0x000 position and a 2.2 millisecond pulse is the 0x3ff position. (Perhaps someday one will be able to automatically re-scale the servo using the Servo Standard Calibration UI).

Also, a low-pass digital filter is utilized to eliminate noise from the pulse width measurement. The amount of filtering can be adjusted to suit your specific needs.

Support and Help

Standard R/C Servo Signaling is a new feature of the OpenServo and as such it hasn't yet been well tested. Please post a message in the OpenServo forums if you have a problem or if you have suggestions on how to better implement this feature.

ServoSignaling (last edited 2012-10-12 19:51:18 by localhost)