Brushless Servo Motor

Hi,

I'bought this servo : http://www.savoxusa.com/Savox_SB2231SG_Brushless_Digital_Servo_p/savsb2231sg.html, I'm just starting on arduino. I just want to know, how can I control this brushless Servo ? the same way as au normal Servo ? with the library ?

or not ?

thanks for answers !

theGrizzly

Frequency: 250-333
Pulse Rate Frequency: 1520

That is all it has to say about controlling it. I can't figure out what that means, however it doesn't look to me like standard servo parameters.

A normal servo is controlled by pulses between 1 and 2 milliseconds long, repeated every 20 milliseconds ( 50 Hz update rate ).

I see no reason to suspect not - not that that is in any way definitive.

The specs mention "pulse rate frequency 1520", perhaps they mean zero angle = 1520us
pulse width? I would tend to assume "digital" just means there's an optical encoder rather
than a potentiometer providing position feedback.

One thing that worries me is the frequency spec of 250 to 333 - if it really does want
pulses that often the standard Servo library doesn't do that out of the box AFAIK

Control system: Pulse width modification
Amplifier type: Digital Controller
Operating Travel: 90° (when1000?2000 ?sec)
Neutral position: 1500 ?sec
Dead band width: 5 ?sec
Rotating direction: Clockwise (when1500?2000 ?sec)
Pulse width range: 700?2300 ?sec
Maximum travel: Approx 150°(when700?2300 ?sec)

Another servo at the same site says this, which looks like the normal behavior. But it is difficult to see how this is the same as the details for the one you posted.

Servos should still work if you send the pulses less often than 50 Hz, or less often 333 Hz, if that is what that detail is supposed to mean.

The critical factor is the width of the pulse. Once the servo has measured the width of the pulse, that becomes it control reference until it gets another pulse. The time when it gets the next pulse isn't really very important, as I understand it.

I just want to know, how can I control this brushless Servo ? the same way as au normal Servo ? with the library ?

Servo test code you can try. Note that the format of the control signals being sent to the servo may not have any relation to the format of the control signals being sent to the h-bridge contained in the servo.

// zoomkat 12-25-13 serial servo test
// type servo position 0 to 180 in serial monitor
// or for writeMicroseconds, use a value like 1500
// Send an a to attach servo or d to detach servo
// for IDE 1.0.5 and later
// Powering a servo from the arduino usually *DOES NOT WORK*.

#include <Servo.h> 
String readString; //String captured from serial port
Servo myservo;  // create servo object to control a servo 
int n; //value to write to servo

void setup() {
  Serial.begin(9600);
  myservo.writeMicroseconds(1500); //set initial servo position if desired
  myservo.attach(7, 500, 2500);  //the pin for the servo control, and range if desired
  Serial.println("servo all-in-one test code 12-25-13"); // so I can keep track of what is loaded
  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) {
    Serial.println(readString);  //so you can see the captured string 

      // attach or detach servo if desired
    if (readString == "d") { 
      myservo.detach(); //detach servo
      Serial.println("servo detached");
      goto bailout; //jump over writing to servo
    }
    if (readString == "a") {
      myservo.attach(7); //reattach servo to pin 7
      Serial.println("servo attached");
      goto bailout;
    }    

    n = readString.toInt();  //convert readString into a number

    // auto select appropriate value
    if(n >= 500)
    {
      Serial.print("writing Microseconds: ");
      Serial.println(n);
      myservo.writeMicroseconds(n);
    }
    else
    {   
      Serial.print("writing Angle: ");
      Serial.println(n);
      myservo.write(n); 
    }

bailout: //reenter code loop
    Serial.print("Last servo command position: ");    
    Serial.println(myservo.read());
    Serial.println();
    readString=""; //empty for next input
  }
}