Inkonsistenzprobleme mit Schrittmotor

Ich versuche, meinen Schrittmotor dazu zu bringen, sich um 90 Grad zu drehen, für eine Sekunde anzuhalten und diese Schritte zu wiederholen.

Bitte beachten Sie, dass ich ein Anfänger bin, aber ich habe Physikkurse belegt, sodass ich die meisten grundlegenden Elektronikkonzepte wie Spannung, Stromstärke, Reihenschaltung, Parallelschaltung, Widerstand usw. verstehe.

Ich richte dies also mit einem Himbeer-Pi ein, der an einen a4988 Pololu-Schrittmotortreiber angeschlossen ist, der 2 Ampere bei optimaler Kühlung und 12 V ausgibt, mit einem bipolaren Schrittmotor, der mit 2 / Ampere pro Phase bewertet ist und 12 V empfängt . Die Motoren werden von einem 30 Ampere, 12V Netzteil versorgt.

Alles ist nach beiliegendem Schema verdrahtet und mehrfach getestet. Viele verschiedene Skripte wurden verwendet, und derzeit verwenden wir ein Python-Skript vom RPI, das 50 Schritte (90 Grad) ausführt und dann eine Sekunde wartet. Dieser Code funktioniert und ist korrekt, weil er manchmal funktioniert. Beim Laufen erwärmt sich der Motor zwar, fühlt sich aber nicht heiß an. Wenn es eingeschaltet ist, aber keinen Code ausführt, summt und klickt es manchmal und bewegt sich nicht. Online-Quellen sagten, das sei in Ordnung.

Es scheint sehr zufällig zu sein, wann es funktioniert und wann es nicht funktioniert, zum Beispiel beim Testen des Stroms, der durch einen der Spulendrähte fließt, mit einem in Reihe geschalteten Multimeter, der Motor funktioniert einwandfrei, aber wenn das Multimeter nicht da ist, das Der Motor flippt aus, summt und ändert die Richtung unregelmäßig. Eine Theorie von mir, warum dies der Fall ist, ist auf den zusätzlichen Widerstand zurückzuführen. In diesem Fall kann das Einfügen eines Widerstands in Reihe das Problem beheben, scheint jedoch nicht die Wurzel zu beheben Das Thema.

Andere ergriffene Maßnahmen: - Verwenden eines Arduino Uno anstelle von Pi, dieselben Probleme - Ausführen des Codes auf unterschiedliche Weise, unterschiedliche Bibliotheken usw. - Wechsel zu einem anderen Motor und Treiber. - alles mehrmals neu verdrahtet - Einstellen der Spannungsregelschraube am Treiber. - ausreichende Kühlung für das Netzteil und den Treiber (2 120-Mil-Lüfter)

https://i.imgur.com/Ku2UgAxl.jpg

-- Verdrahtungsplan

https://i.imgur.com/undefined.jpeg – Bild der Einrichtung

https://i.imgur.com/Fx7ErH1.jpg

- Code verwendet

Jede Hilfe oder Vorschläge wären sehr willkommen, es sind zu viele Stunden in diese Arbeit geflossen. LMK, wenn zusätzliche Informationen benötigt werden.

Ich habe zwei der Bilder für Sie eingefügt. Können Sie Ihr zweites als JPG und nicht als JPEG hochladen und selbst einbetten? Code sollte wirklich mit dem Code-Tag eingefügt werden, damit er in Antworten kopiert und bearbeitet werden kann. Ihre ist dieses Mal einfach genug.
Warum fügen Sie keine Verzögerung zwischen Ihren beiden GPIO-Ausgangsleitungen in der for-Schleife ein? Ich weiß nicht, ob Ihr Treiber es braucht, aber vielleicht könnte ein Arbeitszyklus "näher an 50%" helfen? Hast du das schon probiert? Oder gibt es einen guten Grund, es nicht zu versuchen?
Einverstanden. Sie schalten 21 ein und sofort wieder aus. Der Stepper-Treiber registriert den Puls möglicherweise nicht.
"Random Works / Not_Works" deutet auf ein Erdungsschleifenproblem hin .... diese All-in-One-Chips haben eine logische Masse, die mit der Stepper-Versorgungsmasse gemeinsam ist. Sehr große transiente Schrittimpulsströme können mit logischen Steuereingängen verheerende Auswirkungen haben. Und Transienten können auch schwebende Eingänge eines nahegelegenen Mikrocontrollers stören.
Entschuldigung für die schlechte Formatierung, und wie an anderer Stelle gesagt, wurden Verzögerungen zwischen Zyklen und Potenzen mit dem gleichen Effekt versucht. @glen_geek hast du eine Idee, wie man das von dir beschriebene Problem beheben kann? Danke an alle.
@JakeChunn Sowohl die Logikmasse als auch die Masse der Schrittmotor-Stromversorgung gehen nur an einen Punkt - an der Treiberplatine, die Sie im Schaltplan gezeigt haben. Fügen Sie auch direkt auf der Treiberplatine einen großen Bypass-Kondensator für die Stromversorgung hinzu. Schrittmotordrähte miteinander verdrillen.
@JakeChunn Es wäre großartig, wenn Sie Ihre Frage bearbeiten und den Code einfügen könnten. Verwenden Sie die Schaltfläche „Code“ für die Codeformatierung. Schreiben Sie eine klare spezifische Frage, damit Sie gute Antworten erhalten
Verbinden Sie den ENABLE-Pin mit GND - im Diagramm schwebt er und kann daher zu zufälligem Arbeiten führen. Verbinden Sie zusätzlich SLEEP und RESET mit Vdd.

