Stepper Steuern

Hallo, ich möchte einen Schlitten mit einem Stepper fahren über einen Zahnriemen, mir stellt sich jetzt die Frage wie ich den Code gestallte.

Ich wollte den Schlitten auf einen Enschalter am Anfang fahren lasssn.
Wenn dann mein Eingang kommt, die Schritte auf null Stellen, sodass ich dann exakte Positionen anfahren kann.

Kann mir dabei jemand helfen ?

Verwendet wird:

Arduino Mega,
Stepper Nema 17
A4988 DMOS Stepper Motor driver.

Habe leider noch nicht viel Ahnung von diesem Codes, bräuchte echt Hilfe.

Danke schonmal an alle :slight_smile:

Je nachdem, wie hoch die mechanische Last ist und ob Du noch etwas anderes auf dem Arduino machen willst gibt es 2 Libs.

  1. Stepper Einfach, blockierend, für leichte Sachen
  2. Accelstepper Kann Anfahr- und Bremsrampen, blockiert nicht, höherer Einarbeitungsaufwand

Beide haben Beispiele dabei, an denen Du Dich orientieren kannst. Du musst immer von den Beispielen ausgehen, die zur Lib gehören. Ein Mischen funktioniert fast nie.

Gruß Tommy

Stepper Nema 17
A4988 DMOS Stepper Motor driver.

Nema 17 ist die Angabe der größe des Anschlußflansches, sagt aber gar nichts über die Elektrischen Daten aus. NEMA Schrittmotor – Was ist das eigentlich? - SCHRITTMOTOR-BLOG DIPL.-ING. THORSTEN OSTERMANN SCHRITTMOTOR-BLOG DIPL.-ING. THORSTEN OSTERMANN
Das ist das gleich wie bei einem Transistor TO220AB zu sagen. https://www.vishay.com/docs/95222/to220ab.pdf
Zu beiden kann man nur eine grobe Abschätzung der Leistung ableiten.

Darum können wir nichts über die Kompatibilität des genannten Treibers zu dem unbekannten Motor sagen.
Grüße Uwe

Achso tut mir leid, hier der Link des Motors mit den kompletten Daten.

LEORX NEMA 17 2 Phase 4-Draht 1.5A 40 mm 1,8 ° Schrittmotor für 3D Drucker https://www.amazon.de/dp/B015ST2U5A/ref=cm_sw_r_cp_api_LwAlAbA3S1X3G

Vielen Dank schonmal :slight_smile:

Das ist kein Link, das ist eine URL.

Ein Link ist das.

Gruß Tommy

Die Reihenfolge der Macht ist AB-BC-CD-DA

Die Übersetzungen gefallen mir.

Aktuelles Rating (einphasig): 1.3A. Nennspannung: 2.4V. Schrittwinkel: 1,8 °. Isolierung-Klasse: B-Klasse.

Ja diesen Motor kannst Du mit dem A4988 steuern. Versorgungsspannung zB 12V. Stromeinstellung auf Treiber 1,3A.

Grüße Uwe

Danke Uwe :slight_smile:

Wie schreibe ich dann den Code im Arduino, sodass er meine Schritte bei Eingang einen Sensors (z.B Pin 4)
Auf Null setzt, & ich so durch Eingabe exakte Positionen anfahren kann, wie z.B 658 Steps mit maximal Geschwindigkeit :slight_smile:

Gruß Maxi :slight_smile:

Wie schreibe ich dann den Code im Arduino

.. indem du programmieren lernst.
Du wirst hier ohne erkennbare Eigeninitiative keinen fertigen Code serviert bekommen.
Also beginne, dich mehr einzulesen, wie man Arduinos programmiert. Es ist nicht so schwer, wenn man sich am Anfang überschaubare Ziele setzt. Auch ein komplexes Projekt lässt sich meist in einfache Einzelprobleme zerlegen.

Starte mal mit dem Zerlegen deines Projekts in die zu programmierenden Einzelteile.
Mach di auch von Anfang Gedanken, welche Bauteile neben dem Motor eine Rolle spielen werden (z.B. dein limit-Schalter, ggf. noch ein Start-Knopf, Ende-Knopf, Notschalter etc.). Das Ganze am besten in einem Schaltbild abbilden.

Also, als Starthilfe, ganz grob, was ich bislang von deinem Projekt verstanden habe:

  • Programmstart (mit/ohne Startknopf?)
  • "Erkennen" der Nullposition (du musst sicherstellen, dass der Motor "richtig herum dreht", damit er sich am Anfang dann auch tatsächlich zur gewünschten Nullschalter-Position bewegt und nicht in die andere Richtung abhaut - wo man dann auch einen Endschalter verbauen sollte, um ein Verlassen der Führungssschiene zu vermeiden ...)
  • Nach Erkennen der Nullposition wird die "Zählvariable" auf Null gesetzt
  • Bewegen des Motors um x-Schritte in die andere Richtung, um deine gewünschten Positionen (x bestimmt dann diese Position) anfahren zu können

