Ich kenn jetzt Deine Hardware nicht und möchte mich jetzt da auch nicht einlesen.
Das Problem wird wohl sein, das jeder der 4 Stepper Motor Treiber mit unterschiedlichen Taktfrequenzen angesteuert werden müssen.
Dann sind unterschiedliche Geschwindigkeiten für jeden Motor möglich.
Wie realisiert man das.
Man könnte das über 2x 16 Bit Timer mit je 2 Comparematch units machen.
Sobald also ein Comparematch kommt in die Entsprechende Interruptroutine verzweigen und dort dann den Impuls erzeugen.
Nachteil es sind ohne Tricks nur rund 65000 er Unterschied möglich.
Eine weitere Möglichkeit wäre einen 8 Bit Timer zu nehmen und im Overflow Interrupt einen Zähler pro Stepper hoch zu zählen.
Wenn der gewünschte Grenzwert erreich ist den dazugehörigen Ausgang für den Stepper Motor hoch bzw. runter schalten.
Da hier auch 32Bit Variablen eingesetzt werden können, kann der Unterschied der Steps sehr groß sein.
Nachteil, wenn man ohne Prescaler für den Timer arbeitet hat man nur 256 Prozessor Taktzyklen bis ein neuer Interrupt ansteht.
Nimmt man einen Prescaler von 8 sieht das schon besser aus, sollte aber für Stepper Motoren ausreichen schnell sein.
Ich würde in beiden Fällen nur die halbe Zeit für einen Step nehmen, dann wird das auch ein 50% Duty Cycle Signal für den Step Eingang des Motor Controllers.
Nur fertige libs zu benutzen wird Dich hier vermutlich nicht ans Ziel bringen.
Lesezeichen