Hallo
Mein Code für 18 Servos mit einem 16MHz Mega16:
https://www.roboternetz.de/community...l=1#post524912
Die Ansteuerung ist auf die zwei CompareMatch-ISR des Timer1 aufgeteilt. Die Impulse für die Servos werden jeweils nacheinander ausgegeben, dadurch werden die Anlaufströme gleichmässiger verteilt. Der Bereich der Impulslängen für meine Servos (ES05) war von ca. 200 bis ca. 500 (mit Reserve). 500 entspricht 2ms, 5000 dauert 20ms und ist die Startwiederholzeit von der während eines Zykluses die einzelnen Impulslängen abgezogen werden. Mit Impulslänge=0 wird das betreffende Servo nicht angesteuert.
Zusätzliche Funktionen: 1/50-Sekunde Pause mit sleep() die mit den Servoimpulsen synchronisiert ist, gepufferter USART-Empfang per Interrupt und senden von Char, String und Integer (38400Baud), SPI-Ansteuerung und Terminalansteuerung für "Beine" mit drei Servos:
ax,wert - Steuert das xte Servo im Strang A mit dem Wert wert an (x von 1 bis 9, wert von 200 bis 500)
bx,wert - Steuert das xte Servo im Strang B mit dem Wert wert an
cx,wert1,wert2,wert3 - Gibt an Bein x die Werte wert1, wert2 und wert3 an die Servos 1,2 und 3 aus.
(Der letzte Wert in c() legt eine Wartezeit zwischen den Änderungen für einzelnen Servos in 1/50sek fest.)
Das ist als Inspiration gedacht, denn auch bei der Servoansteuerung führen viele Wege zum Ziel.
Gruß
mic
Lesezeichen