Mehrere bipolar Schrittmotoren Ansteuern, aber wie ????

@agmue:

agmue:
Dann halte ich die Füße still.

Den Fehler habe ich gefunden. Er tritt auf, wenn unmittelbar nach dem Start einer Bewegung des Steppers gleich mit rotate(0) wieder gestoppt wird. Und zwar so schnell, dass dazwischen kein IRQ der Stepper ISR auftritt. Edit: Dann wird das rotate(0) ignoriert.
Im aktuellen Masterstand auf GitHub ist es bereits behoben.

Guten Morgen MicroBahner,

Danke für deine Rückmeldung und für das break Beispiel.
Ich werde am Wochenende gleich mal versuchen die MobaTools von Github neu zu installieren.

Den sich im Kreis drehenden Teil im Loop werde ich auch noch mal etwas anders angehen (nach dem delay(2000) werde ich S2.rotate(-1); einfügen versuchen.

LG
Christian

Hallo Christian,

christian_auer_11:
Den sich im Kreis drehenden Teil im Loop werde ich auch noch mal etwas anders angehen (nach dem delay(2000) werde ich S2.rotate(-1); einfügen versuchen.

Nicht nur ein Teil des loop dreht sich im Kreis - Alles was im loop steht wird immer wieder in einer Endlosschleife ausgeführt (Daher ja auch der Name :wink: ).
Dein Problem ist, dass Du in 2 gleichen if-Abfragen etwas gegensätzliches ausführst. Da musst Du ansetzen.

Hallo MicroBahner,

Danke für deine Erklärung.
Jetzt ist mir klar das sich die 2 If abfragen leider gegenseitig aushebeln :-[

Eine Idee hätte ich noch, bevor ich mich wohl durch das auf mich sehr kompliziert anmutende Kapitel mit den Schrittketten durchkämpfen muss :roll_eyes:

Kann der Arduino eigentlich einen Tasterstatus so lange speichern bis er durch einen anderen Status ersetzt wird?

In meinen Fall wäre es nachdem der Schrittmotor kurzzeitig die Drehrichtung ändert.

  if ( sensorstate == 0 && taster.state(Taster3) == HIGH)      // Längsschlitten bleibt gestoppt, der Vertikalschlitten dreht sich solange bis er den Endschalter 3 aktiviert wird und verweilt dort für 2 Sekunden
  {
     S1.rotate(0);
     S2.rotate(0);
     delay(500);  
     S2.writeSteps(-500);     
  }

Wenn der Schrittmotor jetzt die Drehrichtung ändert(was ja kurzzeitig funktioniert) bis wieder die vorher stehende if Abfrage eingreift, ändert sich auch der Tasterzustand von Taster3 von pressed auf released.
Da der Taster 3 noch bis dahin nie betättigt war wäre das released (aber irgendwo gespeichert) eventuell eine Option für eine erneute IF Abfrage, damit ich ich den S2 wieder gegen den UZ-sinn bis zum Taster4 nach oben drehen lassen kann.

Auf Seite 10 der MobaTools habe ich den Befehl (myButtons.forceChanged() ) gefunden => von der Beschreibung her ist mir noch nicht so ganz klar was hier pasiert => evtl hierfür geeignet ?
Siehst Du hier eventuell eine Möglichkeit mit dem Speichern des Tasterzustandes für eine if Abfrage, oder geht hier ohne die Schrittketten nichts mehr ?

LG
Christian

christian_auer_11:
Kann der Arduino eigentlich einen Tasterstatus so lange speichern bis er durch einen anderen Status ersetzt wird?

Wenn Du es entsprechend programmierst, dann kann der Arduino das. Dafür werden bekanntermaßen Variablen verwendet.

Wenn Du die Verwendung von Schrittketten verstanden hast, werden Dir diese Fragen überflüssig vorkommen, so wie mir jetzt. Für mich war die Entdeckung der Schrittketten ein befreiendes AHA-Erlebnis.

christian_auer_11:
bevor ich mich wohl durch das auf mich sehr kompliziert anmutende Kapitel mit den Schrittketten durchkämpfen muss :roll_eyes:

Ich befürchte, da wirst Du nicht drumherumkommen. Und wenn Du es einmal verstanden hast, wirst Du sehen, dass dann alles viel leichter geht. Deinen Maschinenablauf in einem 'dicken Klops' zu programmieren wird nicht funktionieren.

Du musst dir die Abläufe an deiner Maschine vor Augen führen, und sie in einzelne Schritte zerlegen. So ähnlich wie Du das am Anfang beschrieben hast, aber schon etwas genauer und detaillierter. Das kannst nur Du machen, denn nur Du kennst die Abläufe an der Maschine. Ich kann mir bisher noch nicht so richtig vorstellen, wass da wie ablaufen soll. Vielleicht zeigst Du ja auch mal ein Bild davon.

Wenn Du diese Abläufe beschrieben hast, wirst Du sehen, dass Du immer bestimmte Zustände deiner Maschine hast, in der auf bestimmte Dinge geachtet werden muss. Andere Dinge/Schalter sind in diesem Ablaufmoment gar nicht relevant. So beschreibst Du den Ablauf eben Schritt für Schritt. Das hat erstmal mit Programmieren noch gar nichts zu tun. Die Zerlegung des Ablaufs in einzelne Schritte ist dann erst die Basis für's Programmieren. Und da können wir Dir dann wieder helfen.

Also versuche erstmal die Bewegungsabläufe an der Maschine detailliert zu beschreiben. Auf welche Signale reagiert die Steuerung, was muss sie wann auslösen. Je genauer Du das beschreibst, umso einfacher ist hinterher das Programmieren.

Also mach erstmal den Kopf frei, denke garnicht so sehr an die programmtechnische Umsetzung sondern beschreibe uns ( und damit auch dir :wink: ) exakt was an der Maschine abläuft Schritt für Schritt...

Hallo Agmue,

Wie bist Du in das Thema Schrittketten hineingewachsen?
Hattest Du irgendwelche Tutorials ?

Habe auf YouTube danach gesucht, und habe hierzu einen Kurs zur sps Programmierung gefunden.

https://sps-tutorial.com/info-schrittkettenprogrammierung/

Allerdings sind das denke ich andere Programmiersprachen.
Was hälst Du davon?

Noch eine Frage zur Schrittkette.
Kann ich mir das so vorstellen, das jeder Schritt (case) nach und nach abgefahren wird.
Nehmen wir als Beispiel ich bin bei Schritt 5 und beende gerade diesen, dann fragt der Arduino nur noch den Schritt 6 und nachfolgende Schritte ab, und lässt die vorhergehenden Schritte 1-5 aus bis der Arduino dann zum Ende angekommen ist? Danach beginnt alles wieder von vorne ?

LG
Christian

Hallo MicroBahner,

Danke für deine aufbauenden Worte.

Ich werde wie von Dir angemerkt einen detaillierten Ablauf der Maschine machen.

LG
Christian

Hast Du früher mal mit der elektrischen Eisenbahn gespielt? Oder kannst es dir vorstellen?
Ich habe mal ein Tutorial geschrieben, wo ich das Prinzip solcher Ablaufsteuerungen anhand einer im Kreis fahrenden Eisenbahn ( der 'loop' :wink: ) beschrieben habe.

christian_auer_11:
Ich werde wie von Dir angemerkt einen detaillierten Ablauf der Maschine machen.

Das wäre ein ganz wichtiger Schritt 8)

Hallo Christian,

Schrittketten bzw. in englisch StateMachine sehen dann kompliziert aus wenn man als erstes Beispiel
in ein Programm reinspringt das eine Schrittkette mit 6-10 Schritten und jede Menge code drum herum benutzt.
Oder wenn man ein schlecht erklärendes Tutorial erwischt.

Eine Schrittkette enthält mehr als ein einfaches Blink-Programm schon klar. Wenn es in kleinen Schritten erklärt wird dann braucht das mehr Zeit jeder einzelne Schritt ist dann aber recht leicht verständlich.

Nehmen wir als Beispiel ich bin bei Schritt 5 und beende gerade diesen, dann fragt der Arduino nur noch den Schritt 6 und nachfolgende Schritte ab, und lässt die vorhergehenden Schritte 1-5 aus

Diese Vorstellung ist nicht ganz korrekt. Es ist kein Auslassen von Schritten sondern eine Art If-bedingung die aber nicht "if" heißt sondern switch-case.

Aus den ganzen case-bedingungen die da definiert sind trifft immer nur eine zu.
Eine int-Variable kann immer nur eine Zahl enthalten z.B. die Zahl 1, die Zahl 2, die Zahl 1024, die Zahl -128 usw.

switch (MyVar)
case 1:

case 2:

case 3:
usw.

falls MyVar den Wert 1 hat dann führe den code-Block hinter case 1 aus
falls MyVar den Wert 2 hat dann führe den code-Block hinter case 2 aus
falls MyVar den Wert 3 hat dann führe den code-Block hinter case 3 aus
usw.

dieses Tutorial hat sehr viele Beispiele und erklärt es in kleinen Schritten:
Schaue dir mal dieses Tutorial an und schreibe deine Meinung dazu. Es interessiert mich sehr
ob speziell dieses Tutorial wirklich leicht verständlich ist.

State Machine - ganz einfach

viele Grüße Stefan

Guten Morgen Stefan,

Danke für die Erklärung :slight_smile:

Ich werde mir deine Beispiele und auch die vom Wechselblinker mit Ampel welche ich gestern Abends von MicroBahner erhalten habe durcharbeiten.
Ich schreibe Dir dann was nicht so verständlich ist.

Je nachdem wie viele Beispiele es sind kann es unter Umständen etwas dauern bis ich durch bin, da neben meiner Arbeit auch noch die Heuernte auf unserem Hof und eine Baustelle ansteht.

Eine genaue Projektbeschreibung wie von MicroBahner beschrieben möchte ich noch zuvor machen, nicht das sich dann herausstellt das dies mit dem Arduino evtl. gar nicht geht => wobei ich das nicht glaube.
Ich kaufe mir schon immer nebenher ein paar Komponenten (Schrittmotor+Motortreiber, Schneckengetriebe, .....), hier wäre es dann schade wenn es dann wirklich nicht klappen würde.

LG
Christian

MicroBahner:
Also versuche erstmal die Bewegungsabläufe an der Maschine detailliert zu beschreiben. Auf welche Signale reagiert die Steuerung, was muss sie wann auslösen. Je genauer Du das beschreibst, umso einfacher ist hinterher das Programmieren.

Hallo an alle :slight_smile:

Im Anhang habe ich die Funktionsbeschreibung zu meinem Projekt.
Ich habe sie so detailiert wie möglich erstellt.
Es befinden Sich auch gesamt Bilder aus meiner derzeitigen Planung im Anhang.
Des weiteren habe ich ein Einzel Bild von jedem Schrittmotor mit grafischer Beschreibung der Funktion angehängt.
Ich würde gerne einen Schleifautomaten für die Messer unseres Balkenmähers bauen.

Zum Einsatz kommen 5 Stk Bipolare Schrittmotoren S1-S5.
S4 und S5 treiben ein Schneckengetriebe an.
Es gibt 4 Stk Endschalter => jeweils 2 Stk für S1 und 2 Stk für S2
Es kommt auch 1 Stk Kap. Sensor vor, welcher S1 von Klinge zu Klinge fahren lässt.

Den Motor, welcher die Schleifscheibe antreibt weiß ich derzeit noch nicht genau (Drehzahl ?, Größe? …).
Ich stelle mir die Ansteuerung mittels Frequenzumrichter vor.
Der Schleifmotor sollte die Drehrichtung ändern können, Motorsteuerung (Drehrichtung sowie an und aus) sollte dann auch vom Arduino kommen.

LG
Christian

Funktionsbeschreibung.pdf (668 KB)

MicroBahner:
Ich habe mal ein Tutorial geschrieben, wo ich das Prinzip solcher Ablaufsteuerungen anhand einer im Kreis fahrenden Eisenbahn ( der 'loop' :wink: ) beschrieben habe.

Werde ich zukünftig als Alternative zum Nachtwächter anbieten :smiley:

christian_auer_11:
Wie bist Du in das Thema Schrittketten hineingewachsen?

Ich stamme aus der Informatiksteinzeit, weshalb ich mein Wissen hauptsächlich aus Büchern habe. Das Füllhorn weltweiter Informationsquellen stand mir noch nicht zur Verfügung. Videotutorials sind mir ein Gräul, ich kann mich damit nicht anfreunden.

Gelernt habe ich mit Struktogrammen (Nassi-Shneiderman-Diagramm) dem Spagetticode den Kampf anzusagen. Wenn man die Aufgabenanalyse und das Struktogramm gut macht, geht das Programmieren fast von alleine. Die Sprache ist dabei relativ egal, ich habe das sogar in Assembler für den 6502 verwendet. Moderne Programmiersprachen unterstützen die strukturierte Programmierung mit ihrer Syntax.

Hier im Forum habe ich anfänglich von Programmen von jurs gelernt. Da habe ich mir was abgeschaut und plötzlich schrieb mir jemand, ich könne meinen endlichen Automaten doch auch anders gestalten. Aha, endlicher Automat, was soll das sein? Inzwischen zähle ich den endlichen Automaten (= Schrittkette, = finite state machine) zu den wichtigsten Gestaltungselementen innerhalb der Schleife.

Ich bin mir aber sicher, jeder hat einen anderen Zugang zum Lernen. Manche lesen gerne tausendseitige Bücher, mir sind praktische Übungen wichtig, sonst geht es nicht in mein Gehirn. Für mich ist Programmieren ja nur Hobby, das macht eventuell auch was aus.

PS: Sorry, der Text schlummerte unveröffentlicht, habe ihn erst jetzt wiedergefunden :-[

Hallo Christian,
das ist schon ein sehr ambitioniertes Projekt. Einmal von der Mechanik her ( ok, ich bin kein Maschnenbauer, kann daher nichts dazu sagen ), als auch von der Steuerung her. Du hast da ja einige Achsen zu steuern.

Ein wesentliches Problem scheint mir die exakte Ausrichtung der Schleifscheibe zu sein. Wie willst Du sicherstellen, dass die immer exakt an der jeweiligen Klinge ausgerichtet ist? Es hift ja nichts, wenn sie 1/10 mm oberhalb der Klinge in der Luft schleift. Ebensowenig wenn sie Scharten in die Klinge schleift.
Bei der Größe des gesamten System bekommst Du auch entsprechende Leitungslängen, womit das Einkoppeln von Störungen wahrscheinlicher wird. Nicht umsonst wird bei professionellen Steuerungen ein nicht unerheblicher Aufwand in die Entstörung der Signalanschlüsse gesteckt.

Ich denke, Du wirst einige Hürden überwinden müssen. Wie man eine Schrittkette programmiert dürfte dabei die kleinste sein :wink:

Hallo MicroBahner,

Ambitioniert trifft es ganz gut :slight_smile: , da es auch mein erstes Projekt mit einem Arduino ist.

MicroBahner:
Ein wesentliches Problem scheint mir die exakte Ausrichtung der Schleifscheibe zu sein. Wie willst Du sicherstellen, dass die immer exakt an der jeweiligen Klinge ausgerichtet ist? Es hift ja nichts, wenn sie 1/10 mm oberhalb der Klinge in der Luft schleift. Ebensowenig wenn sie Scharten in die Klinge schleift.

Ja da hast Du völlig recht, ein einfaches Senken des Motors S2 wird hier nicht zielführend sein.

Ziel ist es, dass der Schlitten von S2 nicht fix mit der „Mutter“ welche auf der Spidel fährt verbunden ist => also sozusagen in eine Richtung entkoppelt => siehe Skizze im Anhang.

Ich möchte dies mit einer Knagge lösen.
Der Schlitten wird an dieser Knagge nach unten bzw. oben gefahren, wobei ich mit dieser Knagge aber keine Druckkraft auf die Klinge nach unten aufbauen kann, da diese ja entkoppelt ist.
Durch diese Entkoppelung erhalte ich quasi eine Schwimmstellung.

Die Auflagerkraft der Schleifscheibe auf die Klinge würde ich dann über einstellbare Zugfedern lösen.

Durch die Schwimmstellung ist es dann auch nicht so tragisch wenn der Motor S1 mit den Kap. Sensor nicht auf den millimeter genau stoppt.

Da die Hub-Bewegung (Kurbeltrieb von S3) ständig an ist, kann auch beim Senken von S2 keine Kerbe eingeschliffen werden, da die Schleifscheibe sowie sie auf der Klinge aufliegt schon wieder die Position auf der Klinge durch den Kurbeltrieb ändert.

Die Schwenkantriebe S4 und S5 werden extrem genau funktionieren, da ich dort Schneckengetriebe
Verwende.

Ich verwende die Übersetzung 40:1 und 50:1 => d.h. der Schrittmotor muss für eine volle Umdrehung am Getriebe-Ausgangsstummel 40 bzw. 50 volle Umdrehungen leisten.

Ein weiterer Vorteil dieses Getriebe ist, dass es selbsthemmend ist und auch ohne Bremsmoment des Motors in der selben Lage bleibt (abgesehen von einem vernachläsigbaren Getriebespiel bei einem Lastwechsel)

MicroBahner:
Bei der Größe des gesamten System bekommst Du auch entsprechende Leitungslängen, womit das Einkoppeln von Störungen wahrscheinlicher wird. Nicht umsonst wird bei professionellen Steuerungen ein nicht unerheblicher Aufwand in die Entstörung der Signalanschlüsse gesteckt.

Ich möchte gerne einen kleinen „Schaltschrank“ direkt auf den Schlitten welcher von S1 angetrieben wird aufbauen.
Somit fährt der „Schaltschrank“ immer mit der Position des Schleifers mit und die Kabellängen vom Arduino zu Motor, Sensor, Taster…. dürften dadurch nicht wesentlich länger als ca. 1m werden (vermutlich eher deutlich darunter).

Lang muss dann nur das normale 230V Kabel für das Netzteil sein, welches sich auch im „Schaltschrank“ befindet.

Für den Arduino habe ich mir auch noch ein Schraubklemmenblock gekauft, damit ich mit „normalen“ Kabeln zu den Pins komme.

Derzeit machen mir nur die „Schrittkette“, bzw die Ansteuerung des 230 V Gleichstrom Schleiffmotors mittels Frequenzumrichter über den Arduino Bauchschmerzen.

Aber ich Denke, ich bekomme von euch immer wieder die notwendigen „Schupser“ :slight_smile: damit sich das Projekt in die Richtige Richtung entwickeln kann.

Zu den Schrittketten habe ich ja schon mal die ersten Beispiele von euch erhalten, ich hoffe dass ich diese dann von LED`s noch irgendwie auf die Schrittmotoren ummodeln kann :), ich bin mir aber ziemlich sicher, das ich eine kleine Starthilfe gut gebrauchen könnte :blush: .

LG
Christian

MicroBahner:
Ich denke, Du wirst einige Hürden überwinden müssen. Wie man eine Schrittkette programmiert dürfte dabei die kleinste sein :wink:

Ich habe mir gestern die Bilder angesehen und kann dieser Aussage nur zustimmen. Ich kann mich nicht entsinnen, schon mal eine solch komplexe Anlage hier im Forum gesehen zu haben. Vor lauter Achsen wird einem regelrecht schwindelig.

Um die Referenzfahrt zu testen, habe ich mein Grillrobotermodell aus einem anderen Thema um eine Achse mit bipolarem Motor erweitert, aber für fünf Achsen fehlen mir die Motoren. Da wird es mit der Hilfe leider dünne.

GrillRobi mit zwei Achsen:

Hallo Agume,

Deine Metallplatten scheinen mir sehr Vorteilhaft für das entwickeln von Projekten zu sein.
Wie heißen diese ? , habe soetwas noch nie gesehen ::slight_smile: .

Kannst Du mir eventuell weiterhelfen, warum meine Links nur als Text und nicht als Link hier im Forum dargestellt werden?

agmue:
Ich habe mir gestern die Bilder angesehen und kann dieser Aussage nur zustimmen. Ich kann mich nicht entsinnen, schon mal eine solch komplexe Anlage hier im Forum gesehen zu haben. Vor lauter Achsen wird einem regelrecht schwindelig.

Ich glaube das mit den 5 Achsen erscheint nur auf den ersten Blick etwas wild, im Grunde genommen werden alle nach und nach angesteuert.
Meine Textliche Beschreibung ist wahrscheinlich auch etwas sehr trocken zum Lesen, so dass man hier schnell den Überblick verliert.
Ich hätte gerne ein Viedeo im CAD erstellt, welches die Bewegungsabläufe simuliert, dies ist aber sehr viel Arbeit wo ich dann wohl mehrere Tage damit beschäftigt wäre.

LG
Christian

Deine Metallplatten scheinen mir sehr Vorteilhaft für das entwickeln von Projekten zu sein.
Wie heißen diese ? , habe soetwas noch nie gesehen ::slight_smile: .

Vor ca. 50..60 Jahren hatte ich solch einen Trix-Metallbaukasten.

michael_x:
Vor ca. 50..60 Jahren hatte ich solch einen Trix-Metallbaukasten.

Irgendwie wurde vergessen, den wegzuwerfen, jetzt freue ich mich darüber.

christian_auer_11:
Kannst Du mir eventuell weiterhelfen, warum meine Links nur als Text und nicht als Link hier im Forum dargestellt werden?

Text markieren, dann "Insert a link" klicken und URL eintragen.

agmue:
Irgendwie wurde vergessen, den wegzuwerfen, jetzt freue ich mich darüber.

Bei mir wurde das Wegwerfen leider nicht vergessen :slightly_frowning_face:

@Christian: Mechanisch kann ich da nicht mitreden - das ist mir mehrere Hausnummern zu hoch ;).
Was Du aber auch berücksichtigen musst: Du dürftest auch eine vernünftige Bedientafel für das Ganze benötigen. Ich denke, da gibt es einiges an Parametern einzustellen, was man nicht fest im Programm definieren kann. Und wo soll die Bedientafel dann hin?.
Die Störungen solltest Du auf keinen Fall ausser Acht lassen. Allein dein 230V Schleifmotor dürfte da einiges produzieren. Und ob dein Schraubklemmenmodul so eine gute Idee ist? Du wirst ja - was die Elektronik angeht - nicht mit dem nackten Arduino auskommen. Was hast Du als Treiber für deine Schrittmotore vorgesehen?