Hallo Zusammen,
ich habe eine Schrittmotorsteuerung aufgebaut und möchte diese nun optimieren bzw. die Reaktionszeit verbessern. Zurzeit benutze ich nur einen Arduino Uno. Dieser muss folgende Aufgaben gleichzeitig bewältigen:
-Inkremental Drehgeber auslesen für eine verlustfreie Schrittzählung wird dieser durch Interrupt ausgelesen)
-Potentiometer auslesen
-Schrittmotor durch die AccelStepper-Lib ansteuern
-LCD-Display ausgeben
-diverse Daten verarbeiten, Filterfunktionen etc.
Dabei soll die Motorsteuerung oberste Priorität bekommen, dh. das auslesen des Poti und das zeitgleiche steuern des Schrittmotors. Das Problem welches ich jetzt festgestellt habe ist, dass solange der Schrittmotor gesteuert wird (runToNewPosition()) anscheinend das Auslesen des Poti blockiert bzw. verlangsamt wird. Warscheinlich arbeitet die AccelStepper-lib hier auch mit einer Interrupt-Funktion. Erst wenn der Schrittmotor seine Endposition erreicht hat, kommen die veralteten Positionsdaten des Poti durch. Die Folge ist, dass der Schrittmotor dann erst die veralteten Positionen anfährt und es zu Verzögerungen kommt.
Für die gesamte Steuerung strebe ich eine gute Dynamik und schnellste Motordrehzahlen an. Mein erster Gedanke war, einen zweiten Arduino einzusetzen. Einer kümmert sich um das Aufnehmen der Messwerte aus Poti und Drehgeber, der andere steuert den Schrittmotor. Jedoch ist mir gerade aufgefallen, dass der Arduino mit der Schrittmotorsteuerung ja vollständig blockiert, also eine Datenannahme via I2C vom anderen Arduino auch blockiert sein müsste.
Eventuell hat ja jemand bereits Erfahrungen gemacht oder hat spontan eine gute Idee.