-
-
Erfahrener Benutzer
Roboter Experte
Deine Idee wird so in Realität leider nicht funktionieren, es wäre viel zu ungenau.
Überleg z.B. was passiert, wen 2 Servos gleichzeitig auf LOW gestellt werden müssten, oder gar noch mehr Servos. Das würde mit dieser Funktion nicht gehen, ohne Genauigkeit einzubüßen (d.h. keine 15bit-Genauigkeit mehr)
Außerdem würde der Interrupt viel zu viel Zeit in Anspruch nehmen. Allein die case-Struktur (die die Werte jedes mal neu aus dem SRAM laden muss) und der Funktionsaufruf würden die Zeit sprengen.
Solche Funktionen, die sehr zeitkritisch sind, kann man nicht in C schreiben, sondern muss das in ASM machen.
Wozu brauchst du denn eine so große Auflösung? 15bit können Servos doch überhaupt nicht darstellen. Eine Auflösung von 200 sollte doch reichen, oder?
Ich bin gerade dabei, so eine Funktion für 18 Servosin ASM zu schreiben, allerdings verwende ich eine Genauigkeit von "nur" 180 Schritten und einen 20MHz-AVR. Theoretisch sollte auch eine Auflösung von ca.270 Schritten möglich sein. Viel höher geht es aber nicht, wenn es die Möglichkeit gibt, dass mehrere Servos gleichzeitig auf LOW gesetzt werden müssen.
Wenn dir das nicht so wichtig ist, und im restlichen Programm darauf achtest, dass Servos nie den gleichen Wert haben, dann kannst du mit ASM eine Genauigkeit von ca. 1500 Schritten erreichen (schätzungsweise). Mit C wirst du nie so hoch kommen.
Mit einem sehr ausgeklügelten Programm und einigen Zeiteinbußen könntest du sogar erreichen, dass einige Servos Parallel auf LOW gesetzt werden könnten (allerdings nur die, die am selben PORT hängen).
Insgesammt ist sowas immer sehr schwer abzuschätzen, denn bei solch Zeitkritischen Programmen zählt jeder Befehl. Man müsste halt anfangen so eine Funktion zu schreiben, sie dann zu optimieren und dann gucken, was dabei rauskommt.
18Servos deuten sehr stark auf einen Hexapoden hin, was bedeutet, dass Servos sehr wohl öfters den Selben Winkel haben. Außerdem braucht man meißt keine riesenhohe Auflösung für sowas, da die Servos sowieso nicht so genau sind, wie man es gerne wollte. Einen Unterschied von 0,5° wird niemand Merken. Mit einer 8bit-Auflösung spart man sich außerdem eine Menge Rechenzeit.
Ich hoffe, ich hab dir ein wenig weiterhelfen können,
Gruß, Yaro
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen