PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Positionsgenauer Servomotor gesucht



Kjel
29.09.2014, 13:27
Hallo zusammen,

ich benötige einen Servomotor (vermutlich Segelwindenservo, da Drehbewegungen von knapp über 360° realisiert werden sollen), der "positionsgenau" ist, d.h. der jedes mal, wenn er eine bestimmte Position anfahren soll, auch wirklich diese Position anfährt und nicht eine Position davor oder dahinter.

Falls jemand eine Empfehlung hat, würde ich mich darüber freuen.


Falls jemand eine Lösung zu meinem eigentlichen Problem hat, wäre das noch besser:

Zur Zeit benutzen wir einen Segelwindenservo, den wir mittels PWM über ein Arduino-Board ansteuern. Es gibt eine "Grundposition" und die "Zielpositionen" 1-4.
Ein Bewegungszyklus besteht aus "Grundposition" --> "Zielpositionen" 1-3 --> "Grundposition" --> "Zielpositionen" 4 --> "Grundposition"
Aus bisher nicht erkennbaren Gründen klappt das eine zeitlang ganz gut aber plötzlich geht irgendwas schief und die Zielposition wird verfehlt. Oftmals kommt es auch vor, dass die Zielpositionen 2-4 einwandfrei angefahren werden und nur Zielposition 1 verfehlt wird.

Woran könnte das liegen? Ist evtl. der Abstand von Grundposition zu Zielposition 1 zu gering (auch wenn ich nicht weiß, warum das überhaupt einen Einfluss haben könnte)?

Vielen Dank schon mal im Voraus!

- - - Aktualisiert - - -

bisher wird folgender Servo verwendet: RS-D22YMB der Firma Modelcraft

