MobaTools vs. Accelstepper

Hallo miteinander,

in beide Tool habe ich mich noch nicht wirklich ganz eingearbeitet, will es jedoch vermeiden mich in eins einzuarbeiten und dann zu merken, das andere wäre eventuell doch besser gewesen und ich muss meinen Code neu schreiben, daher die frage welche verteile bietet welche der beiden Bibliotheken.

MobaTools vs. Accelstepper

Ich nutze

  • 4 Schrittmotoren
  • 1 Schrittmotor (noch in Planung nicht sicher)
  • 8 NOT-HALT Sensoren (Induktiv)
  • 6 NOT-AUS Schalter (Öffner die die Leitung EAN unterbrechen)
  • 6 NOT-INFO Schalter(Lösen zeitgleich mit NOT-AUS aus)
  • 1 Heizung (Ein Aus Schaltung Relais)

ich möchte per Kamera etwas erfassen und die Motoren müssen dann zu diesem Objekt geführt werden.
Wenn das Objekt verschoben wird, soll sofort reagiert werden und das Objekt wieder angefahren werden.
Sprich ich muss von Außen (außerhalb vom Arduino) Koordinaten durchgeben und der Arduino muss das dann umsetzen.

Gruß Mücke

Egal welche Lib: NOT-AUS sollte immer außerhalb des Prozessors erledigt werden und ein automatisches Wiedereinschalten verhindern.

Gruß Tommy

Was genau soll das werden? Ne Fräsmaschine? Ein Drucker? Eine Bestückungsmaschine? Eine Abfüllmaschine? .....?

Lieben Gruß,
Chris

@Tommy: du hast recht, einen Notaus den man von Hand betätigen kann, bzw. beim öffnen von Gehäusen etc. ist separat angebracht und macht die ganze Anlage Stumm. so das nirgends mehr Strom drauf ist, alle bremsen Aktiv sind das nichts herunter fallen kann, und man muss dann auch separat einen schlüsseln drehen das man wieder Strom bekommt.

Die Not AUS die ich oben beschrieben habe sind welche an den Achsen wenn mein Schlitten durch Schrittverlust zu weit gefahren ist. Damit erst einmal nichts kaputt geht wird der entsprechende Motor Strom los geschaltet.
das ist jedoch ein anderes Thema glaube ich.

@Chris: das wird ein Art Abfüllmaschine mit Bestückungs-Abfüllmaschine, also so kann man es zumindest interpretieren.

gruß Mücke

Hallo Crazy Mosquito,

die MobaTools laufen nur auf bestimmter Hardware, welche soll es denn bei Dir werden?

Was mir gerade so auf die Schnelle einfällt:

  • A: Die Accelstepper erzeugt die Steps durch Methodenaufrufe im Sketch. Deshalb ist sie praktisch auf allen Plattformen lauffähig. Allerdings muss man dabei im Sketch auch selbst darauf achten, dass diese Methoden oft genug aufgerufen werden. Man ist also im Sketch auch vom Step-Timing abhängig.
  • M:* Die MobaTools erzeugen die Steps in einem Timerinterrupt. Dies ist ( solange die Interrupts nicht zu lange gesperrt werden ) vollkommen unabhängig vom Sketchablauf. Man ist da also unabhängig vom Step-Timing. Allerdings sind die MobaTools dadurch hardwareabhängig und laufen nicht auf allen Plattformen Derzeit auf AVR(ATmega), STM32F1 und ESP8266
  • A: Bei mehrern gleichzeitig laufenden Steppern ist die maximale Steprate von der Stepperzahl abhängi. Die Zahl der Stepper ist allerdings nicht prinzipiell begrenzt.
  • M:* Es können maximal 6 Stepper angesteuert werden. Die maximale Steprate ist aber unabhängig von Stepperzahl. Bei nur einem Stepper ist die maximale Rate langsamer als bei der Accelstepper ( kann aber in dem Fall 'getuned' werden )
  • A: Die Accelstepper kann extrem niedrige Stepraten
  • M:* Die niedrigste Steprte ist 1Step/10Sek, und kann nur ganzahlig angegeben werden.
  • A: Rampen sind zeitbasiert ( in Steps/s² )
  • M:* Rampen sind streckenbasiert ( in Steps )

Servus,

agmue:
Hallo Crazy Mosquito,

die MobaTools laufen nur auf bestimmter Hardware, welche soll es denn bei Dir werden?

Bin mir jetzt nicht sicher was du alles genau von mir wissen möchtest also Liste ich mal den aktuellen Stand auf:

1 x Schrittmotor [MOT-AN-S-060-005-042-M-C-AAAC "IGUS"]
2 x Schrittmotor - 8,7 Nm 6,0 A
1 x Motoren-Steuerung [SK5045]
3 x Motoren-Steuerung [SK8060]
1 x Arduino Mega 2560
8 x LJ12A3-4-Z/AX
6 x Doppelte Taster [Micro Limit Switch]

