Hallo XBert,
ich habe nur Erfahrung mit der Ansteuerung von bis zu 8 Servos mit einem Controller; dafür kommt man noch gut mit einem Timer aus (da [maximal] 8*2ms<20ms). Für 20 Servos würde ich 2 oder 3 Timer verwenden. Etwa so:
- 1. Ausgänge für Kanal 0 und Kanal 10 auf 1 setzen.
2. Ersten Timer mit dem zu Kanal 0 gehörenden CompareMatch-Wert starten, zweiten Timer mit dem entsprechenden Wert von Kanal 10.
3. Wenn ein CompareMatch eintritt, den entsprechenden Ausgang wieder auf 0 legen (wird also 2x passieren).
4. Für Kanäle 1&11 bis 9&19 wiederholen - fertig!
Natürlich kannst Du bei vielen AVR-Timern ja auch einen "A"- und einen "B"-CompareMatch setzen, so dass man mit einem Timer auskommt.
Damit ist sichergestellt, dass alles innerhalb von 20ms passiert, obwohl die meisten (analogen) Servos auch mit einer etwas längeren Pause (sagen wir mal bis zu 25ms; also 40Hz Wiederholrate) zufrieden sind. Hängt auch davon ab, welche zeitliche Genauigkeit Deine Anwendung erfordert.
Gruß
Fred
Lesezeichen