Continuous rotation servo motor doesn't keep its position (PCA9586) Help please

Hello every one,
I am using continuous rotation servo motors to rotate springs of a vending machine. Let's say, I need to it to rotate 360 degree to dispense a product.
I am also using PCA9685 servo shield bc I want to run multiple servos simultaneously.

First, I've trying the function writeMicroseconds(servonum, microsec)
But I noticed that it doesn't always rotate 360 degree, it keep its same position at first rotation and time after time the position increased. It doesn't keep the same position and I need it to be kept.
Then, I remember that I read something says the output of the microseconds function is not precise so I thought the function is the problem.

After that, I just tried another function which is
setPWM(servonum, on, off)
this function required to define a MIN and MAX value for the pulse at the beginning but I actually didn't understand this function correctly yet and how to find these value for a cont. rotation servo so I use the value I found on internet.
Servo works. It moves when I send 250 to it and it stops when I send 300 to it. But the same problem it doesn't keep the position.

Idk is my delay value wasn't right or the frequency? or there is another reason? How can I keep the same position forever every time the servo rotate

Also I am working with a team so my teammate test the first function after attaching the servo to a spring and the position difference was even large.

1 Like

Continuous servos are misnamed. They are not servos, they are gearmotors that have their speed and direction controlled by a servo signal, only. Their positional feedback element is disconnected so they cannot know their position. They are no longer servos and cannot be set to a position. If you use timing to go to a position the timing for a certain position will change with motor supply voltage and/or load.

Get a real servo. Or add positional feedback to the motor (encoder). Or use a stepper. Steppers are great for precise positioning.

I think that you are going to struggle to get a continuous rotation servo to move to and hold a particular position because it has no positional feedback

Its position after rotating for a fixed time will not be precise and amongst other things will be influence by the load on the servo and its supply voltage, both of which may vary

If you need something that will rotate 360 degrees or more and then hold its position Google "winch servos". They will usually rotate at least 3 full turns and hold position. The only catch is they're usually fairly big.

Steve

You can use your "continuous roration" servos but only if each one has some kind of "home" switch. It can be a switch with a cam, an IR sensor with a hole in a disk or reflector on a dark background, or a Hall Effect switch and a magnet... Something to let the Arduino know when the 'spring' has reached the resting position.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.