Servo reagiert teilweise mit hoher Latenz

Hallo nochmal.
Bin hier ein wenig ratlos, Ich will zwei Servos über einen Joystick ansteueren und bekomme ziemlich oft einen Delay von fast einer halben Sekunde.
Der Joystick liefert im Monitor für beide Achsen gute Werte.
Servos sind zwei MG996R, verbaut in einem Gimbal.

Mein Code müsste o.k. sein, oder?

#include <Servo.h>
 
Servo horizontal;  // create servo object to control the horizontal  servo
Servo vertical;  // create servo object to control the vertical servo
// twelve servo objects can be created on most boards
int firePin = A2;   // select the input pin for fire button
int horPin = A4;   // select the input pin for the horizontal potentiometer
int verPin = A3;   // select the input pin for the vertical potentiometer
int motorPin = 8;  // select the output pin for fire signal
int min = 0;
int max = 1024;
 
int horValue = 0;  // variable to store the horizontal value coming from the Poti
int verValue = 0;  // variable to store the horizontal value coming from the Poti
int fireValue = 0;  // variable to store the value coming from the fire button
 
void setup() {
  Serial.begin(9600);
  horizontal.attach(9);  // attaches the servo on digital pin 9 to the servo object
  vertical.attach(10);  // attaches the servo on dihgital pin 7 to the servo object
  pinMode(motorPin, OUTPUT);
  pinMode(verPin,INPUT);
  pinMode(horPin,INPUT);
  pinMode(firePin,INPUT);
}
 
void loop() {
horValue = analogRead(horPin);   //aulesen
verValue = analogRead(verPin);   //aulesen
fireValue = analogRead(firePin); //aulesen
horValue  = map(horValue,0,1024,180,0);
verValue  = map(verValue,0,1024,180,0);

//output

  horizontal.write(horValue);
  vertical.write(verValue);   

if(fireValue > 20) {
    // turn pump on:
    digitalWrite(motorPin, HIGH);
  } else {
    // turn pump off:
    digitalWrite(motorPin, LOW);
  }

    delay(15);                      // waits 15 ms for the servo to reach the position

Serial.print(0);
Serial.print("   ");
Serial.print(1023);
Serial.print("   ");
Serial.print(verValue);
Serial.print("   ");
Serial.print(horValue);
Serial.print("   ");
Serial.println(fireValue);


delay(20);                      // waits 15 ms for the servo to reach the position
}

Ist der Servo zu lahm? An einer Fernsteuerung reagieren die aber gut.
Der hat laut Datenblatt 15 ms.
Irgendeine Idee was ich tun könnte?

auf der Seriellen Schnittstelle die relevanten Variablen ausgeben und die Ursache suchen.
fang mal mit horValue und beobachte.
Wie schnell hast den geänderten Wert auf der Seriellen - und auch stabil?

Das meinte ich mit Monitor - den seriellen Monitor. Da sieht alles gut aus.
Ich beobachte auch das kurze Aufblitzen der Reset Diode.
Könnte ein Stromproblem sein.
Mit kleinen Servos gehts ganz gut.
Hab die Servos logischerweise nicht über den Nano laufen.


Rechts oben ist ein Spannungsbegrenzer, der liefert 5V.
Die beiden Dreierpins sind die Servos. Die nehmen sich den Strom auf der 5V Seite.
Links unten die 5er Pin Reihe ist der Joystick. der wird aus den 5V vom Nano gespeist.

Das Ganz links ist ein Mosfet, der dann die 12V durchschaltet, wenn der Joystickbutton gedrückt ist.

Das bezweifle ich.
Statte deinen Code mit Serial Print Ausgaben aus.
Auch im Setup - damit du siehst ob der Nano neu startet.

Poste deinen aktualisierten Sketch.
Poste die Serielle Ausgabe inkl. Timestamps. Damit man sieht was wirklich passiert.

Und mach einen Schaltplan aus dem man erkennt, was wie verkabelt wurde.

und abschließend: Was hast du als Spannungsversorgung? Welches Netzteil, wie viel Volt, wie viel Ampere?

Den seriellen Outputs hatte ich auskommentiert. Sind wieder drin.
Hier ein Video der seriellen Ausgabe:

Das sieht supergut aus, wie gesagt kleine Servos funktionieren.
Leider hab ich noch keinen Schaltplan erstellt.
Hab das direkt vom Breadboard auf die Platine übertragen.
Ich habe aber ein Netzteil mit 12 V 5A dran.
Ich werde heute abend mal ein Labornetzteil dranhängen. DA sehe ich dann auch die Leistung.

Auf dem Labornetzteil ist auch kein hoher Strom zu sehen, wenn man das da überhaupt sehen kann, kommt nie über 0.8 A.
Ich tippe die Servos ziehen die VIN runter und dann resettet der kurz. Die Diode blitzt dann immer kurz auf. Kann ich das irgendwie verhindern.
Ich möchte eigentlich keine zweite Spannungsquelle verwenden.