( http://www.conrad.de/ce/de/product/209154/?insert_kz=VQ&hk=SEM&WT.srch=1&WT.mc_id=google_pla&gclid=CJuJsKzNlLwCFQhZ3godMmwA4g )

Geistesblitz
29.09.2014, 15:59
Hmm, das Problem bei Segelwindenservos dürfte sein, dass die über ein Spindelpotentiometer zur Winkelmessung verfügen. Dadurch wird der komplette Messbereich auf 5 Umdrehungen oder so abgebildet. Wenn der Messbereich jetzt meinetwegen auf 10 Bit aufgelöst wird, also 1024 Einzelschritte, wären das 5*360°/1024 Schritte, also etwa 1,76°/Schritt, wobei es auch immer einen kleinen Toleranzbereich um die Zielposition herum gibt. Wie wäre es da beispielsweise mit einem Servo, das über Zahnräder nochmal übersetzt wird, dass sich gerade so 1 Umdrehung ergibt? Dann wäre die Auflösung schonmal besser.
Muss eigentlich viel Bewegt werden bzw. ist die Last groß? Sonst könntest du es auch mal mit einem Schrittmotor mit Getriebe versuchen.

Kjel
30.09.2014, 11:39
Gibt es solche Servos mit zusätzlicher Zahnradübersetzung schon fertig zu kaufen oder muss man sowas selber zusammenbasteln?
Konkrete Zahlen habe ich gerade nicht zur Hand, aber so groß ist die Last nicht. Der Servo steht "aufrecht" (Ausgangswelle zeigt nach oben) und muß nen kleinen Kuka-Modellroboter drehen, wobei der Arm fast vollständig nach oben zeigt, um das Drehmoment zu gering wie möglich zu halten.

Habe gerade mal eine Temperaturmessung durchgeführt. Sind Temperaturen von über 65° an der Servoaußenfläche normal?

Geistesblitz
30.09.2014, 14:23
Puh, das ist ganz schön warm, wird der Servo denn stets belastet? Wenn nicht, ist da was faul.
Ja, solche Übersetzungen muss man sich wenn dann selber basteln, wobei Zahnriemen sich da besser machen dürften, da man damit das Spiel besser reduzieren kann. Man kann auch das Potentiometer, welches den Winkel misst, gegen ein beliebiges anderes mit ähnlichem Widerstandswert tauschen und dann dort anbringen, wo man den Winkel messen will. So lassen sich höhere Übersetzungen realisieren, außerdem haben Potentiometer häufig auch einen Stellbereich von etwa 300°.

Kjel
01.10.2014, 11:03
Der Servo wird eigentlich nicht "stets" belastet.
Er dreht sich (mehr oder weniger) in die gewünschte Position, wartet dort, bis sich der Roboterarm gesenkt und wieder erhoben hat, und dreht sich dann wieder in seine Ausgangsposition. Der komplette Ablauf dauert ungefähr 21 sek, wobei das Senken und Heben des Arms am längsten dauert und der Servo sich in der Zeit "erholen" kann.
Allerdings habe ich festgestellt, dass es immer dann zu einem "stärkeren" Temperaturanstieg kommt, je dichter der Servo an seine Ziel- bzw Ausgangsposition kommt.

"Übersetzung selber basteln" würde vereinfacht gesagt bedeuten: Servo aufmachen, vorhandene Zahnräder/Getriebe runter, kleine Zahnräder herstellen, die auf die Achsen passen und eine entsprechende Verzahnung (vorher berechnen) haben, dass sich die Ausgangswelle knapp über 360° dreht?

Geistesblitz
01.10.2014, 12:12
Ehm, nein...
Ich meinte eher so, dass man auf den Servoabtrieb ein Zahnrad setzt und an der Konstruktion ein anderes kleineres (dreht sich dann weiter als der eigentliche Servoabtrieb). Wegen sowas kannst ja mal MisterMou (https://www.roboternetz.de/community/members/40829-MisterMou) anschreiben, der kann entsprechend passende Zahnräder herstellen, hier (https://www.roboternetz.de/community/threads/53700-Roboterarmempfehlung-au%C3%9Fer-AREXX-oder-Playtastic/page4) kannst du mal gucken, da wurde eine ähnliche Aufgabe gelöst ;)

Dass der Servo da sehr warm wird ist irgendwie ungewöhnlich. Klemmt da vielleicht irgendwas?

Kjel
01.10.2014, 15:06
Dass der Servo da sehr warm wird ist irgendwie ungewöhnlich. Klemmt da vielleicht irgendwas?

Würde ich bei der unprofessionellen Konstruktion nicht ausschließen ;-)

Was dein Vorschlag mit der zusätzlichen Übersetzung angeht, muss ich mir mal anschauen, wie ich das kleinere Zahnrad an der Konstruktion befestigen könnte. Sieht aber vermutlich eher schlecht aus. Bisher haben wir einfach den Servohebel mit dem zu drehenden Teil verbunden (gepresst, geklebt und verstiftet - viel hilft viel ;-) ), auf die Servowelle gesteckt und mit ner Schraube gegen Kippeln/Wackeln gesichert. Die Schraube wurde dabei mehr nach Gefühl angezogen, sie soll die Drehung ja nicht behindern.
--> werde das noch mal überprüfen

Könnte evtl auch die Ansteuerung das Problem sein?
Habe mir die "aktuelle" Position während der Drehung anzeigen lassen. Laut Anzeige ist der Servo längst im Ziel, dreht sich aber noch...


Vielen Dank auf jeden Fall schon mal für die Tipps!

