Schrittmotor mit Endschalter ansteuern

Hallo liebe Forum-Gemeinde,

ich habe da ein ein Problem welches ich alleine nicht gelöst bekomme.
Normalerweise schaffe ich es mir durch google selbst zu helfen. In diesem Fall leider nicht und deshalb hab ich mich kurzerhand hier registriert weil ich hoffe, dass mir jemand unter die Arme greifen kann.

Was soll umgesetzt werden?

Auf einem Linearschlitten der durch ein Gewinde und einem Schrittmotor
angetrieben wird, bewegt sich ein Läufer.
Dieser Läufer soll in einer Dauerschleife hin und her fahren.
Die Richtung wird umgekehrt sobald der Läufer einen der beiden Endschalter erreicht.
Im Prinzip eigentlich simpel :confused:

Welche Komponenten stehen zur Verfügung?

  • 1x Linearschlitten 400mm mit Gewindetrieb und Elektromotor

  • 1x Arduino UNO oder 1x Arduino Nano

  • 1x CNC-Schield V3.0 (KINGPRINT)

  • 2x Endschalter (makerbot)

  • 3x Treiberboard A4988

Ich brauche keine "Komplettlösung" oder sowas. Ein paar Lösungsansätze auf die ich aufbauen kann
wären schon sehr sehr hilfreich. Ich hoffe auf Eure Hilfsbereitschaft liebes Forum :slight_smile:

Vielen Dank

Hier ein Bild vom Linarschlitten mit Schrittmotor

Was DU realisieren musst:
-Statemachine im Arduino programmieren
-Sensoren einlesen (in dem Fall die Endschalter)
-Aktoren augeben (hier Schrittmotor ansteuern)

  • Ablauf auf dem Papier stichpunktartig aufschreiben, damit du die Statemachine sinnvoll ausprogrammieren kannst
  • eventuelle Probleme mit in die Lösung einbeziehen (was passiert, wenn beim Einschalten schon ein Endschalter ausgelöst hat?)

...Also Dein Problem in kleine Häppchen zerteilen und einzeln lösen...

  • und Endschalter einbauen :slight_smile:
  • Strombegrenzung bei den A4988 einstellen

Vielen Dank für die raschen Antworten, Ihr seid klasse!

Habt ihr vielleicht einen ähnlichen Sketch welchen ich mir für meine Bedürfnisse
umschreiben kann? Ich habe noch nie eine State machine programmiert und weiß gar nicht wo ich anfangen sollte :confused:

Sorry für meine unwissenheit! bin noch am lernen...

Schau dir die Beispiele con der Stepper-Library an.

Hallo,

also eigendlich ist es ja Unsinn einen Schrittmotor mittels Endschalter hin und her fahren zu lassen. Sinnvoller wäre es doch beim Einschalten einmalig einen Endschalter als Refferenzpunkt anzufahren und ab dann mit den Schritten bzw einer Position zu arbeiten.

Wenn Du mit einen Endschalter stoppen willst kannst Du eigendlich immer nur einen Schritt fahren und dann abfragen ob der Endschalter angefahren ist. wenn nicht nächster Schritt usw.

die Lib Accel Stepper bietet viele Möglichkeiten den Antrieb direkt zu positionieren und auch Beschleunigungen einzustellen. Dabei sind auch Beispiele wie man einen Motor hin und her fahren lasssen kann. Spiel da erst mal was mit rum , dabei kommen Dir dann ganz neue Ideen.

Also mein Vorschlag

  1. beim Einschalten langsam in eine Richtung bis auf einen Endschalter fahren Schritt für Schritt

  2. Wenn der erreicht ist ein Flag setzten "Antrieb hat refferier" und die aktuelle Position auf einen sinvollen Wert setzten.

  3. wenn das Flag gesetzt ist fährst du wie in dem Beispiel der Lib zwischen zwei Positionen hin und her.

Wenn Du unbedingt zwischen zwei Endschaltern hin und her fahren willst , weil die sich im Abstand besser einstellen lassen als eine elektronische Lösung geht das natürlich auch.

fahren lassen bist Endschalter 1
Richtung drehen ( da gibt es ein Bit für auf 1 setzen)
fahren lassen bis Endschalter 2
Richtung drehen bit auf 0 setzten

Heinz

Hi

Mein Herangehen wäre Das von Rentner.
Also Einlernen der Positionen der Endschalter.
Also Anfahren, Richtung umkehren, WEGfahren, beim Lösen des Endschalter erst die Position merken - in beiden Richtungen.
Nun hast Du die Schritte zwischen den beiden Endschaltern, wo Beide wieder gelöst haben.
Dazwischen fährst Du hin und her, die AccelStepper bietet Dir Verfahren auf absoluten Punkt und Rampen.
Dein Programm setzt jetzt nur jeweils den neuen Ziel-Punkt, wenn die restlichen Schritte auf Null runter gezählt wurden (dann hat der Stepper auch schon mit Rampe gestoppt).
Weiter fragst Du in JEDEM loop()-Durchlauf beide Endschalter ab - egal Welcher von Denen kommt - irgend etwas ist dann faul - der Stepper stoppt VOR den Endschaltern und Diese haben jetzt wirklich die Funktion eines END-Schalter, einen Not-Halt auszulösen.
Im ersten Step benutzten wir Diese als Referenzen, danach bewegen wir uns so, daß wie Diese NICHT wieder auslösen (deshalb vom Endschalter weg fahren, bis Dieser wieder frei gibt).
Bei erneuter Auslösung haben wir irgendwo Schritte verloren oder wir zerquetschen gerade irgendwen ... oder etwas.

Die Endschalter so anbringen, daß Du Diese überfahren kannst, Diese also keinen Schaden dabei nehmen.

Wenn Du Mal auf den Endschalter aufgefahren bist, solltest Du eine Hand-Fahr-Funktion 'in der Hinterhand' haben, daß Du davon wieder weg kommen kannst - bei der Einlern-Fahrt wird Dir Das nämlich SO nicht gelingen.

MfG