WInch Servos precision issue

Hi,
I'm trying to control multiple winch servos (jx sw6114T JX Winch Servo SW6114 6T 14.5kg.Cm 1 6 Turns Metal Gears Coreless Standard Size Sail Servo For RC Yacht Industrial Logistics Use|Parts & Accessories| - AliExpress) using an Arduino NANO clone CH340 and I keep running into the problem where it seems like the servos are just not precise enough.

By "not precise" I mean that when I feed the same input into the servos, they end up in different positions, or when the same servo is rotated say 180deg->360deg -> 180deg, then the first 180deg position doesn't correspond with the second one, the servo simply ends up in a slightly different position.

For an illustration of the problem, see the following pictures. In the first one the servos are in their "zero" position (servo.writeMicroseconds(880);).

The following picture shows the servos after being fed an input signal using servo.writeMicroseconds(980); (they complete one turn by 360ish degrees CW, however you can clearly see that the positions differ).

The code that I'm using to test the servos is following

#include <Servo.h>
Servo winchServo_1;
Servo winchServo_2;
Servo winchServo_3;
Servo winchServo_4;

int servo1Pin = 9;
int servo2Pin = 10;
int servo3Pin = 11;
int servo4Pin = 12;

int us = 1000;

void setup() {
  // attach servos
  winchServo_1.attach(servo1Pin);
  winchServo_2.attach(servo2Pin);
  winchServo_3.attach(servo3Pin);
  winchServo_4.attach(servo4Pin);  
  // send commands to servos
  winchServo_4.writeMicroseconds(us);
  winchServo_2.writeMicroseconds(us);
  winchServo_3.writeMicroseconds(us);
  winchServo_1.writeMicroseconds(us);
}

void loop() {
// empty loop  
}

Does anyone have any idea on what might be causing this problem? Or is it possible that the winch servos are just not precise and are not well suited for precise (resolution < 45deg) position control?

Possible cause
The only think I found that might be causing this problem is that the output PWM signals are shifted in time. I mean that upon inspecting the signals using a digital oscilloscope I realized, that the signals are the same, they are just shifted. It seems that the Arduino first sqeuentialy sets PWM on the first pin (9), then on the second pin etc.. therefore between the pulses there is a slight delay.
However I don't think that this should be the cause, since the servo only cares about the width of the pulse and period, which remains the same even if the whole sequence is shifted. Am I right?

You are correct.

You have to remember that RC servos are designed as man-in-the-loop devices, not absolute servos; if the operator sees that the model isn't quite doing what s/he expects, a slight movement of the stick or trimmer will correct things.

Disclaimer: I've used plenty of RC servos, but never a sail winch servo.

1 Like

There's something odd about your description. A 6 turn winch servo should not turn anywhere near 360 degrees with a signal change of only 100us (out of a total range of around 2400). And your code shows 1000us not 880 or 980.

You can't expect serious precision from such a servo but 45 degrees should be possible, How are you powering your servos?

Steve

Hi Steve, thanks for your reply. You are right about the code, I pasted value from another experiment, sorry about that. However I presented the code just to be sure that there is not any major mistake present that might cause it.

You are right, I would not expect such movement as well, I'm starting to think that the servo might not be correctly configured (if something like that can happen at all) because despite it being a 6T servo, setting the width of the pulse to around 2300us makes the servo turn like 8 times at least.

I'm using a laboratory power source to power the servos (something like this https://uk.farnell.com/tenma/72-10480/power-supply-1ch-30v-3a-adjustable/dp/2251946), so I believe the servos should have enough power. They're running on 6V.

Dominik

Notice that the webpage you linked mentions:

I'm not sure whether that is referring to the end point adjustment in the transmitter or the servo itself.

You will probably need to test each servo to see what pulse width corresponds to the zero point, and what pulse width causes exactly six turns, and use that to proportionally set the pulse width for each servo.

You seem to be confusing a RC servo for toy boats with a precision engineered actuator. They are plenty precise enough for the intended purpose of controlling RC model sailboats under human supervision.

The specifications don't mention anything about positional accuracy at all. However they do seem to be particularly awful. I suspect the internal gears linking shaft to the feedback pot have a lot of backlash.

Sometimes you can compensate for backlash by taking the direction of motion into account.