Bonus range with HS-785HB Servo

Hi everyone, I haven't posted here for a very long time, so apologies if this is not the right forum for this. I also haven't dabbled with servos since my RC days as a kid, so please treat me as a newbie in that department.

I've been experimenting with multi-turn servos and I started with a GWS VD-125-6TJ 6-turn sail winch servo (standard size), but I made a mistake during testing and the horn got stuck during rotation and blew the gears (actually the whole casing cracked).

Since the GWS was hard to find (and has a non-standard spline, which eliminated a lot of options for off-the-shelf parts), I looked around and found a possible replacement: the HS-785HB 3.5-turn servo by HiTec (quarter scale). However, the downside is that it only offers 3.5 turns compared to the 6 turns in the GWS, and I needed at least 6 turns.

According to the spec, the HiTec offers 3.5 turns between 1500-1900us. However, I found out that I was able to extract 7 turns by increasing the PWM range to between 700-2400us. I think there is still some more room in the positioning potentiometer for additional turns, but since this is more than what I needed, I stopped there.

Just thought I'd share a small tidbit for those of you looking for a multi-turn servo that is widely available and can offer at least 7 complete turns (maybe more). However, I have not completed my testing so I don't know if there is any performance or precision impact in the extended ranges. But since I had to more than triple the pulse range to double the number of turns, I'm assuming there is some non-linearity in both ends but I have not tested that (linearity not too important in my application).

As a side note, I noticed a few common questions about this servo, and here are my comments:

  • Servo "jittery" or oscillating: I noticed that when I first used the standard PWM pins to drive the servo directly. I then switched to the Arduino Servo library and the problem went away.
  • Slight range variation: I bought two of these from ServoCity.com, and during side-by-side testing, I noticed that the two servos have a slightly different range given the same input. Specifically, one servo gives me about 1/8 turn more than the other. Its only a 3.5% difference, but I felt someone might care about this. However, I remember buying them separately a few months apart, so they were probably from different manufacturing batches.
  • Power draw: I used an Uno and the initial current draw of the servo on the 5V line was enough to cause the Uno board to reset. Since I am providing an auxiliary 12V supply, I just bought a cheap 5V regulator like this one to supply additional juice on the 5V line which eliminated the reset problem with 2 or more servos.

Hope someone might find this helpful, and would love to hear other people sharing their discoveries too!

  • K.

That is cool! I never knew you could abuse a servo and have it still work!
That is waay out of its range, and might cause damage to the inner workings.

Servo "jittery" or oscillating: I noticed that when I first used the standard PWM pins to drive the servo directly. I then switched to the Arduino Servo library and the problem went away.

The standard PWM pins with analogWrite operate at around at least ten times the frequency the servo expects, with much coarser control.

The below gives some info on that servo. The sail winch servo capability of more turns than advertised comes from the fact that standard RC equipment only provides control pulses for +-45 deg of rotation (in which the servo will rotate the specified number of turns) and not +-90 deg. Providing a wider band of pulses may provide more turns.

According to the spec, the HiTec offers 3.5 turns between 1500-1900us. However, I found out that I was able to extract 7 turns by increasing the PWM range to between 700-2400us. I think there is still some more room in the positioning potentiometer for additional turns, but since this is more than what I needed, I stopped there.

Complete newb here so need a little help.
Where do you change the pulse width range to 700-2400us?.

Below is some test code that might be useful for continuous rotation servos. The attach line in the code is where the servo.h default range can be changed. also for power regulation you might consider a UBEC voltage regulator from ebay as they are made for powering servos, with 6v being the best output voltage for servos.

// zoomkat 3-28-14 serial servo incremental test code
// using serial monitor type a character (s to increase or a 
// to decrease) and enter to change servo position 
// (two hands required, one for letter entry and one for enter key)
// use strings like 90x or 1500x for new servo position 
// for IDE 1.0.5 and later
// Powering a servo from the arduino usually *DOES NOT WORK*.

#include<Servo.h>
String readString;
Servo myservo;
int pos=1500; //~neutral value for continous rotation servo
//int pos=90;

void setup()
{
  myservo.attach(7, 400, 2600); //servo control pin, and range if desired
  Serial.begin(9600);
  Serial.println("serial servo incremental test code");
  Serial.println("type a character (s to increase or a to decrease)");
  Serial.println("and enter to change servo position");
  Serial.println("use strings like 90x or 1500x for new servo position");
  Serial.println();
}

void loop()
{
  while (Serial.available()) {
    char c = Serial.read();  //gets one byte from serial buffer
    readString += c; //makes the string readString
    delay(2);  //slow looping to allow buffer to fill with next character
  }
  if (readString.length() >0) {
    if(readString.indexOf('x') >0) { 
      pos = readString.toInt();
    }

    if(readString =="a"){
      (pos=pos-1); //use larger numbers for larger increments
      if(pos<0) (pos=0); //prevent negative number
    }
    if (readString =="s"){
      (pos=pos+1);
    }

    if(pos >= 400) //determine servo write method
    {
      Serial.println(pos);
      myservo.writeMicroseconds(pos);
    }
    else
    {   
      Serial.println(pos);
      myservo.write(pos); 
    }
  }
  readString=""; //empty for next input
}

The datasheet on the servo is a bit deceptive, it is 3.5 turns from neutral (1500us) to 1900us; however it is also 3.5 turns going down from 1500us. I believe position control on these is supposed to be limited to between 600us to 2400us. Allegedly these will also do a continuous rotation mode using below 500us or above 2500us.

detown:
According to the spec, the HiTec offers 3.5 turns between 1500-1900us. However, I found out that I was able to extract 7 turns by increasing the PWM range to between 700-2400us. I think there is still some more room in the positioning potentiometer for additional turns, but since this is more than what I needed, I stopped there.

Complete newb here so need a little help.
Where do you change the pulse width range to 700-2400us?.

You use servo.writeMicroseconds(pulseWidth) instead of servo.write(angle).