Servos zittern

Hallo,
habe vor einen kleinen Roboter zu bauen, der mittels einfachen Joysticks steuerbar sein soll.
(Knüppel nach vorne= nach vorne Laufen)

Zurzeit benutzte ich noch eine Fernsteuerung um alles zu testen.
Servos bewegen sich auch wie sie sollen, das einzige Problem ist die zittern ungemein.
Kann ich das PWM-Signal irgendwie "beruhigen". Denn mein Monitor zeigt mir mega die Schwankungen, ich vermute, da liegt das Problem.

value = pulseIn(11, HIGH);
Serial.print("value: ");
Serial.print(value);

ServoValue = map(value, 1089, 1880, 0, 1023);

angle = map(ServoValue, 0, 1023, 179, 0);
Serial.print(" , angle: ");
Serial.println(angle);

Monitor:
value: 1165 , angle: 162
, angle2: 17
value: 1174 , angle: 160
, angle2: 19
value: 1173 , angle: 161
, angle2: 18
value: 1173 , angle: 161
, angle2: 18
value: 1173 , angle: 161
, angle2: 18
value: 1174 , angle: 160
, angle2: 19
value: 1174 , angle: 160

Ist da nichts dabei gewesen?

Nein leider nicht

Toooooooooom:
Denn mein Monitor zeigt mir mega die Schwankungen

Dein Monitor zeigt Dir Schwankungen um volle zwei(!) Winkelgrade zwischen Drehwinkel 160 Grad und 162 Grad.

Was bitte ist an 2 Winkelgrad "MEGA"?

An einem Servo, der wahrscheinlich überhaupt nur eine mechanische Stellgenauigkeit von plus/minus drei Grad hat?

Wenn Dein Servo megamäßig zittert, dann zittert er wahrscheinlich viel mehr als das, was Dein Monitor anzeigt.

Und das würde dann eher heißen: Der Servo ist entweder megamäßig überlastet oder Du betreibst ihn mit einer megamäßig unterdimensionierten Stromversorgung (z.B. aus dem 5V-Pin des Arduino-Boards) oder mit einem megamäßig unsinnigen Sketch mit extrem hoher Interruptbelastung im System, was man allerdings nicht beurteilen kann, weil Du keinen vollständigen Sketch sondern nur ein paar Zeilen Codeschnipsel gepostet hast.

Hin oder her, ob 2 Grad ne menge ist…
sie zittern und das muss weg…

Null Belastung…
Stromversorgung über externe Stromquelle (Arduino würde ausreichen…)

#include <Servo.h>

Servo myServo;
Servo myServo2;

int const potPin = A0;
int potVal;
int angle;
int angle2;

