Hallo allerseits, ich habe eine Arduino, vier Stepper Motorentreiber (TMC2208) und der Wille, es mit der AccelStepper library zu steuern. Gerade weil der MultiStepper gleichzeitige Bewegung gewährleistet, finde ich das sehr spannend. Aber wie sehr vieles in Arduino, ist AccelStepper bestimmt auch bei der Geschwindigkeit begrenzt. Als ich damals eine Frage bezüglich HAL-Sensor mit Interrupts gefragt habe, wurde hier eher der Weg mit der Timer abfragen vorgeschlagen. Gibt es da auch einen gängigen Silver-Bullet Weg für Stepper Kontrolle? Ich dachte daran, einen Timer mit hoher Takt zu initiieren, die Bewegungsabstände dessen kleinste gemeinsame Nenner finden und zu jeweiligen Zählerzahlen die Step Pin triggern. Damit würde ich die Library umgehen. Weiß ich aber nicht, ob das schneller ist. Und ob der Aufwand sich wirklich lohnt. Wie ist eure Meinung dazu?
Es tut mir leid, aber ich kann dir nicht sagen ob du schlauer/klüger bist als die AccelStepper Entwickler. Warum probierst du das nicht aus?
Stefan schrieb: > Wie ist eure Meinung dazu? Bei so wenig Plan, nimm AccelStepper und verringere die Mikroschrittanzahl am TMC2208 wenn es dir zu langsam sein sollte. Schau wegen dem erreichbaren Tempo auch ins Datenblatt des Schrittmotors und achte auf Schwingungsdämpfung wegen Resonanzvermeidung. https://dse-faq.elektronik-kompendium.de/dse-faq.htm#F.10
Stefan schrieb: > Als ich damals eine Frage bezüglich HAL-Sensor > mit Interrupts gefragt habe, wurde hier eher der Weg mit der Timer > abfragen vorgeschlagen. HAL steht für "Hardware Abstraction Layer". Was meinst du mit "HAL-Sensor"?
Stefan schrieb: > Weiß ich aber nicht, ob das > schneller ist. Es muss nicht immer so schnell wie möglich sein, es reicht aus wenn es so schnell wie nötig ist.
Mit DMA und Hardwaretimern ist vieles möglich. Zwar nicht auf Arduino aber auf STM32 habe ich mir Schrittmotortreiber programmiert, welche 5 Motoren gleichzeitig synchron mit 6400 Mikroschritten und 1000rpm ansteuern können, so dass man zeitgleich auch noch andere Dinge erledigen kann. Hilft dir nicht weiter, aber alles ist möglich. Die Arduino Stepper Libs sind halt ganz einfaches Bitschupsen.
Stefan schrieb: > ich habe eine Arduino, vier Stepper Motorentreiber (TMC2208) und der > Wille, es mit der AccelStepper library zu steuern. Gerade weil der > MultiStepper gleichzeitige Bewegung gewährleistet, finde ich das sehr > spannend. Na, dann mach' das doch einfach. Wie bei Arduino üblich, kommt man sehr schnell zu Programmen, die schon mal ganz gut funktionieren. Schwierig wird es erst, wenn Du noch andere besondere Anforderungen hast. Wenn sich also herausstellt, dass die schnelle Lösung mit unmodifizierter AccelStepper-Library für Dich nicht ausreicht, musst Du mehr Gehirnschmalz invenstieren - weißt zu dem Zeitpunkt dann aber, dass es sich auch lohnt! Wie im Beitrag von Laberkopp angedeutet, interpoliert der TMC2208 seine Microsteps bei Bedarf selbst. Du kannst ihn also für möglichst hohe Geschwindigkeit mit Fullstep-Pulsen ansteuern. Wenn ich mich richtig erinnere, kann die AccelStepper-Library sinnvoll Pulse bis ca. 1kHz ausgeben. Bei den typischen 1,8-Grad Motoren wären das dann 200 Fullsteps pro Umdrehung und damit in der Spitze 300 U/min. Wahrscheinlich hast Du aber auch noch andere Anforderungen bzgl. der Synchronität der Bewegung. Ausprobieren ist da das Einfachste.
Ada J. Quiroz schrieb: > Hilft dir nicht weiter, Richtig! Kein DMA bei den üblichen AVR Arduinos. > Die Arduino Stepper Libs > sind halt ganz einfaches Bitschupsen. Auf die Arduino Stepper Lib mag das zutreffen. Die ist wirklich recht schlicht. Die AccelStepper Library und auch die MobaTools haben schon einiges mehr an Tiefe. Auch Marlin ist auf Unmengen 3D Druckern im Einsatz. Also: Schrittmotore, Arduino und Libraries, das geht schon zusammen. Leider sagt unser "Stefan (drotalion)" nicht, was ihm wirklich benötigt und wozu. Zudem wage ich zu bezweifeln, dass ein ungeübter Programmierer die "Geschwindigkeit" lange bewährter und stetig verbesserter Libs in absehbarer Zeit erreichen kann. Wochen, eher Monate, gehen da ins Land. Warum ungeübt? 1. ein geübter hätte die Frage nicht gestellt. 2. ein geübter hätte die Libs einfach genutzt. 3. ein geübter hätte bei Geschwindigkeitsproblemen einen anderen µC verwendet. 4. wenn alles nicht reicht vielleicht was eigenes gebaut 5. andere Motore verwendet, z.B. BLDC Servos mit Encoder und eingebauten Treibern. Ach ja... Das ganze Schrittmotorgedönse zielt eher auf exaktes Positionieren, als auf Geschwindigkeitsrekorde.
:
Bearbeitet durch User
Der TMC2208 nimmt dir ja schon viel bei der Stepperansteuerung ab. Je nachdem welche maximale Drehzahl du erreichen willst, konfigurierst du den Treiber entweder im StealthChop PWM Mode (sehr leise, nach meiner Erfahrung mit dem TMC2209 ca bis 300 U/min nutzbar) oder im SpreadCycle Mode (etwas lauter, Schrittverluste schwerer detektierbar, 1000 U/min kein Problem). Im StealthChop PWM Mode muss man bis zur Drehzahlgrenze auch keine Resonanzen befürchten. Um das zu konfigurieren braucht man keine Lib. Den Stepper bringt man entweder mit vom Controller erzeugte Rechtecksignal oder auch im TMC konfigurierbaren Signal zum Drehen. Wenn es dann um Bewegungsabläufe und Beschleunigungen geht, würde ich auch eine Library verwenden, die Steuerung kann recht aufwändig werden. Übrigens, Analog Devices bietet eine SW im Github an, mit der man via UART die TMC bequem ansteuern kann. https://github.com/analogdevicesinc/TMC-API/tree/master/tmc/ic/TMC2208
:
Bearbeitet durch User
Arduino ist ja nicht Arduino.. welcher Arduino, während nen ESP32 das ganze mit 30 Motoren hinbekommt, klappts mit anderen garnicht venünftig.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.