Antworten (2)

Mehrere Möglichkeiten:

Sie können versuchen, Verzögerungen hinzuzufügen, um eine Einschaltdauer von 50 % zu erhalten, wie von Jonk vorgeschlagen.
...
GPIO.output(21,true)
time.sleep(0.01)
GPIO.output(21,false)
time.sleep(0.01)
...

Sie können auch versuchen, Ihrem Code Beschleunigungs- und Verzögerungsrampen hinzuzufügen und eine Arduino-Bibliothek zu verwenden, die diese unterstützt (wie AccelStepper).

Außerdem verursacht die Kontextumschaltung auf dem Raspberry Pi eine Ungleichmäßigkeit im Timing der Schrittimpulsfolge, was dazu führt, dass der Motor aufgefordert wird, sehr schnell zu beschleunigen und zu verzögern, was die Drehmomentfähigkeiten des Motors überschreiten kann. Das Drehmoment von Schrittmotoren fällt im Allgemeinen mit der Drehzahl ab, hat jedoch normalerweise ein Resonanzband, in dem das Drehmoment in einem bestimmten Drehzahlbereich auf nahezu Null abfällt. Das Anbringen eines Schwungrads auf der Welle (oder einer anderen Last mit etwas Winkelträgheit) kann den Resonanzeffekt minimieren.

Userspace Bit Banging ist keine vernünftige Methode, um einen Schrittmotor anzutreiben, zumindest nicht über Geschwindigkeiten mit diskreten Schritten. Aber es hört sich so an, als wäre schon vorher etwas anderes nicht in Ordnung.
Wir haben Trägheit auf die Welle gelegt, es scheint keine Wirkung zu haben, und Ihr empfohlener Code ist eine von vielen Variationen, die wir ausprobiert haben, irgendwelche Verzögerungen haben keine Auswirkung auf die Unregelmäßigkeiten. Ich denke Chris hat Recht.

Dies spiegelt mehrere Beobachtungen / Vorschläge von anderen wider und nachdem ich die Stepper-Steuerung mehr als einmal mit A4988 durchgeführt habe, wäre meine Wäscheliste (in Reihenfolge);

  • Verbinden Sie die Floating Pins am Treiber (lesen Sie das Datenblatt)
  • Überprüfen Sie Ihre Erdung, überprüfen Sie, ob Ihre beiden Erdungen richtig verbunden sind und sich nicht gegenseitig bekämpfen / den Chip quälen / versuchen, voneinander weg zu schweben.
  • Betrachten Sie Entkopplungs- / Glättungskondensatoren und Ferrite auf der Logikseite der Dinge. Schritttreiber sind elektrisch sehr laut, insbesondere beim Mikroschritt.
  • Überprüfen Sie, dass der A4988 nicht überhitzt, er kann auf einer gut gestalteten Leiterplatte mit guter Kühlung ein absolutes Maximum von 2 A bewältigen, aber auf einer standardmäßigen kleinen StepStick-Platine montiert, haben sie fast keine Chance, eine thermische Abschaltung zu vermeiden, selbst mit den beliebten kleinen Kühlkörpern auf sie kleben.
  • Verwenden Sie keinen Nicht-Echtzeit- / Userspace-Code, um ein zeitkritisches Gerät wie einen Stepper zu steuern, es wird Sie irgendwann beißen, selbst wenn es "meistens funktioniert".
  • Wenn Sie nicht verstehen, warum Echtzeitsteuerung wichtig ist, um physische Geräte wie Motoren zu steuern, lernen Sie etwas zu diesem Thema.
  • Das Hinzufügen eines Mikrocontrollers zwischen dem Pi und dem Treiber mit genauem Echtzeitcode / die Verwendung von Hardware-Timern zum Generieren genau getimter Wellenformen mit vernünftigen Arbeitszyklen und Beschleunigung/Verzögerung ist eine bessere Möglichkeit, das zu erreichen, was Sie brauchen. Es gibt viele Open-Source-Beispiele dafür auf 3D-Druckern, CNC-Fräsen/Fräsern usw. usw. usw.
  • Die Vorschläge zu gleichmäßigeren Timings in Ihrem Code sind gut, auch wenn sie Ihr zugrunde liegendes Problem nicht behoben haben, sollten Sie verstehen, warum sie gut sind.
  • Wenn Sie Zugang zu einem Oszilloskop haben, suchen Sie nach verrauschten Linien und schlecht geformten Wellenformen.
  • Wenn Sie keinen Zugriff auf ein Oszilloskop haben, besorgen Sie es sich.