Schrittmotor

Hallo zusammen. Ich habe gestern mit meinem Schrittmotor etwas experimentiert. Dieser lässt sich wunderbar vorwärts und rückwärts drehen. Nun meine Frage, ich möchte einen Stepp machen lassen und dann soll er still stehen bleiben. Wie heißt eigentlich dieser Befehl?
Das Ziel soll sein per Taster 1 den Motor eine ganze Umdrehung machen zu lassen und dann soll er still stehen. Per Täter 2 soll der Motor eine ganze Umdrehung zurück drehen und wieder still stehen bleiben. Kann mir jemand behilflich sein?

Gibt's dafür keine Lösung oder muss ich das ganze anderst machen?

Hi,

wie so oft gibt es mehrere Wege, die nach Rom führen.
Du kannst das "zu Fuß" programmieren oder mithilfe von libraries.
Ich selbst habe ein relativ komplexes Programm geschrieben, wo 2 Stepper Motoren zum Einsatz kommen.
Dabei habe ich mich für die "AccelStepper" Library entschieden.

Für deine Aufgabenstellung solltest du folgende Vorüberlegungen anstellen bzw. deine Ausgangssituation näher beschreiben:

  1. wie steuerst du den Stepper an - Stichworte: H-Bridge oder Treibermodul mit dir/step (würde ich bevorzugen)
  2. willst du eine library nutzen, ja/nein (einfacher und weniger fehlerträchtig: library; lehrreicher: Ansteuerung selbst schreiben)
  3. willst du den Stepper mit Mikroschritten (microsteps) betreiben?
  4. wieviel steps benötigt dein Motor, um sich einmal zu drehen (gängig: 200)

Wenn du also, wie du oben schreibst, den Motor einmal um 360 Grad drehen lassen willst, dann fragst du Taster 1 ab (gedrückt/nicht gedrückt); bei erkennen von "gedrückt" gibst du bei "Full Step"-Modus dann 200 steps auf den Motor und ein HIGH auf den "dir"-Eingang.
Wenn Taster 2 gedrückt wurde, dann ein "LOW" auf den "dir"-Eingang und wieder 200 Impulse.
Wenn der Treiber Mikroschritte unterstützt, z.B. auf 1/4 stellen und dann braucht der Motor 4x200 = 800 Impulse, um einmal zu drehen.
Mikroschritte: je kleiner der Wert, desto "sanfter" dreht der Motor, allerdings auf Kosten des Drehmoments. Wichtig auch: den Maximalstrom gemäß Datenblatt einstellen, damit du keine Rauchspuren verursachst.

