Servoansteuerung mit der Arduino Servo Library

Genauigkeit der Impulserzeugung

Ich habe mich gefragt, wie genau die Erzeugung der Impulslänge der Arduino Servo Library ist, da in der Beschreibung auf entsprechende Limitations hingewiesen wird:

„Limitations

This library does not stop your interrupts, so millis() will still work and you won’t lose incoming serial data, but a pulse end can be extended by the maximum length of your interrupt handles which can cause a small glitch in the servo position. If you have a large number of servos there will be a slight (1-3 degrees) position distortion in the ones with the lowest angular values.“

Quelle: http://playground.arduino.cc/ComponentLib/Servo

Hierzu habe ich zunächst mit dem PiKoder/PROBE die Impulslängen von 1.000 aufeinanderfolgenden Impulsen im unbelasteten Zustand, also auf dem Arduino wurde nur die Servo Library ausgeführt, gemessen. Bei einer Soll-Impulslänge von 1.500 µs ergibt sich folgende Verteilung der Impulslängen:

Verteilung ohne Last

Die erzeugten Impuls sind zwar etwas zu lang, aber die Streuung ist relativ gering und der Längenunterschied zwischen dem kürzesten und dem längstem Impuls beträgt nur 0,6 µs.

Die Verteilung der Impulslängen ändert sich deutlich, wenn auf dem Arduino weitere Anwendungen ablaufen und so zusätzliche Last erzeugt wird. Im folgenden Beispiel wird parallel zur Impulserzeugung der Programmspeicher eines PIC Controllers ausgelesen und über die USB Schnittstelle an einen PC übertragen.

Verteilung mit Last

Wie im Bild sichtbar ist, nimmt damit die Streuung der Impulslängen deutlich zu, da der Arduino immer wieder durch andere Aufgaben abgelenkt wird; der längste Impuls in dieser Messreihe hatte eine Länge von 1.508 µs.

Von daher ist bei einer hohen Anforderung an die Genauigkeit der Impulslänge und einer entsprechenden Prozessorauslastung des Arduino der Einsatz eines intelligenten Servo Controllers anzuraten – zumal davon auszugehen ist, dass sich die Genauigkeit und die Streuung beim Einsatz von mehr als einem Servo weiter verschlechtert.