Servo motor compatibility with Maestro - servo Spektrum S9120BL

I have previously been successful in getting other servo motors to work with the Maestro; however, I recently purchased a Spektrum S9120BL because I needed more torque and have so far been largely unsuccessful in controlling it with the Maestro. I say ‘largely unsuccessful’ because I think I have it where it will move to it’s maximum and minimum position, but am unable to have it controllably move to a position in between.

When I asked the company I purchased it from what the PWM specs were for the motor this is the response I got: the range is +/- 1100-1200.

However, I seem to get the same servo movement response when I set it to go between -1 and 1 (which is basically binary max-position min-position movement), as I do for all negative-integer positive-integer ranges (keeping it between -1200 and 1200), which makes me think that this servo may be trying to operate in a non-integer only range between -1 and 1 (or even tighter range). Based on documentation, it looks like the second like the second argument to ‘maestro.setTarget()’, which sets the target position, is of type ‘uint16_t’.

This is why I thought I would ask if you know if the Spektrum S9120BL servo motor is compatible with the Maestro controller? If it isn’t, or if you know of a servo motor with similar torque (mainly intended for 1/5 scale RC) that is compatible with the Maestro controller, can I ask you what that might be, or what you would recommend?


I’m afraid that Spektrum S9120BL and Maestro controller are not compatible with each other. The range of PWM values that the Maestro can send is typically from 500 to 2500, with 1500 being the center position. The PWM range of +/- 1100-1200 for the Spektrum S9120BL is outside the normal range for PWM signals.


I am not familiar with that servo, but I did some quick searching around and couldn’t find any mention of it working with a special interface or pulse width range. I am not sure what a “PWM range of +/- 1100-1200” is referring to; a negative pulse width length does not make sense. I suspect they just might have meant that it takes normal RC servo pulse width signals between around 1100 and 1200 (although that is an unusually small range).

It sounds like you are trying to use the Maestro Arduino library; please note that the setTarget() command accepts pulse width values in units of quarter-microseconds. So, to send signals between 1100 and 1200 microseconds, you should use targets between 4400 and 4800. However, I recommend using the slider in the “Status” tab of the Maestro Control Center software (which is displayed in units of microseconds) since it is more straight forward and eliminates possible problems with code. Could you try doing that and seeing if the behavior is any different? If not, could you post a short video showing your process and the results? The forum does not allow very large videos, so you might need to post it to a video hosting website (like YouTube or Vimeo) and link it here.

By the way, please note that by default the Maestro limits the range of allowable pulse widths to between 992 and 2000 microseconds, so (unless you changed the default settings) when you were trying to send it a setTarget() command with a value below 992 microseconds (i.e. 3968 quarter-microseconds), it should have just used a pulse width of 992 microseconds.


Just replying here too in case it is useful to anyone in the future.

I’m not sure what the +/-1100-1200 was referring to either, but it seems to be working now that I changed the target range to 4000 to 8000. It has been a while since I set one up for a new motor, and I was trying to test/debug it completely through an Arduino I was using to control the remote control toy tractor, having forgotten I could test using the Control Center Software. When I plugged it in to that the default range was about 1000 to 2000, which when applying the quarter-microseconds conversion you mentioned, suggested the 4000 to 8000 range, which then worked.

Thanks for your help.

1 Like