Geistesblitz
01.10.2014, 16:04
Naja, Servos haben ja keine Rückführung. Wahrscheinlich wird deine Steuerung einfach einen festen Wert als Sollwert übertragen und der Servo wird versuchen, diesen Wert so schnell wie möglich anzufahren. Aus physikalischen Gründen geht das natürlich nicht unendlich schnell, daher wird der schon ein Weilchen dafür brauchen. Oder generiert die Steuerung eine richtige Rampe? Ansonsten ist gerade bei der Basis eines solchen Roboters die Lagerung ziemlich wichtig. Ich hab das bei meinem Arm (https://www.roboternetz.de/community/threads/56135-6-achsiger-Knickarmroboter-%28Testmodell%29) mit einem Axialkugellager gelöst, was eigentlich ziemlich gut funktioniert.

Wegen der Position würde ich wohl hauptsächlich das Poti umbauen, wie schon gesagt haben normale einbaupotis häufig einen Stellbereich von ca. 300°. Dann noch am letzten Abtriebszahnrad des Servos die Anschläge kappen (wobei, bei Windenservos sollte es sowas nicht geben) und es sollte gehen. Das mit dem Getriebe ist eigentlich ungünstig, da dadurch das Drehmoment wieder abgesenkt werden würde.

HeXPloreR
01.10.2014, 16:10
Hallo Kjel,

leider war der "Geistesblitz" wieder schneller als man schreiben kann: Stell doch bitte mal ein Foto rein, wenn Du schon vom Aufbau berichtest. Ich tendiere auch dazu zu sagen das die bewegte Masse zu groß für diesen Servo ist, und daher kommt das Hitzeproblem ebenso wie die Fehlpositionierung. Das Problem wird eben nicht nur der Hebelarm sein, der weil er ja nach oben zeigt minimal ist, sondern auch das Gesamtgewicht das auf die Abtriebsachse und Kugellagerung des Servos wirkt. Wenn das nicht konstruktiv vom Servo abgehalten ist, dann steht der Servo praktisch alleine da .... und ist möglicherweise überfordert.

Viele Grüße
Jörg

hbquax
01.10.2014, 19:06
Ich hab da zwar noch nie bestellt, aber die haben viele schöne Sachen: http://www.servocity.com/

Und soo schlecht sind Modellbauservos im allgemeinen nicht, sonst könnten wir damit niemals vernünftig schnelle Autos und Flugzeuge steuern.

Kjel
06.10.2014, 13:46
Es hat wirklich den Anschein, als wäre das Gewicht des Roboters ein Problem für den Servo.
Habe heute mal den Roboter vom Servo getrennt und das Programm so laufen lassen... Am Servo hat man sich eher Frostbeulen geholt, so kalt war der und die Position hat er auch halten können (sogar mit unterschiedlichen Quellcode, sodass auch gleich noch ein Aufsummieren von kleinen Fehlern ausgeschlossen werden konnte ;-)

Hier ein paar Fotos (falls alles funktioniert)

29160
Hier sieht man den Podest des Roboters, aus dem die Ausgangswelle des Servos rausguckt und auf der der Servohebel sitzt.


29161
Hier die Unterseite des "Roboterfußes". Der Servohebel ist hier (noch nicht, aber eigentlich schon) mehr oder weniger fest drin und wird dann auf die Servoausgangswelle gesetzt.

29162
Durch dieses Loch kommt die Schraube, um Roboterfuß und Servo miteinander zu verbinden

29163
So sah der kleine mal aus...

29164
...und das haben wir draus gemacht

oberallgeier
06.10.2014, 14:05
Es hat wirklich den Anschein, als wäre das Gewicht des Roboters ein Problem für den Servo ...Hübscher Umbau! Wirklich beneidenswert!

Die Leistungsfähigkeit eines Servos wird von fast keinem Hersteller brauchbar beschrieben. Es gibt (immer) öfter Angaben über das erreichbare Moment, praktisch nie Daten zur entsprechenden Stromaufnahme. Vom statischen Schleppfehler ganz zu schweigen und den dynamischen kennen die Leute wahrscheinlich nicht mal dem Namen nach.

Deshalb hatte ich mir nen Servotester gemacht (https://www.roboternetz.de/community/threads/62904-Servomesstester-%28Servotester-und-%C2%96messaufbau%29?p=585511&viewfull=1#post585511), mit dem ich diese Werte messen kann. Ich kann die Zeit-Winkelkurve (https://www.roboternetz.de/community/attachment.php?attachmentid=26327&d=1378451776) aufnehmen und über den Lastarm die erzielbare Last (siehe Video). Die Stromaufnahme bei Lastmessung lese ich vom Labornetzteil ab, denn beim Strombedarf habe ich mich zur rechnergestützten Datenaufnahme noch immer nicht durchgerungen. Die Lageabweichung bei Lastmessung wird anhand der Winkelmessung an einem externen Poti an der Abtriebswelle gemessen. Daher beziehe ich auch die jeweils aktuelle Winkelstellung des Messarms bei Bewegung in full speed und slow motion.

Da ich die Servos bei meinem Archie vorzugsweise mit verringerter Geschwindigkeit betreibe, kann ich auch hier die dynamische Winkelvorgabe (PWM-Wert, 12 bittig) und die tatsächlich erreichte Winkelstellung zeitgenau messen. Damit fiel bei mir wegen nachgewiesener Unfähigkeit ein bestimmter Servo raus, der zwar sein Nennmoment erreicht, aber dabei eine bleibende Winkelabweichung von 60 ° (bei stetig anstehender Last) zeigte. So ein bißchen (m)ein altes Sprichwort: glaub nur die Messungen die du selbst gemacht hast.

Rabenauge
06.10.2014, 14:40
Hm-der ganze Arm stützt sich nur auf die Servoabtriebswelle?
Das kannst du vergessen. Wenn die nicht wirklich _doppelt_ kugelgelagert ist (erkenns nicht genau aber die Servos sehn eher nach ner niedrigeren Preisklasse aus) wird das nicht klappen.
Die Abtriebswelle verkantet dann nämlich zumindest nen bisschen.
Das passt zu deinem "heisslaufen kurz vor der Sollposition"- leider werden die Motoren der Servos gegen die Sollposition "runtergeregelt"- vermutlich um ein Pendeln zu unterdrücken. Kommen sie aber nicht ganz an die Sollposition ran, drücken sie ununterbrochen, haben aber eben nicht die Kraft, sich richtig zu stellen (sollte man auch an nem vernehmlichen Brummen hören).
Dabei wirds heiss- auf die Weise kann so nen ding auch durchbrennen.

Abhilfe schaffen könntest du, indem du den Arm selber mechanisch solide lagerst, und das Servo z.B. nur mittels Gestänge die Drehung ausführen lässt. Oder mit aufgesteckten Zahnrädern-irgendwo gibts welche, die sich auf "Standard"-Servos aufstecken lassen, wie die Hebel. Es darf halt kein Druck auf die Servoachse kommen, oder diese verkantet werden.

Kjel
06.10.2014, 15:20
Wenn die nicht wirklich _doppelt_ kugelgelagert ist (erkenns nicht genau aber die Servos sehn eher nach ner niedrigeren Preisklasse aus) wird das nicht klappen.


Die Sache mit der niedrigen/mittleren/höheren Preisklasse liegt immer an der Dicke des Portomonaies ;-) Unser hat rund €40,- gekostet
Laut technischen Daten ist er doppelt kugegelagert, nachgeschaut hab ich aber nicht.

Werde als nächstes versuchen, das Gewicht über ein Gleitlager aufzunehmen. Vielleicht klappt's ja...

HeXPloreR
06.10.2014, 15:30
Ein Gleitlager?? ...dann kannst du es auch gleich so lassen.

Schau mal lieber nach sowas hier: http://www.google.de/imgres?imgurl=http%3A%2F%2Fimages.fotocommunity.de %2Fbilder%2Fhandwerk%2Fholz%2Fkugellager-von-da-vincis-c3e16f7b-2622-486b-b27a-d6100952694d.jpg&imgrefurl=http%3A%2F%2Fwww.fotocommunity.de%2Fpc%2 Fpc%2Fdisplay%2F20026400&h=667&w=1000&tbnid=QMFhl3EZ_OitpM%3A&zoom=1&docid=XzEH28bxlYIKmM&ei=dacyVJ2qJYOsPM-6gMgP&tbm=isch&client=firefox-a&iact=rc&uact=3&dur=1503&page=16&start=434&ndsp=29&ved=0CKgBEK0DMDY4kAM

Geistesblitz
06.10.2014, 19:14
Ich hatte ja schon auf meine Lösung des Problems verlinkt, die Lagersitze hab ich auch nur von Hand gefertigt und so ein Axialkugellager kostet gerade mal 1,20€ bei ebay. Könnte für dich sicher passend sein. Btw. das Servohorn ist nur über eine Schraube verbunden? Das klingt sehr wackelig...

Hier im Forum hat auch schonmal jemand genau so einen Kuka-Modellroboter erfolgreich mit Servos umgebaut (https://www.roboternetz.de/community/threads/54986-Techniker-Miniprojekt-2011-Modell-Kuka-Roboterarm?highlight=kuka), vielleicht hilft dir das ja auch weiter.

hbquax
07.10.2014, 07:01
Die Lösung, die sich hier aufdrängt, ist den Roboter auf einer eigenen Achse zu lagern, das Servo daneben zusetzen und über Zahnräder oder Zahnriemen die Drehung zu übertragen. Auch mit doppelter Kugellagerung sind Servos nicht geeignet und nicht dazu gedacht, nennenswerte Biegemomente an der Welle aufzunehmen. Dazu ist dort einfach zu wenig Lagerabstand.
Aber schner Robbi!

Kjel
19.01.2015, 13:44
Ein Gleitlager?? ...dann kannst du es auch gleich so lassen.


Es ist dann doch kein Gleitlager geworden, sondern ein Kugellager. Das Ergebnis ist gut: bisher wird die Position fast genau so gut angefahren, wie es der Servo ohne zusätzliche Belastung zulässt.

Allerdings ist mir folgendes aufgefallen: Wenn man den Code auf den Microcontroller (Arduino) hoch lädt, dreht sich der Servo wie wild in alle Richtungen (hab das mal gefilmt, aber das Hochladen klappt nicht).

Ist das normal? Kann man das unterbinden?

Solange der Roboter nicht dauf sitzt, ist das ja ganz lustig anzusehen, aber wenn der drauf ist, werden sämtliche Leitungen gezogen (oder schlimmeres)...

Geistesblitz
19.01.2015, 16:51
Liegt daran, dass in dem Zustand keine bracuhbaren Signale an die Servos gesendet werden. Da wäre es sinnvoll, einen Schalter einzubauen, mit dem die Versorgung der Servos abgeschaltet werden kann. So kannst du den Arduino programmieren und dann erst die Servos einschalten. Ich kenn es auch, dass die Servos beim Einschalten des Controllers Unsinn machen, hauptsächlich, weil sie i.A. nicht in der Position sind, die der Controller als Startposition hat.

Kjel
21.01.2015, 10:46
Ich hatte auch den Tipp bekommen, es mit einen anderen Ausgang zu probieren... und siehe da: bei einem anderen PIN/Port (keine Ahnung wie die genaue Bezeichnung ist) funktioniert das ohne Probleme. :confused:

Haben die einzelnen Pins etwa unterschiedliche "Eigenschaften"? (ich meine die PWM-Ausgänge untereinander, nicht verglichen mit den analogen)

malthy
21.01.2015, 10:58
Die Frage ist auf welchem Port/Pin Dein Servo liegt. Wenn es ein Signal des ISP Interfaces ist, dann hast Du während des Flashens natürlich ziemlich viel Aktivität auf dem Pin, die der Servo nicht adäquat verarbeiten kann. Die anderen (nicht-ISP) Ports sind während des Programmierens hochohmig (Tri-state), die kannst Du für diesen Fall zB mit einem Pull-Up auf definiertes Potential ziehen.

Gruß
Malte

Kjel
21.01.2015, 11:45
Wer lesen kann, ist klar im Vorteil...

Durch die beiden Hinweise hab ich mal etwas hier und da gestöbert und siehe da.
Bei dem Pin handelt es sich nicht um einen der PWM-Pins ](*,)

Da von den 12 PWM-Pins nur noch 6 Leben, ich aber 7 brauche, brauch ich wohl ein neues Board.