Forum: Mikrocontroller und Digitale Elektronik Arduino + Stepper + AccelStepper?


von Stefan (drotalion)


Lesenswert?

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?

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

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?

von Michael B. (laberkopp)


Lesenswert?

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

von Rainer W. (rawi)


Lesenswert?

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"?

von Obelix X. (obelix)


Lesenswert?

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.

von Ada J. Quiroz (inschnier)


Lesenswert?

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.

von Chris V. (nagut)


Lesenswert?

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.

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

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
von Wulf D. (holler)


Lesenswert?

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
von Philipp K. (philipp_k59)


Lesenswert?

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
Noch kein Account? Hier anmelden.