Für das sichere und prellfreie Abfragen der Taster gibt es hier wieder 2 Ansätze: "zu Fuß" programmieren (es gibt z.B. von Nick Gammon eine schöne kleine Routine dazu) oder via library (ich nutze gerne die "OneButton" library; die hat eingebaut mehrere Möglichkeiten, Taster abzufragen (ein Click, Doppelclick, Halten).

Klingt alles sehr kompliziert. Danke für die Antwort. Ich habe ein treibermodul. Für eine Umdrehung braucht der Motor 2048 Schritte. Im ersten möchte ich durch Drücken des taster1 eine ganze Umdrehung machen. Taster2 eine ganze umdrehung zurück. Dies als Anfang. Danach möchte ich das ganze auf 22 Schritte erweitern für eine ganze Umdrehung.

Hi,

nee, das ist nicht kompliziert; ich führe dich gerne durch die einzelnen Schritte deines Projekts.

2048 Schritte -> das habe ich noch nie gehört.
Bist du dir da sicher?

Bitte poste doch mal hier den Typ (ggf. auch das Datenblatt) des Motors und des Treibermoduls.

Auf dem Motor steht 28BYJ-48 / 5v DC. Dazu habe ich eine treiberkarte. War ein einsteigerset welches ich mir besorgt habe.

Dieser lässt sich wunderbar vorwärts und rückwärts drehen.
... muss ich das ganze anderst machen

Wie machst du es denn jetzt?
Irgendwas geht doch schon!

Zeig deinen Sketch und probiere den nächsten Schritt zu realisieren.

Hast du schon zwei Taster?

rpt007:
2048 Schritte -> das habe ich noch nie gehört.

Schrittmotor-Set DAYPOWER S-SPSM-5V Unipolarer Schrittmotor mit Getriebe

Tante Google hat mir einiges über den Motor und die mitgelieferte Karte berichtet.

Da ich mich mit dieser Bauart (sowohl Motörchen als auch Treibermodul) nicht auskenne, sondern ausschließlich mit bipolaren Stepper-Motoren arbeite, kann ich nicht viel weiterhelfen.
Außer mit diesem
link.

Vielleicht löst das ja schon alle Fragen auf.

Hallo und danke
Ich habe mich nach diesem Sketch gehalten.
Sketch Nr.16: Schrittmotor

Drucken E-Mail
Anleitung zum Schrittmotor

Bei diesem Schrittmotor handelt es sich um einen Schrittmotor der sich speziell für kleine Anwendungen mit dem Arduino-Board eignet. Die Besonderheit liegt darin, dass er ohne eine externe Spannungsversorgung betrieben werden kann. Der Motor entwickelt dabei ein relativ hohes Drehmoment. Dies wird durch ein Getriebe realisiert, welches innerhalb des Metallgehäuses vor dem eigentlichen Schrittmotor verbaut wurde. Dadurch wird es in dieser kompakten Bauweise überhaupt erst möglich, dass sich eine ganze Umdrehung der Antriebswelle auf 2048 Einzelschritte aufteilen lässt. Ein kleiner daraus resultierender Nachteil ist die langsame maximale Drehgeschwindigkeit.

Der Schrittmotor wird an eine Motorsteuerungsplatine angeschlossen. Diese versorgt den Motor mit ausreichend elektrischer Energie, damit die Leistung nicht von den digitalen Pins des Arduino-Boards aufgebracht werden muss. Die Steuerungsplatine gibt es in zwei Versionen, bei denen die seitlich angebrachten Pins entweder nach oben oder nach unten aus der Platine herausragen. Die Anschlussbelegung ist jedoch gleich.

Verkabelung:

PIN2 am Arduino-Board auf IN4 der Motorsteuerplatine !!! 2 auf 4 !!!

PIN3 am Arduino-Board auf IN2 der Motorsteuerplatine !!! 3 auf 2 !!!

PIN4 am Arduino-Board auf IN3 der Motorsteuerplatine !!! 4 auf 3 !!!

PIN5 am Arduino-Board auf IN1 der Motorsteuerplatine !!!5 auf 1 !!!

PIN "GND" am Arduino-Board auf GND der Motorsteuerplatine

PIN "5V" am Arduino-Board auf VCC der Motorsteuerplatine

Dies ist ein Beispielcode, der den Motor abwechselnd um 2048 Schritte (entspricht einer ganzen Umdrehung) vor- und zurückdrehen lässt.

Code:

#include <Stepper.h>

int SPMU = 32;

Stepper myStepper(SPMU, 2,3,4,5);

void setup()

{

myStepper.setSpeed(500);

}

void loop() {

myStepper.step(2048);

delay(500);

myStepper.step(-2048);

delay(500);

}

Jetzt soll das Ganze über 2 Taster funktionieren.

@agmue:
Der Schrittwinkel beträgt 5,625° (=64 Schritte/Umdrehung);
somit machen 2048 Schritte nicht eine, wie der TO oben geschrieben hat, sondern 32 Umdrehungen.
Mögl.weise hat aber das Getriebe 1:32 Untersetzung, dann stimmt's wieder.

@Witho:
was meinst du mit ".. auf 22 Schritte erweitern für eine ganze Umdrehung" ??
Da ist etwas mit der Berechnung nicht ok.

Ich würde gerne wen es geht 22 Positionen anfahren könne. Oder wenn nicht geht 20 Positionen. Ist dies machbar?

Bei diesem Getriebe-Stepper solltest du jeden der 2048 Schritte anfahren können ?

Arbeite dich mal in Taster ein.
Da jede Betätigung erstmal eine Blockade verursacht (warten bis der Motor rum ist)
kannst du dir Taster-Prellen erstmal sparen.
Aber INPUT_PULLUP statt externem Widerstand könnte dich interesssieren.

Welchen Code muss ich dafür verwenden? Für mich würde das bedeuten: wenn Taster1 (kurz) high dann dreht der Motor in der vorgegebenen Schritt. Usw weiter bei taster1. Wenn taster2 den gleichen Schritt zurück.
Ich denke wichtig sollte sein dass wen der Arduino und der Schrittmotor an den Strom gehängt wird eine exakte Position einnimmt. Strom an Arduino (und Schrittmotor) der Motor fährt an eine definierte Position. Ab dieser Position gelten die Taster eins und zwei.

Erstmal: was ist "eine exakte Position". Woran kann dein Arduino die erkennen?
Wie kommt dein Schrittmotor da hin, wenn keiner weiss wo er beim Einschalten steht?

Das ist ne gute Frage. Shit als Anfänger macht man sich nicht so weit Gedanken. Was ist das schlauste für mich. Ich denke als erstes sollte ich den Schrittmotor mit den Tastern so bewegen lassen wie ich es will. Taster1_vor, Taster_2 zurück. Wenn das klappt kann ich einen Schritt weiter gehen. Oder soll ich von Grund auf anderst starten?

Die exakte Position kannst du nur mit einem Sensor ermitteln.
Das wird z.B. bei CNC Fräsen benutzt, damit nach dem Einschalten die 0-Positionen für xyz-Achsen ermittelt werden. Von da aus fährt dann die Fräse los.

Ohne deinen mechanischen Aufbau und dein Projektziel zu kennen, kann ich nur sagen, dass du einen Sensor benötigst, der beim Anfahren deine Nullposition ergibt, von der du dann die einzelnen Taster-Aktionen starten kannst.

Und: wie sieht deine Taster-Sequenz genau aus; ist die immer die gleiche oder immer wieder anders?
Ich meine z.B.

  • Taster1 zum ersten Mal gedrückt = x1-Schritte vorwärts
  • Taster1 zum zweiten = x2-Schritte vorwärts
  • Taster2 zum ersten Mal gedrückt = x1-Schritte rückwärts oder x2 rückwärts, oder ... ?

Oh je Mine, das wird ja alles nur noch komplizierter. Die Sequenz ist immer die gleiche. Die Ausgangsposition soll auch immer die gleiche sein. Ab der Ausgangsposition beginnen die Schritte via Taster. Die Schritte via Taster sind immer gleich.

ok,
je besser du dein Projekt beschrieben kannst, umso leichter und überraschungsfreier ist dann die Umsetzung.

Dann nochmal zur Sicherheit nachgefragt, ob ich dich jetzt richtig verstanden habe:

  • Einschalten
  • Ausgangsposition anfahren
  • du betätigst Taster1 und dann wird x1 vorwärts gefahren

.. bitte jetzt ergänzen, wie es weitergeht (Taster2 und x1 zurück oder wie ?)

Wenn die Beschreibung präzise genug ist, kann man daraus Pseudo-Code oder direkt richtigen Code ableiten.

rpt007:
@agmue:
Der Schrittwinkel beträgt 5,625° (=64 Schritte/Umdrehung);
somit machen 2048 Schritte nicht eine, wie der TO oben geschrieben hat, sondern 32 Umdrehungen.
Mögl.weise hat aber das Getriebe 1:32 Untersetzung, dann stimmt's wieder.

Der Schrittwinkel ist der des Motors ohne Getriebe. Da bin ich auch erst drauf gekommen, nachdem mir nette Menschen hier aus dem Forum geholfen haben :slight_smile: