[SOLVED] Servo motor stall torque problem

Hi, I've a servo of this type Diy More MG 996r hi-speed.
On the description of this servo is written that at 6v the stall torque is 15 Kg*cm.

I did the following experiment:

  • I alimented the servo at 6V with an teck star ps-305D bench power supply.
  • I piloted the servo with an Uno prototyping board with the Servo library for arduino. * I attached an arm of 5 cm to the servo.
  • I set the servo to maintain the arm parallel to the ground.
  • I attached a weight of 1.290 Kg to the arm.

As result I found that:

  • the servo cannot provide enough torque to maintain the weight and after a few seconds if fails.
  • When I tried to move against the gravity the servo with that weight the servo cannot move.

It means that the effective stall torque of the servo is less than 6.45 Kg*cm (1.290Kg * 5cm). The power supply can provide 5 A of current but the servo is using only 0.6A when trying to withstand during the experiment.

Do you now why is that happening?

And what do you have the current limiter set to?

Paul

Torque loads are often measured at different radi from the centre or even from centre

Knowing that and how to counter it via levers / fulcrums / etc. it is possible to increase or decrease a torque value.

It can be a complex subject.
Additionally as you noticed there is often a current factor to also take into account which can add complexity to calculations.

Bob.

This may help as it is slightly more simplified.

2020-01-01 at 13-39-01.jpg

2020-01-01 at 13-39-01.jpg

Paul_KD7HB:
And what do you have the current limiter set to?

Paul

Hi, I set it at the maximun possible, so it can provide at maximun 5A. The motor in any case uses only from 0.4A to 0.6A.
For all the time of the experiment the power suply was in cv mode that means that it was limitating the voltage and not the current.

ballscrewbob:
This may help as it is slightly more simplified.

2020-01-01 at 13-39-01.jpg

Thanks, but I know pretty well how lever work and what is a torque.

My question is: I have an experimental stall torque that is very very lower from what is written on the specs of the servo. So is it possible that I'm doing something wrong using the servo?

The code of the arduino is very stupid:

#include <arduino.h>
#include <servo.h>

Servo j;

void setup() {
    j.attach(3); // it is a pwm pin
}

void loop() {
   j.write(179); // angle parallel to the ground
}

The ground is connected from the power supply to the servo and to the board, the VCC of the servo is providded by the power supply while the pwm control signal is attached to the 3th pin of the board.

Another thing that thought: is it possible that the stall torque provided in the specs is reffered to the DC motor inside the servo and that there are some gears that divides the output torque? is it a common practice?

I attach the images of the set up and of the power supply. You can't see but the red and black wires at the top of the breadboard are connected direcly to the vcc and the ground of the power supply.

I posted the power suply screen when it is on load and when the servo is without load.

Instead of having the write(179) in loop() so it is rewritten to the servo every few microseconds try moving it into setup() so it is only written once (and the servo actually has time to act on it). Or at least put a delay(500) in loop() so it doesn't repeat so often.

Steve

Also do not forget that you need a SHARED GROUND between the servo and the Arduino.

slipstick:
Instead of having the write(179) in loop() so it is rewritten to the servo every few microseconds try moving it into setup() so it is only written once (and the servo actually has time to act on it). Or at least put a delay(500) in loop() so it doesn't repeat so often.

Steve

Hi I switch to this code from a version where there was the write in the setup and the loop was empty.
Unfortunately the result is the same.

ballscrewbob:
Also do not forget that you need a SHARED GROUND between the servo and the Arduino.

Yes, it is already shared.

What is the voltage across the servo power leads when under 6.45kg load? I'm thinking wiring / connection resistance may be dropping voltage.

the servo is using only 0.6A when trying to withstand during the experiment.

Then something is very wrong. The stall current of the MG996R is 2.5 Amperes at 6V, so it was nowhere near being stalled.

Post a wiring diagram and links to the product pages or data sheets for all the components. Post the code, using code tags. DO NOT use a breadboard for such high currents, the tracks will burn.

jremington:
Then something is very wrong. The stall current of the MG996R is 2.5 Amperes at 6V, so it was nowhere near being stalled.

