Servo control: pulse width working range ?

Hello,

I noticed that many servo motor manufacturers don’t provide datasheets for their products (for example for my servo it’s the case)
Generic values that can be found on the web don’t work for every servo.
For example what should be pulse width for 0/90/180/360 degrees.
I suppose the value of pulse widths depends on a particular model.

For example I noticed that if pulse width in quite low, the servo heats up as an iron.

Any comments ?

Thanks.

My memory is a little rusty, but IIRC

With remote control (RC) servos, there is a pulse width between 1ms and 2ms to give minimum to maximum angle.

There is pulse repetition rate of 20ms.

I found these https://en.wikipedia.org/wiki/File:Sinais_controle_servomotor.JPG http://www.seattlerobotics.org/encoder/200009/Servos.html

Pulse width cycle time 20ms, repetition 50Hz
Pulse width duty 5% to 10%

I noticed that many servo motor manufacturers don't provide datasheets for
their products (for example for my servo it's the case)
Generic values that can be found on the web don't work for every servo.
For example what should be pulse width for 0/90/180/360 degrees.
I suppose the value of pulse widths depends on a particular model.

  Very few servos have a 360 rotation range... +/- 90 degree is more
common (the exception being servos that have had the position feed back
logic removed and act as variable speed continuous motors).

https://www.jameco.com/jameco/workshop/howitworks/how-servo-motors-work.html

1.5mS pulse should be the "neutral" position (middle of the range).

https://learn.adafruit.com/adafruit-motor-selection-guide/rc-servos
https://learn.adafruit.com/adafruit-motor-selection-guide/continuous-rotation-servos

For example I noticed that if pulse width in quite low, the servo heats up
as an iron.

  Likely you are over (under) driving the position, and the servo can not
physically move to the position you are requesting -- this leaves the coils
energized with the servo pushing against the internal end-stop.

  My suggestion would be that you write a short calibration program with
which you adjust the pulse width from neutral, one step at a time, until
the servo reaches an end point (ie; the control "horn" stopped moving while
you changed the pulse width), then back up until you just detect the horn
has moved off the end-stop. Record that value and repeat for the other
direction. Maybe put a sticker on the servo with the values of the
end-point pulse widths -- neutral position should be the average of those
two values.

  Do that for all your servos, and either use the minimum span for all,
or program the limits per servo (if using Python, install Adafruit Blinka
and libraries for CircuitPython -- the servo class allows override of
min/max pulse width; they default to 0.5 - 2.5ms, but do state that
"standard" servos are supposed to work with 1.0 - 2.0ms width).

https://learn.adafruit.com/circuitpython-essentials/circuitpython-servo
https://learn.adafruit.com/circuitpython-on-raspberrypi-linux (ignore the
R-Pi, it works for BBB also)
https://learn.adafruit.com/using-servos-with-circuitpython/high-level-servo-control

Actually 360 degree Continuous Rotation Servers are quite common. There are basically two types of servos: 360 degree Continuous Rotation and 90 degree Standard Rotation. Each has a different purpose.

As far as manufacturers not providing datasheets for their products, I would suspect this depends on where you are purchasing the servers from. If you stick with manufacturers such as Hitec, Tower, Futaba, or Parallax you should be fine. If you are purchasing cheap off brand servers, then you may run into an issue with each being different as far as how they react to a PWM signal. Also, depending on the application, there could be a difference between plastic and metal gears. I tend to like metal gear servos though.

Cheers,

Jon

I'd have though I'd covered those with the "act as variable speed
continuous motors".

  However, the OP asked about setting specific angles of 0, 90, 180, 270
(I'm assuming the 270, they went 0, 90, 180, 360). Continous rotation types
do not have feed-back for positions, so could not be commanded to rotate to
any particular angle.

  That leaves us back with common positioning servos which normally run
-90 to +90 (or 0 to 180, if one prefers... +/- 90 makes for sense if being
used for a steering servo on a robot, where 0 is "straight ahead". It may
also make sense for throttle control, where 0 is stopped, -90 is full
reverse, +90 is full forward).

Very few servos have a 360 rotation range… +/- 90 degree is more
common (the exception being servos that have had the position feed back

logic removed and act as variable speed continuous motors).

The mine has the range (at a glance) about 200 degrees.

Likely you are over (under) driving the position, and the servo can not
physically move to the position you are requesting – this leaves the coils
energized with the servo pushing against the internal end-stop.
Sure, I was out of range and torque was quite high.
But why the range isn’t specified in datasheets … applying over/under driven position one can damage servo definitely.
Safe operating conditions - the first thing that should be in the datasheet, isn’t it ?

My suggestion would be that you write a short calibration program with
which you adjust the pulse width from neutral, one step at a time, until
the servo reaches an end point (ie; the control “horn” stopped moving while
you changed the pulse width), then back up until you just detect the horn
has moved off the end-stop. Record that value and repeat for the other
direction. Maybe put a sticker on the servo with the values of the
end-point pulse widths – neutral position should be the average of those
two values.
It is difficult to estimate with the naked eye when the servo reaches the end / start points.
Another detail: I observed a kind of hysteresis when the servo approaches the end or start points.

I mean that by approaching one of these points I can move forward in relatively small steps. Once the limit point is reached, to go in the opposite direction, I have to take a relatively large step.
Probably one of the methods for determining the limit points is current control, i.e. when the torque continues but the servo can no longer rotate, will the current rise?

Do that for all your servos, and either use the minimum span for all,
or program the limits per servo (if using Python, install Adafruit Blinka
and libraries for CircuitPython – the servo class allows override of
min/max pulse width; they default to 0.5 - 2.5ms, but do state that
“standard” servos are supposed to work with 1.0 - 2.0ms width)
Ok, thanks.

Sincerely,

Pavel.

If you stick with manufacturers such as Hitec, Tower, Futaba, or Parallax you should be fine.
I have Tower servo.
I asked Tower support for the information and tech support replied that the 500-2400us pulse width provided a range of 0 to 160 degrees, while according to my observations the "width limits "are approximately 400 and 2500us, which provides an angle range of 0 … 200 degrees.

Sincerely,

Pavel.

Take into account that if those are pushing against the internal stops,
you are leaving the coils energized trying to move the shaft -- which could
lead to that overheating that had been mentioned before.

  The range provided by Tower support is probably the intended/safe
design range -- which all are supposed to support. Going beyond those
limits may be manufacturing variance that can not be relied upon.