Software - Interessante sofTware und harTware.

Servos per Arduino steuern

Beim Arduino gibt es vorgefertigte Libraries, um Servos zu bewegen. Diese kommen allerdings schnell an die Grenze, was die Anzahl Servos betrifft.
Außerdem gibt es beim schnellen Ändern der Position oft das Problem des Servo-Ruckelns.

Hier wird ein alternativer Ansatz behandelt: Mittels Timer-Interrupt wird eine Software-PWM implementiert. Hierdurch konnten am Arduino Micro bis zu 24 Servos betrieben werden.

24 Servos am Arduino Nano (=ATMEGA 328)

Die Idee: Soft-PWM. Ein Port hat 8 Pins, und kann durch schreiben eines Byte alle Ausgangs-Pins gleichzeitig setzen. Also 8 Servos pro Pin.

Leider sind auf dem Arduino Micro nicht alle Pins von jedem Port herausgeführt - was dem Ausprobieren ob die Rechenleistung reicht zwar keinen abbruch tut, nur kann man eben an die fehlenden Pins kein Servo anschließen.

Als Zeitbasis wird der interne Timer Counter 1 verwendet. Dieser taktet mit 100kHz einen Interrupt. Innerhalb des Interrupts wird mit stabilem Timing das zeitkritische PWM-Signal berechnet und ausgegeben. Die Logik-Berechnungen, die deutlich langsamer ablaufen dürfen, finden in der Main()-Loop statt, solange der Interrupt gerade nicht aktiv ist.

Für den ersten Test wird kein Signal vom Sender eingelesen, sondern nur einige Servos zyklisch zwischen mehreren Positionen bewegt.

Software-Design

Todo: UML-Diagramm Interrupt VS Main-Loop.

Download Sourcecode: 24 Servos am Arduino Nano

Speicherbedarf laut Compiler:

FLASH: 1734 Byte von 30720 Byte 5%
RAM: 395 Byte von 2048 Byte 19%