Servomesstester (Servotester und –messaufbau)
Ein Servotesterquellprogramm
das ist kein Spaß, mein lieber Mann,
das bringt viel Murx und Leid und Weh,
zeigt soo viel Tücken an mein´m C,
Und wenns dann läuft und man was bessert
ist das Ergebnis ganz verwässert,
mit gänzlich andern Resultaten
wo wir die richtigen schon hatten
da denkt man doch den Teufel auch
ich steh bald to-tal auf dem Schlauch.
Mein Servo-Messtester. Der Servotester mit Messfunktion. Nun ist er in einem Stadium, dass erste Messungen durchgeführt wurden.
......http://youtu.be/e9BL4yV9dsg
Welche Messungen sollen durchführbar sein?
o Drehmoment
o Stromaufnahme als Funktion des Drehmomentes
o (Stromaufnahme dynamisch über den Verfahrweg ist geplant)
o Positionsabweichung als Funktion des Drehmomentes
o Drehgeschwindigkeit
o Drehbeschleunigung bei Start und Positionseinlauf ohne Last
o Positioniergenauigkeit (auch bei zwei, drei ausgesuchten Winkeln, z.B. links, mitte, rechts)
o Wiederholgenauigkeit der Position ohne Last
o Verhalten bei geänderten Pulslängen bei üblicher Periodenlänge
o Verhalten bei geänderter Periodenlänge bei gleichen Pulslängen
o Verhalten bei geänderter Periodenlänge bei verschiedenen Pulslängen
o Evtl. Messpunkte/-reihen bei 6V statt der meist durchgeführten 5,0 V
o Interessierende Messungen werden teilweise auch mit Last gefahren, vermutlich 0,5 Nennmoment, evtl. auch 0,2 und 0,8 oder 1,0
Warum diese Messungen?
o Einige technische Angaben sind bei Servos selten oder gar nicht zu finden. Manche Angaben sind nicht glaubhaft und sollen überprüft werden
o Positionsabweichung und Stromaufnahme als Funktion des Drehmomentes sind vorrangig interessant für Roboterbauer. Hier hatte ich beim ArchieKopf manche Fragen die von Datenblättern nicht gelöst wurden
o Etliche Messungen werden einfach nur zur Befriedigung der eigenen Neugier dienen, manche zum Überprüfen der Streuung von Eigenschaften baugleicher und bauunterschiedlicher Typen
o Viele interessierende Messungen werden vermutlich nicht durchgeführt werden; Aufbau, Durchführung und Auswertung sind doch etwas zeitaufwendig
Technische Daten:
o Messvorrichtung mit Support zur Aufnahme verschieden(st)er Servotypen und –größen
o Ansteuerung über vorhandene 10-Servo-Platine
o Servotester mit Ausgabe über LCD und UART, Eingabe über drei Tasten und UART. Ein- und Ausgabemethoden sind abhängig von der jeweiligen Aufgabe (z.B. keine Listenausgabe übers LCD)
o Servoversorgung über 70S05
o Ansteuerungsstandard: Periode 20 ms, Puls 0,5 ms bis 2,5 ms
o Drehmomentauflösung 0,2 Ncm (0,1962 Ncm, Waage 1 g/div, 20 cm Hebelarm)
o Genaue Hebellänge durch Kontaktwalze zwischen Hebelarm und Waage
o Drehwinkelmessung durch Potentiometer ca. 10 Bit mit 1,0 ms Auflösung (bei SlowMotion evtl. längere Messabstände), Potentiometer im Messkopf eingebaut
o Positionsmessung mit Präzisionsmessuhr
o Messung von drei Werten (signed short – uint16_t) mit je 990 oder 1590 Messpunkten
o Anzeige der laufenden Messwertaufnahme durch LED
o Einfach- oder Mehrfachfahrt zu vorgegebenen Winkeln und/oder Geschwindigkeiten
o Menue mit derzeit folgenden Wahlmöglichkeiten
........ 2 UART conn Start der UART-Kommandozeile
........ 4 rote LED schalten 0/1
........ 6 Servo ± Servoposition verstellen ±
........ 7 Srv± Po1 Servoposition ± einstellen für Position 1
........ 8 Srv± Po2 Servoposition ± einstellen für Position 2
........ 9 Test Inc Stellen von Test Increment, max = 190, 190 äquival. full speed
........12 Tst Strt Testlauf Starten von Pos 1 nach Pos 2, SFgt-mal, Inc ...
........13 Default Defaultwerte (akt. Pos 1 = 3000, Pos 2 = 5000, 4mal, Inc 30)
........17 Listenausgabe der Messwerte
........18 Timeoutflag setzen off/on
Danke an alle, die mitgeholfen haben, danke besonders Sternthaler für Mitdenken, Mit-(Korrektur-)lesen, und mehr.
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat von
Sternthaler
... Ich bin gespannt, wann die nächsten Messreihen hier erscheinen ...
ine spätabendliche Messfahrt (5,0V, lastfrei, full speed) mit meinem High-Torque Servo 1501MG (siehe dieses Posting) läßt vermuten, dass der langsamer ist als spezifiziert. Jedenfalls brachte er es bei meiner aktuellen 5V-Versorgung grad mal auf 0,25sec/60° bei einer 90°-Messfahrt. Mal sehen, was er bei 6,0 V schafft; bei diese Spannung sind als no load running Speed 0.14sec/60° spezifiziert . . . (und auch hier ist, wie üblich, kein Stromverbrauch genannt).
......Anhang 26327
Seine Regelabweichung bei Last ist dafür wie erhofft/erwartet sehr gering. Und deswegen hatte ich den ja gekauft.
Zitat:
Zitat von
Sternthaler
... Auf das dir die Ideen für deine Messwertaufnahmeliste nie zu Ende gehen ...
Mal so : die Idee wie ich von der RS232 ohne Umweg über Terminal, guttenbergisches past´n´copy ins Exceldiagramm komme, die fehlt mir noch. Denn diese Listenwerte muss ich derzeit noch mit Handarbeit reinpopeln, zwar in Blöcken zu je 200 Daten (a 3 Werten), aber immer noch einiger Aufwand.
Liste der Anhänge anzeigen (Anzahl: 3)
Hi Klebwax, danke für die offene Kritik. Du hast Recht - es war mein erster Versuch auch Texte und Kurven in einem YuTV-Video anzuzeigen. Klappt wirklich nur mit sehr bescheidener Qualität. Tut mir leid, dass das so schlecht rauskommt - und mit den bescheidenen Beschreibungen auch eher für die Katz ist.
Zitat:
Zitat von
Klebwax
... mir erschließt sich dein Diagramm nicht so ganz ... Kurven nicht richtig lesen kann ...
Dann versuch ich´s mal hier ausführlich, die Diagramme kann man hoffentlich mit der folgenden Erklärung trotzdem lesen.
Zur Servoansteuerung:
Es werden aktuell 8 Servos angesteuert, Servo 1 bis 8. Gemessen wird stets Servo 7. Der entsprechende Servopointer wird vom Timer1A alle 2,56 ms weitergeschaltet - bei 8 Servos kommt also jeder Servo alle 20,48 ms dran. Mit der Weiterschaltung wird Timer1B gestartet mit der jeweils gewünschten Pulsvorgabe und es wird der entsprechende Servopin eingeschaltet. Mit Ablauf von Timer1B wird der Servopin ausgeschaltet.
Aufbau der Messung
- Während der Messdauer werden im Abstand von je 1 Millisekunde Werte erfasst, eine höhere Auflösung ist theoretisch möglich, praktisch aber wohl nicht nötig und wegen des deutlich höheren Datenaufkommens mit dem vorhandenen Controller auch schwierig.
- Die Werte werden in drei Wertefelder eingetragen und nach Ablauf der Messung als Liste ausgegeben (siehe Liste).
- Erfasst werden 999 (oder bis zu 1599) Gruppen von je 3 int16-Werten. Das sind in den vorgelegten Diagrammen die Werte für Servopointer, ADC-Wert und Boardzeit in 50µs-Zeitschritten. Das Format int16 für den Servopointer hat programmtechnische Gründe, die anderen Werte benötigen das Format für ihre Größe.
- Die Messung wird nach Startfreigabe erst gestartet, wenn Servo 2 aktiv ist - damit ist ein Vorlauf der Datenerfassung von rund 10 ms (von Servo2 bis Servo7) gewährleistet, BEVOR der erste, neue Positionswert für die Messfahrt an Servo7 abgegeben wird. De fakto startet der protokollierte Servolauf also rund 10 ms nach Beginn der Aufzeichnung und dokumentiert den Zustand in dieser Zeit VOR dem Start der Messung. Damit kann man sicher die Verzögerungszeit der Bewegung ab Eingabe eines Positionswertes erfassen.
- Die Messung erfolgt nach zwei Verfahren. Einmal ist "full speed" möglich. Dabei wird lediglich der Zielpunkt des Servos ausgegeben, der Servo fährt mit der vollen Geschwindigkeit entsprechend seiner Auslegung. Zweitens ist die "SlowMotion" möglich. Dabei wird bei JEDER neuen Servoperiode ein neues Ziel gesetzt, das zwischen 1 und 189 ticks von der aktuellen VORGABE (nicht dem aktuell erreichten Punkt!) entfernt ist. Hier sind Werte unter 10 kaum sinnvoll, aber praktisch möglich. Die (bisher getesteten) Servos reagieren (erst) auf Fortschrittswerte zwischen 10 und 15 Incremente. Bei Vorgabe von Increment 190 ticks wird full speed gefahren, also eine Zielvorgabe - egal wieviel Perioden die Fahrt bis dahin dauert.
- Die Messung wird mit Eintrag des letzen Datentripels beendet.
- Zur optischen Anzeige der Datenerfassung wird während der Messung eine Signal-LED eingeschaltet.
- Nach Ende der Messung können in einem gesonderten Menuepunkt die aufgezeichneten Daten vom Terminalfenster in die Tabellenkalkulation übertragen werden, siehe Tabellenspalten C, D, E und F.
Auswertung:
- Die interne Boardzeit Izeit_1 läuft bis 20000 (entsprechend 1 Sekunde), daher muss für eine saubere Diagrammdarstellung der Wert bei mehreren Izeit_1-Perioden - je nach Datenumfang in Schritten von 20000 erhöht werden, siehe Tabelle Zeile 10 ab Spalte I.
- Mit der korrigierten Boardzeit (zeit/tupsi) wird die Laufzeit der MEssung in Millisekunden (Faktor 0,05) errechnet, Spalte K. Die Drehgeschwindigkeit des Servos in ΔADC/Δms wird errechnet. Für die bessere Sichtbarkeit wird dieser Wert mit dem Geschwindigkeitsfaktor N8 multipliziert und mit dem Faktor N9 im Nullpunkt verschoben.
Die Darstellung des ADC-Wertes des Messpotentiometers über die Messzeit im Diagramm ist die blaue, etwas aufgedickte Linie.
- Die schrecklichrosa Linienflut ist die Geschwindigkeit. Wegen der sehr geringen Unterschiede im ADC-Wert und des kleinen Zeitschrittes ist das nur ein mickriges Hin-und-Her das sehr wenig Aussagekraft hat. Daher die Trendlinie als gleitender Durchschnitt der letzten zehn Perioden. Erst daraus kann sinnvoll auf den >momentanen< GEschwindigkeitsverlauf des Servos geschlossen werden.
- Die Laufzeit von Position 1 (Abfahrt, im Tabellenblatt SrvZat) nach Position 2 (Ziel, im Tabellenblatt SrvZbt) ist durch Ablesen des Diagramms oder aus der Tabelle zu erfassen. Hier bietet das Diagramm eine eindeutige Hilfe wegen des sichtbaren Kurvenverlaufes ACD und gleitender Durchschnitte.
Die Tabelle (Excel) mit Diagramm 04-Sep13-15h00_inc-30.xls habe ich im Original beigelegt, als Beispiel - Übersicht zum Erklären - ist ein Dump einer weiteren Messauswertung für meinen High-Torque beigelegt.
Hoffentlich nutzt diese Beschreibung für ein besseres Verständnis der Messwerte.
Startverzögerung bei einem getesteten, analogen Servo
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*.
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat von
Sternthaler
.. ausreichen .. die Zeit vom 'Absenden' der neuen Zielposition bis zur ersten registrierten Winkelmessung zu nehmen ..
Hallo Sternthaler,
diese Arbeit hatte ich doch schon längst gemacht. Dazu gabs ja auch reichlich Bildchen, die sind nur mit dem Ende meines Bildservers in unbekannten Energien der elektronischen Datenverarbeitung verschwunden.
Hier mal - ein Bild der Sorte hervorgeholt. Dabei sieht man prächtig den Verzug zwischen dem Sprung bei OCR0B und der Radgeschwindigkeitsänderung. Sowohl beim Sprung aufwärts als auch beim Abschalten der PWM.
......Anhang 30719
Ist das Bild so wie ihr meint? Michael und Sternthaler?
Anm.: Izdiff-12 ist die Zeit zwischen einem Interrupt und dem nächsten am Encoder auf der Welle von Motor 12.[/QUOTE]
Nachtrag : (leider wichtige Angabe zur Messung vergessen):
Motoren . . . . . . . . CARSON 502001, 2 Stück
.. . . . . . . . . . . . . . Servo "Hack 2", d.h. nur Motor und Getriebe, ohne Servoelektronik
Fahrzeug . . . . . . . . MiniD0 (0,15l-Coladose mit Einbauten)
.. . . . . . . . Gewicht 152 g, fahrbereit, mit Karosserie - d.h. "originaler Vollausbau", keine Schleppkabel
Testdurchführung . . Teststart durch IR-Fernsteuerung als Task
.. . . . . . . . . . . . . . Motorüberwachung/Datenaufnahme startet
.. . . . . . . . . . . . . . Abtastrate/Messfrequenz 10 ms
.. . . . . . . . . . . . . . Fahrbahn Melaminharzplatte
.. . . . . . . . . . . . . . 5 ms nach Start Datenaufnahme werden BEIDE Motoren gestartet
.. . . . . . . . . . . . . . Nach Testfahrt wird Fahrzeug gestoppt
.. . . . . . . . . . . . . . Im Stop werden die Daten per UART ausgelesen (neuer IR-Befehl)
.. . . . . . . . . . . . . . Diagramm zeigt Interruptabstand Encoder rechts = Motor 12 = Izdiff-12
.. . . . . . . . . . . . . ... . . . .. . . . . Fahrwert/PWM => OCR0B = 0 oder 255
.. . . . . . . . . . . . . ... . . . .. . . . . VRad12 = theoret. Fahrgeschwindigkeit ohne Schlupf