-
-
Erfahrener Benutzer
Robotik Einstein
Ich meine, wenn man die Servoimpulsgenerierung in die Hardware des ATMEGA verlegt ( Timer 1 mit Comparematch Interrupts ) dann sollten bis zu 16 Servos möglich sein.
Das ist nur mal eine theoretische Überlegung - ausprobiert hab ich das noch nicht.
Mit 8 Servos lief sowas bei mir aber schon mal sehr gut.
Die ersten 8 Kanäle werden vom Comparematch A gesteuert.
Die zweiten 8 vom Comparematch B.
Beispiel für Comparematch A.
Der erste Servoausgang wird aktiv geschaltet und die gewünschte Servoimpulslänge zum TCNT1 Register dazugezählt und im Comparematch A Register abgespeichert.
Beim nächsten Comparematch A wird Ausgang 1 abgeschaltet und 2 aktiviert, zum TCNT1 der Wert für Kanal 2 dazugezählt und im Comparematch A Register abgelegt.
Das Spielchen geht so lange weiter, bis alle 8 Kanäle verarbeitet wurden.
Dann werden alle 8 Ausgänge inaktiv geschaltet und die gewünschte Pausenzeit zum TCNT1 dazugezählt und im Comparematch A abgespeichert.
Ist auch die abgelaufen beginnt das Spielchen mit Kanal 1 von vorne.
Mit dem Comparematch B macht man genau das Gleiche für die nächsten 8 Kanäle.
Da es in der Interruptroutine nur Portoperationen, Vergleiche und Additionen gibt, könnte man das auch in Assembler schreiben und so den Interrupt Codeanteil ziemlich kürzen.
Man kommt also mit 2 Arrays für die gewünschten Servoimpulslängen und 2 Zählern für den aktuell bearbeiteten Kanal aus.
Da fast die komplette Impulsgenerierung von der Hardware gemacht wird, dürfte der Controller genügend Zeit für die anderen Aufgaben haben.
Bei einem 8MHz Quarz und Prescaler 8 laufen bei minimalen Servoimpulsen ( 1ms ) im Schnitt 4000 Taktzyklen, bevor wieder ein Interrupt auftritt.
( 8000000*(1ms/2)=4000 )
Bei 16MHz ist es dann das doppelte.
Beachten sollte man auch, das man vor dem Schreiben in die Arrays die Interruptabarbeitung verhindert ( CLI ), sonst könnte der H Wert der neuen Impulslänge mit dem L Wert der vorherigen verarbeitet werden, was zu Servozuckern führt.
Gleich nach der Werteübernahme muß man natürlich die Interrupts wieder freigeben ( SEI ).
Wie gesagt - Theoretische Überlegung !
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen