-
-
Erfahrener Benutzer
Fleißiges Mitglied
Hi jagdfalke,
also erst einmal kein "Delay()". Während der Ausführung von Delay verlierst du die Kontrolle, dann gehen nur noch Interrupts.
Eigentlich sollte es so gehen:
Aufgabe 1: Synchrones Ende der Bewegung.
----------------------------------------------------
Am einfachsten wird es sein, wenn du abschätzt, wie lange die einzelnen geforderten Bewegungen dauern werden, das Zeitmaximum ermittelts und die Geschwindigkeit der anderen Achsen nach diesem Maximum ausrichtest. Diesen Vorgang kannst du dann während der Ausführung immer wieder durchführen und die Geschwindigkeiten nachregeln. Manche Mototen haben Mindestgeschwindigkeiten. Hier klappt's dann nicht perfekt.
Verbesserung: Geschwindigkeit kurz vor der Endestellung herabsetzen um Überlaufen über die Zielstellung hinaus zu verhindern.
Aufgabe 2: Gleichzeitiges bewegen.
-----------------------------------------------------
Alle Motoren mit der o.g. Geschwindigkeit in Gang setzen.
Aufgabe 3: Mit der Bewegung in der Zielstellung stoppen
--------------------------------------------------------------------
Alle Sensoren abfragen und auf Zielstellung prüfen. Ist Sensor in Zielstellung, Geschwindigkeit auf 0.
Aufgabe 4: Fetstellen, dass die Bewegung erledigt ist
--------------------------------------------------------------
Alle Achsen ins Zielstellung
Aufgabe 5: alles Zusammenbauen
--------------------------------------------------------
Am besten schreibst du für die o.g. genannten Aufgaben kleine Funktionen und rufst diese in einer Schleife auf. Nicht immer sind alle Ziele erreichbar, weil sie sich widersprechen oder Rahmenbedingungen verletzen (s. z.B. "Aufgabe 1"). Hier muss man sich für eine Variante oder eine Kompromisss entscheiden. Die endgültige Lösung hängt sehr von diesen Entscheidungen ab.
Diese packst du dann sinnvollerweise ebenfalls in eine Funktion.
Ein Timer und eine Interruptroutine ist nur dann notwendig, wenn z.B. noch weitere Vordergrundprozesse durchgeführt werden sollen oder Abläufe in exakt einzuhaltenden zeitabständen ausgelöst werden müssen. Dann könnstest du den o.g. Ablauf z.B. jede Millisekunde einmal anstossen. Interrupt-Programmierung hat allderdings ein paar Haken und Ösen....
Gruß RedBaron
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen