Problem mit Spektrum A5030 Servo

Hallo,

habe schon google durchfoscht, aber nichts gefunden, nur das andere auch probleme damit haben, und dann schildern, dass sie es gelöst haben, aber nicht wie...

Also der Servo lässt sich ca210° drehen... wenn ich ihn aber ansteuer sind es nur ca 120° und die im bereich in der mitte, also nicht von 0°-120° sondern von 70°-190°

Wenn ich myservo.write(0); benutze fährt er 180° an und
wenn ich myservo.write(90); benutze fährt er 70° an
Das Mapping scheint nicht zu passen und die Zeiten gar nicht...

wie kann ich das problem lösen?

Von wo misst du den deine Grad Angaben?

Wenn du den Servo mechanisch zwischen den Endanschlägen mittelst, wie steht dann der Hebel?

ich schaue von oben auf den servo kabel kommen rechts raus und der hebel steht bei linksanschlag links

rechtsanschlag ist ca 45° unten rechts

bei 0° steht er rechts

bei 90° nach oben links

ich muss ich von links nach rechts steuern können also quasi 0° und 180°

kennt denn jemand die Impulszeiten für die Spektrum Servos?

Lass mal die Servo Lib weg und mach das von Hand. Dann weißt Du ganz genau was der Servo kann.

Gerne, im Moment kann ich aber nur High oder low draufgeben... denke das hilft nichts...

Also könnte ich weiter machen mit High low Tastgrad 1 und die Frequenz variieren.

Womit fange ich an? 1Hz? Welche steps soll ich machen? 1Hz oder 0,000001Hz?

Wenn ich den Tastgrad verändere, in welchem Rahmen? 0,1 oder 0,000001?

Muss ich zu jeder Frequenz jeden Tastgrad ausprobieren?

Ich denke bei feinster Auflösung reicht da ein Menschenleben nicht aus.

Mit dem Code fährt er immer den hebel nach lings, was 180° vom rechtsanschlag sind

const int servo =  9;
int servoState = LOW;
unsigned long previousMicros = 0; 
int pos = 0;
const long interval = 200;
const long High = 10;

void setup() {
  pinMode(servo, OUTPUT);
}

void loop() { 
   unsigned long currentMicros = micros();
    if (currentMicros - previousMicros >= interval) {
      previousMicros = currentMicros;
      servoState = HIGH;
    }
    if (currentMicros - previousMicros >= High) {
      servoState = LOW;
    }
    digitalWrite(servo, servoState);
}

egal was ich für

const long High = 10;

eingebe es geht immer auf die 180°

nimm das wipe Beispiel aus der servo lib

Servos werden übrigens mit analogWrite angesteuert

es gibt da nur die beispiele knob und sweep

dann ist es wohl sweep

Naja, habe es mit nem anderen noname Servo getestet... funktioniert einwandfrei... die Spektrum servos haben wohl eine andere Art der Ansteuerung...

ich habe den jetzt für mich verworfen und hole mir nen anderen Servo.

Im Internet habe ich einige Forenbeiträge gefunden, wo sie sich am Ende freuten, dass es geklappt hat, aber keiner hat die Lösung dazu gepostet. hätte es hier gerne mal komplett von Enfang bis Ende dokumentiert, damit auch alle was davon haben, aber hier bin ich an meine grenzen gestoßen.

Mit myservo.write(90); gibst Du den Wert 90° an den Servo. Das scheint ja nicht zu funktionieren. Die Bibliothek (zumindest diejenige, die ich verwende) kann aber auch Zeiten verarbeiten. Probiere mal myservo.write(2000); aus. Mein Servo reagiert auf 1500 bis 2500, bei Deinem Servo sollten es abweichende Zeiten sein. Die sollten eigentlich im Datenblatt stehen, bei dem Preis ist hoffentlich eins dabei, sonst hilft nur Probieren.

EDIT: Was ist schon normal :wink:

agmue:
Normale Servos reagieren auf 1500 bis 2500

Der normale Weg ist ca. 1000 bis 2000 uS, wobei je nach Hersteller die Mittelstellung bei ca. 1500 uS liegt.
Neuere Servos akzeptieren evtl. auch höhere und tiefere Werte und haben dadurch u.U. mehr Drehwinkel.

Ausnahmen sind z.B. Heli Heckservos, die nur mit einem bestimmten Kreiselsystem des Herstellers arbeiten.

So, habe nun einen Anderen Servo (TrackStar TS-D99X Digital) von Hobbyking besorgt.

Er reagiert genau so.

die kleinen 9G Servos funktionieren... was ist der unterschied, warum verhalten sie sich anders?

MfG Kai.