void setup() {
myServo.attach(9) ;
myServo2.attach(10);

Serial.begin(9600) ;

void loop() {
potVal = analogRead(potPin) ;
Serial.print("potVal: ");
Serial.print(potVal);

angle = map(potVal, 0, 1023, 179, 0);
Serial.print(" , angle: ");
Serial.println(angle);

angle2 = map(potVal, 0, 1023, 0, 179);
Serial.print(" , angle2: ");
Serial.println(angle2);

myServo.write(angle);
myServo2.write(angle2);
delay(15);
}

Was hast denn du schon alles probiert um das zittern weg zu bekommen?
Welche Servos werden verwendet?
Wie groß ist die notwendige Haltekraft? Wie sieht der mech. Aufbau aus?

Sketch bitte in Code Tags.

mde110:
Was hast denn du schon alles probiert um das zittern weg zu bekommen?
Welche Servos werden verwendet?
Wie groß ist die notwendige Haltekraft? Wie sieht der mech. Aufbau aus?

Sketch bitte in Code Tags.

Im Testaufbau sind es 2 Mini-Servos mit 16g BB
Später sind es 6kg

Laut dem Code, würde ich auch eher sagen, dass die Spannung unter der Last stark einbricht und die Servos dann hin und her zittern um die richtigen Werte zu treffen.

Was hast denn du schon alles probiert um das zittern weg zu bekommen?
Welche Servos werden verwendet? Link zum Artikel oder Bezeichnung.
Wie sieht der mech. Aufbau aus? Stellbetrieb oder wird eine Haltekraft benötigt?

Toooooooooom:
Hin oder her, ob 2 Grad ne menge ist.....
sie zittern und das muss weg...

Wie lang sind denn die Leitungen an Deinem Testaufbau?
Irgendeine Leitung vielleicht länger als 20 Zentimeter?

Oder führt vielleicht ein 230V netzspannungführendes Kabe lirgendwo nah an Deinem Aufbau vorbei?

Alles kürzer....
nen Fehler von der Hardware kann ich ausschließen...
....denn Stellen nur über .write geht Problem los, genauso wie über nen Poti.....
..also Spannungsversorgung sonst welche Störungen würde ich zu 100% ausschließen.

Was mir grad noch aufgefallen ist beim Vollausschlag an der Funke wackelt nichts mehr....aber nur da.. :frowning:

Hab heute keine Lust auf Rätselraten.

Aufbau samt Verkabelung nicht bekannt.
Hardwarefehler vom Hilfesuchenden ausgeschlossen.
Dann fällt dem To...om plötzlich wieder was ein...

Ich klink mich mal aus, soll jemand anderes seine Zeit verschwenden.

Aufbau:
Eingang empfänger auf pin 11
Servo auf 9 und 10 mit Kondensator zwischen + und gnd.....
So wie es oben steht und Projects Book...

mde110:
Hardwarefehler vom Hilfesuchenden ausgeschlossen.
Dann fällt dem To...om plötzlich wieder was ein...

Ich klink mich mal aus, soll jemand anderes seine Zeit verschwenden.

Sorry dass ich sag was mir auffällt, um die Fehlersuche vielleicht zu begrenzen....

Ich habe so einen Servo TowerPro Micro. Mit Sketch aus #4 brummt er, wenn direkt an UNO angeschlossen. Mit externer Spannungsversorgung zuckt er, wenn an A0 eine andere Spannung gemessen wird.

Daher habe ich den Sketch umgeschrieben, um eine Hysterese und ein detach zu ermöglichen. Damit ist der Servo ruhig, allerdings auch ohne detach.

Möglicherweise kannst Du daraus irgendwelche Schlüsse ziehen.

Mein Testsketch:

#include <Servo.h>
Servo myServo;
Servo myServo2;

const byte potPin = A0;
const unsigned long servoIntervall = 100;
unsigned long aktMillis, servoMillis;
int aktpotVal, altpotVal;
int angle;
int angle2;

void setup() {
  // Serial.begin(9600) ;
  myServo.attach(9);
  myServo2.attach(10);
}

void loop() {
  aktMillis = millis();
  aktpotVal = analogRead(potPin) ;
  if (abs(aktpotVal - altpotVal) > 2) {
    // Serial.print("altpotVal: ");
    // Serial.print(aktpotVal);
    // Serial.print("   aktpotVal: ");
    // Serial.print(aktpotVal);

    angle = map(aktpotVal, 0, 1023, 179, 0);
    // Serial.print(" , angle: ");
    // Serial.println(angle);

    angle2 = map(aktpotVal, 0, 1023, 0, 179);
    // Serial.print(" , angle2: ");
    // Serial.println(angle2);

    myServo.attach(9);
    myServo2.attach(10);
    myServo.write(angle);
    myServo2.write(angle2);

    altpotVal = aktpotVal;
    servoMillis = aktMillis;
  }
  /*
  if (aktMillis - servoMillis >= servoIntervall) {
    myServo.detach() ;
    myServo2.detach();
  }
  */
}

Vielen Dank :slight_smile:
Für deine Mühe
Aber an meinem Problem hat sich nichts geändert...
So wie ich jetzt deinen Sketch verstehe änderst du nur die Ansteuerung vom Servo (bitte korrigiere mich)
Mit dem Poti gehts wie vorher ein wand frei, wenn ich aber an Stelle des Potis den PWM-Eingang anlege mit

value = pulseIn(11,HIGH) ;
aktpotVal= map(value, 1089, 1880, 0, 1023);
und auf die Werte runter breche auf die aus dem analogen Eingang dann bekomme ich wieder das Zucken...

Ich werde morgen einfach mal ne andere Fernsteuerung ausprobieren..
...vielleicht ist die einfach zu alt und gibt zu ungenaue Daten aus...
..obwohl wenn ich nen Servo einfach so anschließe alles ruhig ist -.-