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/ServoHierzu habe ich zunächst mit einem Logikanalysator 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:
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 mit dem ArdPicProg ausgelesen und über die USB Schnittstelle an einen PC übertragen.
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.