HS-785HB servo makes noise when not moving

Hi,

I am using this a HS-785HB sail winch servo (http://www.robotshop.com/ca/en/hitec-hs785hb-servo-motor.html). For testing I modified the code from Sail winch 360 servo question - Project Guidance - Arduino Forum

#define PWM1_MIN  600
#define PWM1_MID 1500
#define PWM1_MAX 2260

int servoPin = 0;
int pwm1 = 690;      // global stores value of PWM in microseconds

Servo servo;
void setup()
{
 servo.attach(servoPin, PWM1_MIN, PWM1_MAX); // attaches the servo on pin 9 to the servo object 
 servo.writeMicroseconds(pwm1);       // set servo to some position
}
void loop()
{
	//delay(...); // wait until servo reached position
	// servo.detach();
}

I can move the servo to an exact angle without problems. But when the servo is in target position (e.g. it does not move) then it makes a loud noise. I already tried to attach an external power source but nothing changes. The only way to get rid of the sound is to detach the servo after reaching the target position.

The servo's red wire is attached to 5V, brown/black to GND, and orange to PIN 1.

Is it normal that this servo makes a noise when not moving?

Regards,

Are you attempting to power the servo from the Arduino 5V rail? If so then
you will be probably be overloading the Arduino regulator and causing the
board to reset.

Servos and motors should never be powered from a logic supply rail.

It does not make any difference whether I use USB, 5V Arduino jacket, or an completely separate power source for the servo.

Can you post a diagram of how things are wired up when you are powering the servo from the separate supply?

How much current (and voltage) can the separate supply provide?

Have you a load on the servo when it is making the noise?

Can you feel the drum vibrating as though rotating back and forth a little when it is making the noise?

...R

The servo is not vibrating.

The external power supply connects Ardunino GND with Battery GND and Servo GND. The battery 5V output is connected to the servo only. The servo signal wire is connected to PIN 0 of the Arduino only.

As a battery I am using a 11.1V Lipo pack which is connected to the servo using a 6V/5A BEC. I am using the same power supply with other servos (of other type) without problems.

I think that either the servo noise sound is "normal" with this servo, or there is something wrong with my Pulse setup in the Arduino sketch.

Your wiring and power arrangement seems OK. Have you tried replacing the sail winch with another servo and does it make noise then?

Have you a multimeter that is capable of measuring the current drawn by the servo? Does it seem reasonable? How does it compare with the current draw of a different servo?

Does a small change in the number provided to servo.writeMicrosceonds() make any difference?

If you think it may be a peculiarity of the sail winch maybe the supplier could advise you.

...R

What does the noise sound like? Grinding, a hum, high pitched whine? If there is a slight vibration, the servo might be "hunting" due to slight overshoot trying to maintain its position.

Check whether the signal you are sending to the servo is actually constant.

Thanks for all the hints. I finally found the problem: the noise occurs when torque is on the servo. Even very small weights (e.g. slightly touch the servo axis) are sufficient to cause the noise.

....question 3 in Reply # 3 ...

...R

I too am having an issue with my servo making a whining noise when there is a light load on the servo. Is there a fix for this?

Would it be possible to "turn off" the servo when I do not need it to be running?

Thanks.

If there is a load on the servo it probably won't hold position if you switch off the servo power - which can easily be done with a transistor or relay controlled by the Arduino.

If the load is just friction it may be that the servo can't move it to exactly the spot it thinks it is being commanded to. In that case (and if the load can't move the servo) you could try commanding it to move back a few "microseconds" with servo.writeMicroseconds() so that the position it is commanded to matches the position it is actually at. You will need to experiment to see if this works, and how much "reverse" is needed to stop the noise without actually moving anything.

...R

I too am having an issue with my servo making a whining noise when there is a light load on the servo. Is there a fix for this? Would it be possible to "turn off" the servo when I do not need it to be running?

You could try detaching the servo so it will not try to hold position. The below servo test code has a detach function you can try and see what happens.

// zoomkat 9-11-12 serial servo detach test
// type servo position in serial monitor
// use writeMicroseconds >500 to control servo
// use writeMicroseconds <500 to detach servo
// for IDE 0022 and later
// 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.writeMicroseconds(2000); //set initial servo position if desired
  myservo.attach(7, 500, 2500);  //the pin for the servo control, and range if desired
  Serial.println("servo-detach-test"); // so I can keep track of what is loaded
}

void loop() {
  while (Serial.available()) {
    char c = Serial.read();  //gets one byte from serial buffer
    readString += c; //makes the string readString
    delay(2);  // allow buffer to fill with next character
    }

  if (readString.length() >0) {
    Serial.println(readString);  //so you can see the captured string 
    int n = readString.toInt();

    if (n < 500) {
      myservo.detach(); 
    }
    else {
       myservo.attach(7);
       myservo.writeMicroseconds(n); //convert readString to number for servo
    }
    readString=""; //empty for next input
  } 
}

Thanks for the replies.

I got it working by detaching the servo after each operation.

Thanks! That was really helpful for me!