ich glaube der Rest ist nicht so wichtig.

Gruß Mücke

Servus Franz-Peter,

MicroBahner:
Was mir gerade so auf die Schnelle einfällt:

:o so auf die schnelle, das ist schon einiges, ... und ich muss mich erst einlesen :confused:

MicroBahner:
A: Die Accelstepper erzeugt die Steps durch Methodenaufrufe im Sketch. Deshalb ist sie praktisch auf allen Plattformen lauffähig. Allerdings muss man dabei im Sketch auch selbst darauf achten, dass diese Methoden oft genug aufgerufen werden. Man ist also im Sketch auch vom Step-Timing abhängig.
M: Die MobaTools erzeugen die Steps in einem Timerinterrupt. Dies ist ( solange die Interrupts nicht zu lange gesperrt werden ) vollkommen unabhängig vom Sketchablauf. Man ist da also unabhängig vom Step-Timing. Allerdings sind die MobaTools dadurch hardwareabhängig und laufen nicht auf allen Plattformen Derzeit auf AVR(ATmega), STM32F1 und ESP8266

Wenn ich das richtig verstanden habe.
A: der Motor macht nur was wenn auch der Befehl RUN aufgerufen wird, wird dies nicht oft genug gemacht macht der Motor entsprechend nichts.
M: Wenn der Motor laufen soll macht er das auch unabhängig was meine Plattform gerade macht. (außer sie Blockiert, ist abgestürzt)

M: nutzt für die Motoren demnach die Hardwaremäßigen Interrupts?

MicroBahner:
A: Bei mehrern gleichzeitig laufenden Steppern ist die maximale Steprate von der Stepperzahl abhängi. Die Zahl der Stepper ist allerdings nicht prinzipiell begrenzt.
M: Es können maximal 6 Stepper angesteuert werden. Die maximale Steprate ist aber unabhängig von Stepperzahl. Bei nur einem Stepper ist die maximale Rate langsamer als bei der Accelstepper ( kann aber in dem Fall 'getuned' werden )

Ich verstehe die Aussage "die maximale Steprate von der Stepperzahl abhängi" leider gerade nicht. Was ist damit genau gemeint?

M: Die maximale (6) Stepper kommt daher da es nur 6 Interrupts auf dem "Arduino Mega" gibt?

MicroBahner:
A: Die Accelstepper kann extrem niedrige Stepraten
M: Die niedrigste Steprte ist 1Step/10Sek, und kann nur ganzahlig angegeben werden.

Ok, interessant, ist für mich glaube ich nicht ausschlaggebend, jedoch gut zu wissen.

MicroBahner:
A: Rampen sind zeitbasiert ( in Steps/s² )
M: Rampen sind streckenbasiert ( in Steps )

Ok, wenn ich das richtig verstehe, ist das einfach nur eine andere art und weise die Rampe dann anzugeben, muss anders berechnet werden.

Gruß Mücke

Hallo Mücke,

Muecke:
Wenn ich das richtig verstanden habe.
A: der Motor macht nur was wenn auch der Befehl RUN aufgerufen wird, wird dies nicht oft genug gemacht macht der Motor entsprechend nichts.
M: Wenn der Motor laufen soll macht er das auch unabhängig was meine Plattform gerade macht. (außer sie Blockiert, ist abgestürzt)

M: nutzt für die Motoren demnach die Hardwaremäßigen Interrupts?

Ja, das hast Du richtig verstanden. Die MobaTools nutzen einen Timerinterrupt. D.h. sie belegen auch einen HW-Timer, der nicht für andere Zwecke genutzt werden kann. Auf UNO/Nano ist das der Timer1, auf dem Mega/Leonardo/Micro der Timer 3.

Muecke:
Ich verstehe die Aussage "die maximale Steprate von der Stepperzahl abhängi" leider gerade nicht. Was ist damit genau gemeint?

Wie Du ja auch schon erkannt hast, erzeugt die AccelStepper die Impuls in der run-Methode. Die braucht dazu eine bestimmte Zeit ( wenn ein Step erzeugt werden muss, ca 200µs auf einem 16MHz ATmega ). Hast Du mehrere Stepper, musst Du auch entsprechend viele run-Methoden aufrufen. Müssen die alle gleichzeitig Steps erzeugen, addieren sich die Zeiten. Bei niedrigen Stepraten kommt das 'gleichzeitig' eher selten vor, bei hohen schon.

Muecke:
M: Die maximale (6) Stepper kommt daher da es nur 6 Interrupts auf dem "Arduino Mega" gibt?

