OK alles zusammen in loop.
Dann bietet sich an die loop() mit möglichst kurzer Durchlaufzeit zu betreiben und
einen Zeittakt mit möglichst hoher Frequenz einzubauen.
Damit meine ich einen microseconds()-basierten timer. Immer wenn die Intervallzeit vorbei ist den code ausführen der die Schritt-signale erzeugt. Wenn die Schrittmotoren mit höherer Drehzahl und womöglich noch mit Mikroschritten 1/8 1/16 usw. laufen sollen dann ergibt das Taktfrequenzen die man auf diese Weise nicht mehr erzeugen kann.
Texte auf ein Display schreiben verbraucht dann auch zu viel Zeit wenn die Display-Ausgabe während der Schrittausgabe erfolgen soll oder man muss die maximale Schrittfrequenz so weit heruntersetzen, dass die Textausgabe für ein einzelnes Zeichen innerhalb eines Taktes durchgeführt werden kann.
Dafür würde ich dann keinen Arduino Uno nehmen.
Wahrscheinlich macht es Sinn die Schritterzeugung in einem Microcontroller zu machen und Display, Einstellungen vornehmen auf einem zweiten.
Da würde ich dann für 2x 7,95 Euro zwei Seeeduino XIAO nehmen.
Noch einmal:
ist das jetzt so eine Art Testbox zum Schrittmotoren testen ob sie im Prinzip funktionieren oder hast du da bestimmte Anforderungen?
Mit Anforderungen meine ich Dinge wie:
maximale Schrittfrequenz
maximale Gesamtzahl an Schrittmotoren die gleichzeitig aber mit unterschiedlichen Drehzahlen laufen sollen
Echtzeitausgabe von aktuell eingestellten Drehzahlen
Echtzeitausgabe von noch auszuführenden Schritten bis der Schrittmotor angehalten wird
In Echtzeit veränderbare Drehzahl der Schrittmotoren durch drehen am Encoder
Wenn diese Anforderungen alle erfüllt werden müssten dann wird das entweder ein Ultraspezial-Computer mit einem aktuellen Inter-Atom-Prozessor mit 2 GHz auf dem ein Echtzeitbetriebssystem läuft aber schon lange kein Microcontroller mehr.
Microcontroller sind ja schon schnell aber Schritt-Signal-Erzeugung braucht enorm Rechenpower.
Ein Rechenbeispiel:
Schrittmotor soll mit Drehlzahl 3000 U/min = 50 Umdrehungen pro Sekunde im 1/32-Mikroschritt-Modus laufen
Drehzahl * Schritte pro Umdrehung mal Mikroschritte/Vollschritt
50 * 200 * 32 = 320.000 Schritte pro Sekunde 320 kHz Taktfrequenz
alle 1/320000 = 0,000003125 Sekunden ein Schritt.
Alle 3,125 micro-Sekunden ein Schritt alle 0,003125 Millisekunden ein Schritt
Jetzt einmal anders herum
Nehmen wir an die loop() läuft im 0,1 Millisekundentakt
= 10000 Durchläufe pro Sekunde
Erreichbare Drehzahl:
Im Halbschrittmodus macht das 400 Schritte pro Umdrehung
10000/400 = 25 Umdrehungen pro Sekunde * 60 = 1500 Umdrehungen pro Minute im Halbschrittmodus
bei 1/8 Schritt-Modus
10000 / 1600 * 60 = 375 Umdrehungen pro Minute
Wenn du im Microschrittmodus hohe Drehzahlen brauchst dann würde sich anbieten einen Teensy 3.2 Microcontroller zu nehmen. Der kann sehr hohe Taktfrequenzen erzeugen.
Aber du hast immer noch nicht genau beschrieben was du machen willst.
Wenn die Schrittmotoren zwar mit ganz hohen Drehzahlen laufen sollen
es aber überhaupt nicht darauf ankommt ob sie nun 10 oder 20 sekunden zum Beschleunigen brauchen und ob sie nun 10-20 Sekunden länger laufen oder nicht dann könnte man ein gaaaanz anderes Konzept verfolgen: Taktsignalerzeugung mit einem externen Timerbaustein wie NE555 und digital einstellbarem Poti. Das würde dann auch ein Microcontroller der auf 1 MHz runtergetaktet ist hinbekommen.
vgs