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.
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:
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
Danke übrigens, daß ihr euch mein Zeugs so genau anseht.
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.
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.