Hallo zusammen,
ich bin ganz neu im Arduino-Bereich und als eines der ersten kleinen Projekte habe ich versucht einen Gleichstrommotor anzusteuern.
Dazu verwende ich den Arduino Uno R3 und den Motortreiber L298N.
Der Motor soll sich erst mit fast höchster Geschwindigkeit 2 Sekunden rechtsrum drehen und dann mit ca. halber Geschwindigkeit 3 Sek. linksrum.
Das macht er auch, aber nach einer unbestimmten Anzahl Zyklen hat er immer wieder Aussetzer in der Form daß er nachdem er rechtsrum gedreht hat erst ca. 2 Sek. Pause macht und dann gleich wieder rechtsrum dreht. Das macht er ein oder auch zwei/drei Mal, dann läuft er wieder für mehrere Zyklen wie er soll.
Das sollte doch eigentlich nicht passieren. Der Code ist doch eindeutig.
Weiß zufällig jemand woran das liegen Könnte.
Für jegliche Tipps bin ich dankbar.
Viele Grüße
Maximilian
int in1 = 11;
int in2 = 10;
void setup() {
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
// put your setup code here, to run once:
}
void loop() {
analogWrite(in1, 250);
digitalWrite(in2, LOW); // put your main code here, to run repeatedly:
delay(2000);
digitalWrite(in1, LOW);
analogWrite(in2, 125); // put your main code here, to run repeatedly:
delay(3000);
}
(Im Schaltplan wird ein Arduino UNO gezeigt. Ich nutze jedoch einen Arduino Uno R3, bei dem aber die Anschlüsse identisch sind soweit ich das sehen kann)
du sollst Serial Ausgaben ergänzen damit du sehen kannst, was dein Sketch im laufenden Betrieb wirklich macht, oder ob es z.B. ungwollte Neustarts gibt.
Außerdem sieht es in deinem "Schaltplan" danach aus, als würdest du den Motortreiber vom Arduino aus mit Strom versorgen. Das klappt nicht, weil der Arduino nicht genug Strom für einen Motor zur Verfügung stellen kann. Du musst ein externes Netzteil verwenden und die Massen verbinden.
Als erstes habe ich Codezeilen hinzugefügt, die mir im Serial Monitor anzeigen sollen, ob der Arduino abgestürzt ist bzw. neu gestartet hat.
Wenn die KI mir die richtigen Befehlszeilen gegeben hat und ich das richtig eingefügt habe, sieht das jetzt so aus:
int in1 = 11;
int in2 = 10;
int resetCounter = 0;
void setup() {
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
Serial.begin(9600);
resetCounter++;
Serial.print("Reset Counter: ");
Serial.println(resetCounter);
// put your setup code here, to run once:
}
void loop() {
analogWrite(in1, 250);
digitalWrite(in2, LOW); // put your main code here, to run repeatedly:
delay(2000);
digitalWrite(in1, LOW);
analogWrite(in2, 125); // put your main code here, to run repeatedly:
delay(3000);
}
Beim Probedurchlauf blieb der Resetzähler immer bei 1 stehen, selbst nach mehrmaligem Auftreten des Fehlers.
Na ja, die Geschwindigkeit kontrolliere ich über das PWM-Signal der digitalen Pins indem ich analog.write benutze und bestimme mit welcher Geschwindigkeit der Motor von 0 bis höchster Geschwindigkeit laufen soll.
Sollte es an den 5V Volt liegen, könnte es dann nicht helfen einfach ein Netzteil zu verwenden wie es @noiasca vorgeschlagen hat?
Ok, ich habe versucht festzustellen ob der Arduino ungeplant Resets macht, wie beschrieben, aber wenn ich die serial Ausgaben richtig verwendet habe, scheint er es nicht zu tun.
Ich bin dabei mich reinzufinden was es für weitere Möglichkeiten gibt zu kontrollieren was der Sketch im Betrieb macht.
Ja, der Motortreiber wird vom Arduino aus mit Strom versorgt.
Ich werde mal versuchen ein externes Netzteil zu verwenden und sehen ob es dann besser funktioniert.
Und dann mal schaun, was passiert wenn der Treiber fremd versorgt ist.
Bitte beachte!
Die Verbindung GND Motortreiber und GND Arduino muss bestehen bleiben! Sonst fehlt Dir das Bezugspotential für die Steuerspannungen.
Der L298 braucht 2 Versorgungsspannungen. Eine für die Logik (meist nimmt man da 5V ) und eine zweite für den Motor. Das Datenblatt sagt, daß die Motorspannung mindestens 2V über der Logikspannung sein muß. Also bei 5V Logikspannung mindestens 7V.
Nimm einen besseren Motortreiber wie zB einen DRV8837 bzw DRV8838 oder den DRV3385 für 2 Motoren. Die kannst Du mit 5V Motorspannung verwenden und bringen bis zu 1,5A.
Da nirgens das Model des Motors genannt wurde und ich kaum glaube, daß es der TT Getriebemotor mit Übersetzung 1:60 wie in der Zeichnung ist, bin ich auf die Dimensionierung des Netzteils nicht eingegangen.
Grüße Uwe
mit dem Code wird brutal die Drehrichtung umgeschalten ohne kurze Wartepause zwischendurch, womit der Motor kurz still stehen könnte. Die Folgen solcher Späße sollten klar sein. Vom Arduinoboard aus versorgt man auch keinen Motor/Treiber. Das ist schon mit kleinen Servos kritisch.
Sorry, aber so lernst du nie, wie man es richtig macht.
Merke:
Wir sind nicht das Repair Cafe einer KI.
Die soll die Fehler selbst rausfinden. Einfach so lange nachfragen, bis es bei dir funktioniert.