Nein, damit hat das nichts zu tun. Die Pulse für alle Stepper werden im gleichen Timerinterrupt erzeugt. Bei vielen Steppern, und hohen Stepraten wird dann die Ausführungszeit dieses Interrupts zu lang. Deshalb habe ich das auf 6 Stepper begrenzt. Die maximale Steprate wird von den MobaTools so begrenzt, dass diese Rate auch bei 6 Steppern erreicht wird. Auf einem ATmega sind das max. 2500 Steps/Sek.
Die Accelstepper kennt keine solche Begrenzung. Ob die eingestellte Steprate erreicht wird, hängt dann von deinem Sketch und der Prozessorgeschwindigkeit ab.

Muecke:
Ok, wenn ich das richtig verstehe, ist das einfach nur eine andere art und weise die Rampe dann anzugeben, muss anders berechnet werden.

Im Prinzip schon. Allerdings ist auch die Charakteristik der Rampe etwas anders. Der mathematische Beschleunigungswert ( Steps/s² ) ist bei den MobaTools während der Rampe nicht konstant ( sie laufen etwas 'weicher' los ). In der Praxis fällt das aber meist nicht auf.

Ok, ich glaube ich habe das so halbwegs verstanden, zumindest in meinem Kopf gerade ;-).

Das mit dem Timerinterrupt …

Mir ist bekannt das ich Interrupts auf den Arduino habe, das sind definierte Pins, denen ich einen Code geben kann, so das wenn dort etwas passiert das Hauptprogramm unterbrochen wird.

Ist ein Timerinterrupt dann ein separater Bereich der Abgekoppelt vom Hauptprogramm Startet und arbeitet?
kann dieser Timerinterrupt alle Pins auf dem Bord ansprechen?

Sorry für die vielen Anfänger fragen, ich kenne mich damit noch nicht so aus. und versuche es zu verstehen.
um einschätzen zu können welches LIB ich verwenden sollte.

Mit der Accelstepper habe ich schon etwas gespielt :slight_smile:

// Motorn Test mit ENA NOT-AUS !!!
// ENA PIN mit den Status LOW Treiber Aktiv 
// ENA PIN mit dem Status HIGH Treiber Deaktivirt

#include <AccelStepper.h>    // Installiren der AccelStepper LIB 
// Konfiguration: Achse X (Zahnriemen)     
//   int DIR = 11;
//   int PUL = 12;
//   int ENA = 23;
// Konfiguration: Achse Z (Spindel) 
//   int DIR = 9;
//   int PUL = 10;
//   int ENA = 25;
// Konfiguration: Achse Y  (Getriebe: M = 40:1 = A) 
   int DIR = 7;
   int PUL = 8;
   int ENA = 3;                    
// Konfiguration: Achse A (Getriebe: M = 38:1 = A) 
//   int DIR = 5;
//   int PUL = 6;
//   int ENA = 4;  
   AccelStepper Achse(1, PUL, DIR);

void setup()
{
   pinMode(ENA, OUTPUT);                   // ENA PIN als Outpuut Deklariren
   digitalWrite(ENA, LOW);                 // Treiber Aktiviren 
// digitalWrite(ENA, HIGH);                // Treiber Deaktiviren 
   Achse.setAcceleration(800);             // Legt die Beschleunigungs-/Verzögerungsrate fest.
   Achse.setMaxSpeed(4000);                // Legt die maximal zulässige Geschwindigkeit fest. 
   Achse.move(16000);                     // Legen Sie die Zielposition relativ zur aktuellen Position fest. 
}

void loop()
{
   Achse.run();  
   // Den Motor abfragen und einen Schritt machen, wenn ein Schritt fällig ist, 
   // und dabei Beschleunigungen und Verzögerungen durchführen, um die Zielposition 
   // zu erreichen. Sie müssen dies so oft wie möglich aufrufen, aber mindestens 
   // einmal pro Mindestschrittzeitintervall, vorzugsweise in Ihrer Hauptschleife. 
   // Beachten Sie, dass jeder Aufruf von run() höchstens einen Schritt macht, und 
   // dann auch nur dann, wenn ein Schritt fällig ist, basierend auf der aktuellen 
   // Geschwindigkeit und der Zeit seit dem letzten Schritt. 
} // LOOP

Werde mich heute Abend versuchen mit der MobaTools LIB.

Aktuell habe ich keinen Nachteil der MobaTools LIB für mich gesehen, jedoch einen Großen voreilt, der Endwickler ist selbst im Forum :wink: Aktiv.

Gruß Mücke

Muecke:
Mir ist bekannt das ich Interrupts auf den Arduino habe, das sind definierte Pins, denen ich einen Code geben kann, so das wenn dort etwas passiert das Hauptprogramm unterbrochen wird.