Da fehlen jetzt aber sicher noch einige weitere Programmteile, da ich (noch) nicht weiß, wie du die anzufahrenden Positionen eingeben willst - Joystick, Poti, Dreh-Encoder .. ?

Jeder der oben aufgeführten Programmteile benötigt nach Beschreiben, was dort geschehen soll, eine Umsetzung in die Sprache, die der IDE-Compiler versteht, d.h. Programmierung in "Arduinisch".

Also, zerlege dein Projekt mal in überschaubare Teile, suche nach ähnlichen Projektteilen in diesem Forum und passe die gefundenen Sketches dann passend ab. Das wird anfangs nicht ohne Fehlermeldungen deines Compilers abgehen. Dann kannst du hier um gezielte Hilfe nachfragen und es wird dir weitergeholfen.

Okey schonmal vielen Dank, das mache ich :slight_smile:
Möchte die Postionen wo ich anfahre schon im Programm dann pro Taster festlegen :slight_smile:
Gruß Maxi

Hallo,
Hab das nun hinbekommen, sodass ich den Stepper Steuern kann und ihn fahren kann.
Jetzt hätte ich noch eine Frage bezüglich des Zählends der Schritte.
Wie kann ich dies über meinem Code sagen das der Stepper nach Eingang meinen Sensors seine Schritte auf Null setzt? :slight_smile:

Der Stepper selbst hat keinen Zähler eingebaut. Das musst du über eine Zählvariable machen, die du beim Erreichen der Nullposition auf „0“ setzt und dann mit jedem Schrittimpuls hochzählen lässt, bis die gewünschte Position erreicht ist. Alternativ kannst du beim Erreichen der Nullposition auch die gewünschte Endposition (=Anzahl der benötigten Step-Impulse) der Zählvariable übergeben und dann mit jedem Step-Impuls runterzählen. Nach jedem Step dann den Wert der Zählvariablen prüfen, ob schon Null erreicht wurde.

Wenn nein, dann weiter Impulse geben und runterzählen, wenn ja, dann keine Stepimpulse mehr senden, da ja dann die gewünschte Position erreicht wurde.

Poste dann mal deinen bis dahin erstellten Code, dann kann man besser beurteilen, ob du auf der richtigen Spur bist. Bitte Codetags <> benutzen.

Okey mach ich, danke da werd ich mich mal ein bisschen einarbeiten :slight_smile:

Hallo an alle,

habe soweit meinen Stepper zum laufen gebracht & kann ihn auch gewisse Steps machen lassen.

Jetzt weiß ich nur noch nicht wie ich das mit einer Variable mache, die ich bei meiner Referenzfahrt auf Null setze und dann mit jedem Step hochzähle.
Kann mir da nochmal jemand ein paar Tips geben.

Gruß Maxi

Hier mein Stepper Programm.

#include <AccelStepper.h>
// Define a stepper and the pins it will use
AccelStepper stepper(AccelStepper::Driver, 2, 3); // pin 2 = step, pin 3 = direction
void setup()
{
// Change these to suit your stepper if you want
stepper.setMaxSpeed(100);
stepper.setAcceleration(20);
stepper.moveTo(5000);
}
void loop()
{
// If at the end of travel go to the other end
if (stepper.distanceToGo() == 0)
stepper.moveTo(-stepper.currentPosition());
stepper.run();
}

Da Du AccelStepper verwendest, macht das die Bibliothek für Dich. Zitat aus AccelStepper.h:

/// Resets the current position of the motor, so that wherever the mottor
/// happens to be right now is considered to be the new position. Useful
/// for setting a zero position on a stepper after an initial hardware
/// positioning move.
/// \param[in] position The position in steps of wherever the motor
/// happens to be right now.
void setCurrentPosition(long position);

Soll der Referenzpunkt nicht der Nullpunkt sein, geht auch setCurrentPosition(-100); anstelle setCurrentPosition(0);

Wichtig ist, zwischen absoluter und relativer Positionierung zu unterscheiden.

Gibt es irgendwo eine Erklärung für die ganze Bibliothek ? :slight_smile:
Wie das funktioniert ?

Hi

Zu den Standard-Librarys schreiben Die hier selber schon was - allerdings in Englisch.
Bei 'Hinzugesaugten' schaut man sich am Besten die einzubindende .h Datei an und durchforstet, was das Teil wohl macht.
Je umfangreicher die Library ist, desto schwieriger ist es, Da durchzusteigen - was Sich der Progger wohl wo wie gedacht hat oder bezwecken wollte.

MfG

Maxi-tax:
Gibt es irgendwo eine Erklärung für die ganze Bibliothek ? :slight_smile:
Wie das funktioniert ?

Bei mir in AccelStepper\doc\index.html