Der Motor ist noch nicht angeschlossen um Fehler auszuschließen.
So ist das verdrahtet:

man sieht in deinem Video keine Ausgabe aus dem setup(). Das müsste er aber wenn du wie du glaubst resettet.

Was für einen Spannungsregler verwendest Du? Einen 7805? Üblicherweise müssen die mit je einem Kondensator an Ein- und Ausgangsseite beschaltet werden. Auf Deiner Skizze ist da aber nichts von zu sehen. Auf dem Foto schon ... aber nur einer.

Du wolltest doch die Input Werte sehen und daß der Joystick sauber arbeitet.
Deswegen hab ich mal die Servos abgemacht.
Während der Aufnahme hat die Diode auch nicht gezuckt.

Ist es save Vin und USB zusammen zu benutzen? Ich meine mich erinnern zu können, daß das bei dem Nano geht.
Habt bitte etwas Nachsicht, ich bin MaschBauIng. Bei Elektronik besitze ich nur gefährliches Halbwissen :slight_smile:

Danke übrigens, daß ihr euch mein Zeugs so genau anseht.

Ja, genau den.
Opps die Kondesatoren hab ich vergessen einzuzeichnen.
Ich hab allerdings wirklich nur einen verbaut, 100mF auf der 5V Seite.

Meinste der 1000er auf der 12 V Seite könnte helfen?

Ich merke übrigens daß der Regler sehr warm wird, sobald ein Servo angeschlossen wird.
Ziehe ich die ab bleibt er handwarm.

Oops, was muß ich da sehen:

Nur 0.5 A Output, bisserl wenig. Das wirds wohl sein.

NA, wenn er sehr warm wird, dann fließt viel Strom durch. Bis etwa 1A sollte aber ohne Kühlrippen funktionieren.

Anbei ein kleiner Text zu dem Regler. Die zweite Beschaltung wäre in Ordnung:
https://www.strippenstrolch.de/1-2-11-der-spannungsregler-78xx.html

Es gibt verschiedene Typen vom L7805. Der Standardtyp L7805CV (ohne das M) kann eigentlich bis 1,5A.

Ich glaub der ist schon durch den Haltestron der Servos am Limit.
Ich werd mal den bestellen.
https://www.reichelt.de/ldo-spannungsregler-5-v-5-a-to-220-lm-1084-it5-0-p39422.html?PROVID=2788&gclid=Cj0KCQiAnsqdBhCGARIsAAyjYjTVfYXxj1HyDNU9WcxK4IPkDSfU_avvIo6ps5kuqiDQn07I6Jq2wFUaAknQEALw_wcB

Kommt davon, wenn man eionfach in die Kiste greift und nicht nachschaut.

Danke für die Hilfe, ich werd dann mal berichten obs geklappt hat.
Wenn das dasnn alles läuft hab ich ca 0.8 A maximal pro Servo
Die 2A von der Pumpe gehen sowieso auf der 12V Seite ab.
Da sollte der 5A dicke reichen.
In deinem Schaltplan kommt ja der Elko mit der hohen Kapazität auf die 5V Seite.
Werd ich dann wohl auch so machen.

Nochmal vielen Dank

Da nicht für... :slightly_smiling_face:

Einspruch
Das TO220 Gehäuse kann ca 1W, des TO252 auch ca soviel wenn es in Luft hängt, abführen ohne daß das Teil überhitzt.

Darum ist die Aussage "1A geht" völlig falsch.

Die Verlustleistung hängt von der Differenz der Eingangsspannung und der Ausgangsspannung mal des von der Last geforderte Strom.

Bei der Mindestspannungsdifferenz von 2V für den LM7812 ergibt sich bei 1A schon eine Verlustleistung von 2W, also auf die Dauer zu viel.

Für einen Ausgangsstrom von mehr als 100mA und etwas realen Eingangsspannung (sagen wir mindestens 15V) ist immer ein Kühlkörper erforderlich.

Grüße Uwe

[EDIT]
Nachtrag:
Bei einem 5V Spannungsstabilisator, der mit 12V versorgt wird ist der max Strom ohne Kühlkörper ca 150mA.
[/EDIT]

Du hast recht. Danke für die Korrektur.

Den Nano mit 5V am Vin zu versorgen sollte falsch sein (Schaltplan #6)

Ich wage zu behaupten, daß es falsch ist.
Grüße Uwe

Soll ich mit den 12 V da drauf und nur die Servos mit dem externen Regler versorgen?
Oder reguliert an den 5V Pin, das macht wohl am meisten Sinn, denn der Regler an Vin würde wohl etwas warm, oder?

Ich hab das allerdings so ähnlich bei einem anderen Projekt schon seit Jahren im Betrieb.

Auf jeden Fall brauchst Du am VIn Pin wegen des Ladereglers auf dem Board so grob um die 1,2V bis 1,5V mehr Eingangsspannung als die anliegenden 5V. Darum wären saubere 5V am 5V Pin sicher besser als 5V an Vin.