Schrittmotor an TB6560 steuern mit Step & Dir

Ich habe mir 2 Stepper-Treiber zum testen gekauft. Klein, preiswert und hoffentlich tauglich und kann 3A.
Hier eine sehr schöne, ausführliche Beschreibung in D dazu:

Nun suche ich schon eine Weile rum und lese etliche Artikel zu Libs und im WWW und finde nichts gescheites.
Alles was ich bisher hatte, bezieht auf die Steuerung einer "nackten" H-Bridge oder simplen Treiber-Chips.
.... oder steuern mit PWM, was für mich (grundsätzlich) untauglich ist

Klar findet man auch Sketches, welche 2 Pins benutzen - aber m.M.n. relativ "übel" programmiert sind.
Hat man mir boch bisher hier zugetragen, möglichst auf delays zu verzichten - verständlicherweise.
Wie macht man's besser ? Mit Timer(n) ?

Bevor ich hier nun in einer kleinen Ewigkeit das Rad neu erfinde, die Frage an euch: Gipp's schon ? Wo ?
Elementare Codeschnipsel für ein Grundgerüst würden mir schon reichen.

Zwischendurch:
Hab mir mal die cpp's von AccelStepper und AH_Pololu angesehen.
Erster steuert mit 4 Pins die H-Bridge direkt und berechnet Timings intern. (So) Nicht brauchbar.
Letztere gönnt sich div. delaymicros in Summe von min. 400µs. Nicht so dolle.
Beide arbeiten ihre ToDo-Schleife für die Anzahl der Steps mit dem Vergleich von micros ab (BlinkLED ohne Delay).
OK - zwar kein Delay, aber die Routine hampelt da auch ne Weile in eine Schleife, ohne das LOOP zum tragen kommt.

Meine Idee, die mir seit einiger Zeit durch den Kopf geht:
1)
Man nehme einen Timer und setze diesen jeweils auf die doppelt benötigte Frequenz/halbe Zeit des jeweils aktuell benötigten Schrittimpulses.
Das absolute Maximum läge ca. bei 5000Hz/Schritte Sekunde oder 200 µs - für einen Stepper das ist schon reichlich ! Entspricht also max. 10kHz oder 100µs.
Das sollte der Timer eigentlich problemlos schaffen und selbst bei andauernder "Höchstgeschwindigkeitsfahrt" noch genug Zeit für's restliche Programm lassen.
Ich denke, das hier eher selten 2500Hz/400µs, bzw. eben 5kHz/200µs für den "Halbschritt" erreicht werden

Ist der Timer-Intervall auf den gewünschten "Halbschritt" eingestellt, wird die CallBack-Routine im passend Takt (doppelt so schnell) aufgerufen.
Mit einer globalen Toggle-VAR setz ich dann einmal einen Out auf H, im nächsten Durchgang auf L. Ergibt ein schön symetrisches Puls-Pause-Verhältnis mit den gewünschten Frequenz.
Jeweils vor dem "H-setzen" müsste noch geprüft werden, ob noch Impulse mit der gleichen Frequenz noch erzeugt werden sollen.
Gibts nix mehr ( = 0) zum runterzählen (logo auch global), kehrt die CB-Funktion umgehend zurück in die Loop. (oder sonstwohin ?!)

In der Loop muss dieser "Zustand" dann erkannt und geprüft werden, oder weitere (Teil-) Sequenzen mit anderer Richtung & Frequenz vorliegen. Auch global.
Falls ja, entsprecheng den Richtungsausgang setzen, Timer-Intervall neu berechnen und der Zählervariablen den passenden Wert geben.
Der Rest geht dann wie vn allein wie unter 2).
Gibt's erst mal nix weiter, wird der Timer gestoppt.

Ich hoffe, hier keinen allzugroßen Denkfehler gemacht zu haben.
Falls ja, lasst euer "Gemecker" auf mich einprasseln ..... aber mit Begründung bitte. :smiley:

Hallo Terwi!

AccelStepper sollte nach meinem Verständnis auch die Nutzung von Shields oder anderen Endstufen mit Takt-/Richtungssteuerung unterstützen. Das wird über die Interface-Definition eingestellt:

AccelStepper mystepper(1, pinStep, pinDirection);
// A stepper motor controlled by a dedicated driver board.
Siehe auch: AccelStepper: AccelStepper Class Reference

Ich wollte das immer mal ausprobieren, komme aber leider nicht dazu. :~

Mit freundlichen Grüßen
Thorsten Ostermann