Post a wiring diagram and links to the product pages or data sheets for all the components. Post the code, using code tags. DO NOT use a breadboard for such high currents, the tracks will burn.

JCA34F:
What is the voltage across the servo power leads when under 6.45kg load? I'm thinking wiring / connection resistance may be dropping voltage.

I think that you may have found the solution! I tryied to look up the voltage at the servo input after the breadboard, I found a value that goes from 2.5V to 3.5V.

So I tryied to avoid the breadboard and I found that the servo now is using nearly 1A of current and the voltage at the servo's input is 5V, still far from the stalling value, but the torque that is now provided is far more high.
I didn't calculated the precise ammount but it carrys a 1.290 Kg weight with an arm of 5 cm without problem so it is at least 6.45 Kg*cm.

I think that the problem now is the resistance of the thin wire that I use to connect the power supply to the circuit.

If I can't use breadboards what can I use to fast prototyping the circuit?
I will have to provide the power for 6 of these servos!

ps Thank you very much for the help. I would have probably end up spending weeks on it.

For six servos like that, you will need a 6V, 15 Ampere power supply and a servo power distribution board.

You must either carefully solder the servo power connections, or use gold plated servo pin connectors.

jremington:
For six servos like that, you will need a 6V, 15 Ampere power supply and a servo power distribution board.

You must either carefully solder the servo power connections, or use gold plated servo pin connectors.

IF the OP cannot solder, twisting the wires together and using wire nuts will also work.

Paul

The servo uses a permanent magnet motor, right?
The gearing reduces the RPM and increases the
effective torque. Do not try to measure the stall
current because stalling the motor tends to
demagnetize it.
Herb

herbschwarz:
The servo uses a permanent magnet motor, right?
The gearing reduces the RPM and increases the
effective torque. Do not try to measure the stall
current because stalling the motor tends to
demagnetize it.
Herb

No, PMDC motors do not demagnetize when stalled! Modern motors use ferrite or rare-earth magnets that are not going to mind this (with some older magnetic materials this was a concern).

The reason not to stall a servo for more than a second or so is they simply cook themselves due to the high heat dissipation.

BTW I’d rate breadboard connections for a few 100mA at most, and expect contact resistances in the 0.1 to 1 ohm range. Commonly available cheap breadboard lead sets are ultra-fine wire inside, rated for signals, not power. Use solid core 0.6mm diameter tinned copper hook-up wire with breadboards for preference, it will not struggle and you don’t need to fit plugs on the end it works fine with breadboards and 0.1" headers alike.

For high current always use terminal block or solder or high-current connector.

"MG 996r hi-speed."

Is that a standard servo, or is it perhaps a continuous rotation servo indicated by the "r"?

Some simple servo test code for use with the serial monitor.

// zoomkat 7-30-10 serial servo test
// type servo position 0 to 180 in serial monitor
// for writeMicroseconds, use a value like 1500
// Powering a servo from the arduino usually *DOES NOT WORK*.

String readString;
#include <Servo.h> 
Servo myservo;  // create servo object to control a servo 

void setup() {
  Serial.begin(9600);
  myservo.attach(9);
}

void loop() {

  while (Serial.available()) {

    if (Serial.available() >0) {
      char c = Serial.read();  //gets one byte from serial buffer
      readString += c; //makes the string readString
      delay(3);
    } 
  }

  if (readString.length() >0) {
    Serial.println(readString);
    int n = readString.toInt();
    Serial.println(n);
    myservo.writeMicroseconds(n);
    //myservo.write(n);
    readString="";
  } 
}

jremington:
For six servos like that, you will need a 6V, 15 Ampere power supply and a servo power distribution board.

You must either carefully solder the servo power connections, or use gold plated servo pin connectors.

At home I have a power supply with 12V and 30A. Can I use it lowering the voltage with a resistor or the high current will burn the servos?

Devices draw current as needed.

A power supply should be rated to provide more current than anticipated.

"At home I have a power supply with 12V and 30A. Can I use it lowering the voltage with a resistor or the high current will burn the servos?"

You can use that power supply but you need to drop the voltage down to ~6v using something like a 6v UBEC (ebay or RC supplier) or even a 7805 voltage regulator with a diode on the base for ~5.7v.