Steuern einer Achse/Schrittmotor mit externen Signalen

Hi,

ich bin neu hier und habe mir schon einiges selbst beigebracht. Ich bin kein Elektroniker, habe als nur Grundwissen.

Bisher habe ich einen 3D Drucker auf Basis des Mega gebaut und versuche nun eine Achse auf definierte Positionen fahren zu lassen.

Zuerst wollte ich selbst Code schreiben und die accelstepper library verwenden, habe aber festgestellt, dass ich das Programm nicht hinbekomme. :frowning:

Die aktuelle Idee ist, GRBL zu verwenden, das Problem hier ist aber, dass das CNC Programm nur gestreamt wird und GRBL kein LOOP kann.

Ich möchte ein Programm einmal nach dem Start des Arduino hochladen und dann über ein externes Signal definierte Positionen anfahren. So in etwa:

Programm Start
Achse am Endschalter referenzieren
Wait
Signal
Position 1 anfahren
Wait
Signal
Position 2 anfahren
Wait
(...)
Signal
Zurück auf Nullposition
LOOP

Wie löse ich das (mit meinen Kenntnissen) am geschicktesten? GRBL wäre toll, aber das wird wohl nichts.

Grüße

Meine Kristallkugel sagt, daß Du die vorgegebenen Positionen und Zeiten (grbl Ausgabe) speicherst, und dann dieses "Programm" in einer Schleife immer wieder abspielen möchtest. Diese äußere Schleife hat mit grbl nichts zu tun, die schreibst Du selbst in loop() rein.

Das einzige Problem, das ich dabei sehe, ist die Speicherung des Programms. Wenn es nicht komplett ins RAM paßt, brauchst Du dafür einen externen Speicher (SD Karte, serielles RAM...).

Danke, aber ich komme nicht ganz mit.
Wenn ich mit meiner Anfrage hier falsch bin, dann sagt mir das bitte.

Der Programm Ablauf wäre das was ich als GCode schreiben wollte, inkl. dem loop.
Aber grbl hat kein loop integriert und müsste das Programm ja auch immer wieder streamen.
Feste Zeiten habe ich auch nicht, das Wait war auf den M0 oder M2 Befehl bezogen, der so lange wartet bis ein Resume Signal extern kommt.

Das was du meinst ist der loop im Sketch oder?

Bei einer Werkzeugmaschine macht es keinen Sinn, immer wieder die gleichen 3 Löcher zu bohren ohne das Werkstück zu wechseln. Wahrscheinlich gibt es deshalb kein LOOP in grbl, aber damit kenne ich mich nicht näher aus.

Als ersten Ansatz würde ich mir vorstellen, den grbl Stream für einen Durchlauf komplett in den Speicher zu legen, oder auf eine SD Karte zu schreiben. Dann ein Unterprogramm (function) schreiben, das diesen Stream an die Druckersteuerung ausgibt, als ob er vom PC kommen würde. Dieses Unterprogramm rufst Du dann in loop() auf, damit es beliebig oft wiederholt wird. Du kannst auch in loop() auf ein weiteres externes Signal warten, bevor das Unterprogramm nochmal durchlaufen werden soll.

Wie das genau ablaufen soll, kann ich (noch) nicht sagen, da ich die Drucker-Software nicht kenne.

Wie groß wird den der Stream, den Du abspielen möchtest?

Sind die Positionen fest in GCode vorgegeben, oder sollen die für jeden Durchlauf noch irgendwie eingegeben werden?

Die Positionen sind fest.

Stell es dir vor wie ein Linearantrieb über welchem ein Ventil ist. Auf dem Linearantrieb werden 5 Behälter positioniert welche nacheinander befüllt werden. Dann zurück auf 0, Behälter wechseln und wieder von vorne.

Nur dass eben das Ventil nicht vom Arduino gesteuert wird, sondern von einer anderen Steuerung, welche der Master ist (Weil da noch mehr dran hängt) und der Achse über ein 5V Signal nur sagt "fahr weiter".

Da ich eben kein gelernter Programmierer bin, brauche ich einfach einen Tipp, wie ich das einfach lösen kann ohne den ganzen Code selbst zu schreiben.
Wie gesagt schaffe ich es nicht accelstepper dafür zu verwenden und vor allem nicht mit endschalter Referenzierung und einer Eingabe in mm statt steps.

Vielen Dank schon einmal für die Hilfe.

Verstehe ich das richtig, daß dieses Projekt mit dem Drucker garnichts zu tun hat?

Dann solltest Du Dich erst mal mit den Beispielen zu AccelStepper befassen. Dann wird Dir vielleicht klar, welche Parameter (Geschwindigkeit, Umrechung Schritte in cm...) Du selbst beitragen mußt. Zum Lernen kann ein Modell hilfreich sein, in dem ein Schrittmotor bestimmte Positionen anfahren soll. Wenn das dann erst mal funktioniert, kannst Du zu komplizierteren Abläufen übergehen.

Nein nein, das hat mit dem Drucker nichts zu tun. Sorry wenn ich missverständlich geschrieben habe!!!
Ich wollte damit nur sagen, dass ich einen Drucker gebaut habe und weis was ein Arduino und ein Sketch ist. :slight_smile:

Also ist das selbst-programmieren die einzige Möglichkeit für mein Vorhaben? Hatte eben gehofft, dass es etwas gibt, was ich nur anpassen muss. (So wie die Idee mit grbl)