Ist ein Timerinterrupt dann ein separater Bereich der Abgekoppelt vom Hauptprogramm Startet und arbeitet?
kann dieser Timerinterrupt alle Pins auf dem Bord ansprechen?

Im Prinzip funktioniert ein Timer Interrupt genaus so, wie Du das bei den Pin-Interrupts geschrieben hast. Nur das der Auslöser eben nicht ein Ereignis an einem Pin ist, sondern ein Ereignis aufgrund eines internen Timers. D.h. wenn dieses Timerereignis auftritt, wird das Hauptprogramm unterbrochen, und die ISR (=Interrupt Service Routine ) abgearbeitet. Da die ISR ja auch wieder eine (fast) normale Funktion ist, kann man aus der heraus auch beliebige Pins ansprechen. Ein paar Dinge sind in einer ISR allerdings zu beachten, deshalb nur 'fast' normal ;).

Dann habe ich das richtig verstanden in meinen Kopf, und schon wieder was dazu gelernt, was es alles gibt.
Das ist sehr interessant.

danke für die kurze Erklärung.

Gruß Mücke

Muecke:
Bin mir jetzt nicht sicher was du alles genau von mir wissen möchtest also Liste ich mal den aktuellen Stand auf:

Der Mega 2560 ist entscheidend, denn auf dem laufen die MobaTools. Hättest Du einen ESP32 gewählt, würde das leider nicht gelten.

Muecke:
ich glaube der Rest ist nicht so wichtig.

Du unterschätzt die Farbe der Kabel :grin:

Den Rest hat Franz-Peter schon ausführlich erklärt.

Ein Timer ist eine Hardware im Prozessor, deren Vergleichsregister mit einem Wert gefüllt wird. Ein Zählregister wird je Prozessortakt eins rauf gezählt und bei Gleichheit mit dem Vergleichsregister wird das Zählregister wieder auf Null gesetzt, das normale Programm unterbrochen und eine Funktion (ISR) ausgeführt. Am Ende der Funktion wird das unterbrochene Programm fortgesetzt.

Dies ganz vereinfacht beschrieben, tatsächlich kann man ganze Abhandlungen über die vielfältigen Möglichkeiten eines Timers schreiben. Beispielsweise gab es eine Beschreibung mit einem Bergsteiger, der Takt für Takt den Berg besteigt, dann an einen Wegweiser gelangt (Vergleichsregister) und mit einem Fallschirm (ISR) runterspringt. Leider habe ich beim Korrekturlesen den Autor verärgert, weshalb diese anschauliche Beschreibung nie das Licht der Öffentlichkeit erblickt hat. Daher kann ich leider nicht daraus zitieren.

Bei der Accelstepper Bibliothek mußt Du sehr blockadearm programmieren, bei den MobaTools darfst Du schludriger sein. Ich rate Crazy Mosquito daher zu den MobaTools, sorry.

Muecke:
Sorry für die vielen Anfänger fragen, ich kenne mich damit noch nicht so aus.

Anfänger seit 2013 mit 2222 Beiträge :confused: :wink:

@Mücke: Glückwunsch zuir Schnapszahl.

Gruß Tommy

@Schnapszahl: Ömm, muss ich jetzt einen ausgeben? :o

@ElEspanol: naja wenn man sich bei Beiträge anschaut dann sieht man schon das ich nicht der hellste und beste Programmierer bin, wobei ich das bei mir immer noch zusammen Kleistern nennen würde. Können ist was ganz anderes ;-).

@Tommy: 8) Danke

Die 2222 hatte ich ganz übersehen, natürlich auch von mir meine Glückwünsche.

Gefühlt hast Du schon mehr Projekte begonnen, denn Beiträge geschrieben, weshalb Du an Enthusiasmus kaum zu überbieten bist. Dafür hast Du meinen Respekt!

Wenn möglich eine extra Streicheleinheit für Deinen Hund, mit dem Du GPS ausprobiert hast.

:o :o ehrlich gesagt hätte ich das garniert gesehen, wenn Ihr das nicht gesagt hättet, mit der 2222 Beiträgen. ;D

Das es schon so viele sind hätte ich auch nicht gedacht. :roll_eyes:

ja ich habe schon einige Projekte angefangen und hinter mir.
Angefangen hat das ganze damals mit der Tropenbox, auf die ich heute noch angeschrieben werde :grinning: Schon irgend wie Cool.

Mal schauen wie lange es dauert bis ich die nächsten 2222 Beiträge habe.

Und ja ich habe noch einige Ideen.

Irgend wie muss ich noch zeit finden finden mich mit den zwei LIB`s zu beschäftigen, Aktuell hab das Problem mit zwei Kindern im Homeschooling :wink:

Ach ja GPS, da würde ich auch gerne weiter machen :slight_smile: und habe schon wieder ein neue IDEE dazu. jedoch kein zeit :frowning: