Continuous rotation with positional control using Arduino

Hi, I will be using the Futaba S9352HV due to it's high speed and good torque. I could not find more details regarding this servo but according to the sales guy, he states that this servo is capable of continuous rotation, however, positional control is no longer possible via the built-in servo driver - hence it may have to be via from my own servo controller, which in this case will be the Arduino.

I would like to have 2 revolutions with positional control (eg stops at 0, 90, 180, 270, 360, 450, 540, 630 and 720 degrees). I would like to ask if this possible to configure using the Arduino?

If a servo is modified for continuous rotation operation it ceases to be a servo and becomes a bi-direction variable speed geared motor drive, you can command it's speed and direction but not it's position and no external 'servo controller' will solve that. If the servo has not been modified then it should have position control over 180 degrees or less. So unless you indeed can find more detailed information on this 'digital' servo I suspect it won't do what you want it to do.

Lefty

rn_1604:
Hi, I will be using the Futaba S9352HV due to it's high speed and good torque. I could not find more details regarding this servo but according to the sales guy, he states that this servo is capable of continuous rotation, however, positional control is no longer possible via the built-in servo driver

Given that this "sales guy" stated "this servo is capable of continuous rotation" - it would seem that the servo being sold isn't sold pre-modified. You would have to do that yourself; there are plenty of tutorials out there that explain how to modify a servo to make it a continuous rotation servo. Once you do so, though, you will lose any means of controlling it's position (since it essentially involves disconnecting the internal potentiometer from the gearing, so the motor controller inside the servo no longer has a positional reference signal).

rn_1604:

  • hence it may have to be via from my own servo controller, which in this case will be the Arduino.

Yes - you would have to come up with a way to monitor the position of the servo, and when it was positioned properly, stop it (or set up a PID controller to gradually bring it to a halt).

rn_1604:
I would like to have 2 revolutions with positional control (eg stops at 0, 90, 180, 270, 360, 450, 540, 630 and 720 degrees). I would like to ask if this possible to configure using the Arduino?

Yes, you could do this - there are a number of ways:

  1. You could gear down the output shaft and connect that reduction drive to a potentiometer (maybe even the one from the servo, if you are able to carefully remove it).

  2. You could attach a multi-turn potentiometer to the output shaft - there are many inexpensive ones, but most are limited to 10 turns or so.

  3. You could attach what is called a "servo potentiometer" to the output shaft. These are potentiometers that are continuous rotation devices, which have a small "dead band" gap at one point in the rotation; they tend to be precision devices, and rather expensive new. If you can find one used or surplus, you'll pay less (but again, depending on where you buy them and the brand, "less" might still be seen as expensive).

  4. You could attach an optical absolute encoder to the output shaft - note that this will likely be the most expensive option, depending on how many bits the encoder is (the higher the number of bits, the smaller the minimum rotation angle you can resolve will be - ie, an 8 bit encoder will give you 360/256 degree resolution, a 9 bit encoder will give you 360/512 degree resolution, etc).

All this said - that is a lot of money to spend on a servo that you are going to void the warranty on by opening and modifiying - to essentially turn it into a gear motor that you have to add your own position control back to. You might want to explore getting a standard DC gearmotor with similar torque specs, and a suitable h-bridge to drive it. At least, take a look into it - you may find it to be a better deal (or you may not - but at least you'll know).

It's possible. Certainly not simple. What will you use in place of the potentiometer to support the 2 turns? A multi-turn pot, an optical encoder?

There are frequent questions on this... I wonder why the manufacturers don't make a "continuous rotation servo with position control" or I suppose more correctly a "bi-directional dc motor with position control".... oh wait, they do... that's a stepper motor isn't it?

I would like to have 2 revolutions with positional control (eg stops at 0, 90, 180, 270, 360, 450, 540, 630 and 720 degrees). I would like to ask if this possible to configure using the Arduino?

You might consider a sail winch servo that is capable of several positional turns.

Thanks guys for all the helpful input! I will try to research more on stepper motors and sail winch servo.

I'm actually making a remote controlled braking mechanism for my light vehicle project, below is a rough sketch of the setup that I will be constructing:

Basically I will need to deal with a total of 24kg of load on the brake levers (for emergency braking), thus in order to use the servo (Futaba S9352 HV torque 22kgcm) that I wanted, I will construct a lever system to reduce the load. The lever system is also good as I will place it beside the seat to act as a manual "handbrake" so that the user can activate it by hand when the electronics go wrong. The brake lever structure will be hidden in the vehicle and connecting this brake lever to the "handbrake" will be a brake cable. I wanted to use this servo as it is fast (0.06 sec/60°) and this is crucial during emergency braking. The positional control is good as it allows the user to have controlled braking. However, I did not realise that a normal unmodified servo is unable to rotate more than 1 revolution with positional control. I though that it was possible when controlled using the Arduino.

I also though of using a linear actuator with potentiometer but I could not find one that is as fast or faster than the Futaba servo S9352 HV.

JimboZA:
There are frequent questions on this... I wonder why the manufacturers don't make a "continuous rotation servo with position control" or I suppose more correctly a "bi-directional dc motor with position control".... oh wait, they do... that's a stepper motor isn't it?

No - a stepper motor does not have position control; in order to have true positional control of a motor, you need a feedback mechanism from the motor to know it's position. Open-loop control of a stepper motor is not the same as a closed-loop servo feedback system.

Think about it this way: You hook up a stepper motor to a controller, and the controller commands the stepper to step 100 steps clockwise, then stop. You then spin the shaft (with your hand) counter-clockwise. Does the controller still know what the position of the motor shaft is? No - it does not, because it doesn't have a reference from any kind of encoder as to what position the shaft is it. That is the difference between open-loop vs. closed-loop control of a motor; you can get away with open-loop control to a certain extent with a servo, provided that it's running and holding torque is much greater than what it is moving (or what is bearing against it) - or if the gear system it is running through isn't inherently back-drivable. But ultimately, that is still just a guessing game; it is still possible to miss steps, skip steps, or have the system be out of step with the actual position. For most low-cost CNC machines, this may be OK - but if you want any kind of real precision (and for high-speed, high-precision CNC, you use DC motors anyway - not steppers) - you need closed-loop control.

Point taken cr0sh, thanks.