Auffallend bei meinen Servomessungen ist die beachtliche Verzögerung von Übergabe der Servosollposition an den Pulstimer bis zum Beginn der Servobewegung. Ich hatte mir deswegen statt der Boardzeit (Izeit_1 - aus dem Heartbeat) die Servosollposition des Messervos - Servo Nr 7 - als drittes Datum ausgeben lassen.
Anschließend eine Messfahrt mit dem High-Torque Servo 1501MG und full speed. Von Übergabe der Servosollposition an den Timer bis zum Beginn der Bewegung habe ich 65 ms ± 2 ms gemessen. Das sieht auf den ersten Blick riesig schlecht aus.
Ich rechne mal nach:
Übergabe der Servosollposition an den Servotimer während der Laufzeit des Servopulses 6. Runde 2 ms später, mittlerweile zeigt der Servopointer auf den Messservo Nr.7, wird dieser Wert in den Timerspeicher OCR1B geschrieben
Code:
// - - - - - - - - - - - - - - - -
switch (Svpt) // Servo[Svpt] wählen + dessen Rampe starten
{ //
case 1: SetBit ( PC, Servo1 ); break;
case 2: SetBit ( PC, Servo2 ); break;
case 3: SetBit ( PC, Servo3 ); break;
case 4: SetBit ( PC, Servo4 ); break;
case 5: SetBit ( PC, Servo5 ); break;
case 6: SetBit ( PC, Servo6 ); break;
case 7: SetBit ( PA, Servo7 ); break;
case 8: SetBit ( PA, Servo8 ); break;
case 9: SetBit ( PA, Servo9 ); break;
case 10: SetBit ( PA, Servo10); break;
default: break; // hierher würde noch n Fehlerflag passen
} // Ende switch (Svpt)
// - - - - - - - - - - - - - - -
// OCR1B = Srv_tm[Svpt]; // Stellwert ist durch Rampenwert Srv_tm definiert
und der zuständige Puls gestartet.
Etwa 2 ms später, die maximal mögliche Standard-Pulszeit ist abgelaufen, KÖNNTE der Servo merken, was los ist. Nehmen wir mal an, er wartet bis eine Standardperiode vollständig abgelaufen ist - oder bis ein neuer Puls kommt, also 20 ms.
Bisher sind also ca. 20 ms vergangen seit der Controller dem Servo das nächste Wunschziel angegeben hat.
Nun könnte der Motor loslaufen. Bei meinen Motoren aus dem ES-05-Servo hatte ich (im System MiniD0 und Dottie) eine Motorzeitkonstante von 8 bis 12 ms gemessen. Dies ist die Zeit zum Hochlaufen des Motors bis nahe Endgeschwindigkeit. Der grössere Motor des HighTorque darf länger brauchen, sagen wir mal wieder 20 ms. Dann könnte noch etwas Getriebespiel dazu kommen, nochmal zehn Millisekunden.
Mittlerweile sind also 50 Millisekunden vergangen, seit der controller dem Servo das nächste Wunschziel angegeben hat. Da sind die gemessenen 65 ms ja einigermassen glaubhaft.
Darüber sollten wir nachdenken *ggg*.
Lesezeichen