Moin Aus einem Servo wurde die Motorelektronik ausgebaut und es wird von einem µC angesteuert. Es kann und muss nur im Uhrzeigersinn drehen. Damit es sich voll drehen kann, wurde aus dem Getriebe und dem Poti die mechanische Begrenzung entfernt. Das Poti wird am ADC des µC ausgelesen. (siehe Bild) Auf dem Bild sind etwas mehr als zwei volle Umdrehungen abgebildet. Deutlich zu sehen ist, der eigentliche Messbereich des Potis (ca 55%). Dort ist eine Positionierung ja unproblematisch, aber: Wie könnte man die Position im restlichen Bereich (45%) einigermaßen genau erreichen? Eine Umdrehung dauert etwa 3s und es kann keine zusätzliche Hardware eingebaut werden.
Kolja L. schrieb: > und es kann keine zusätzliche Hardware > eingebaut werden. Dann hast du wieder mal Pech. Es wurde nämlich schon öfter mal gesagt, das man mit 2 Widerständen in den Leitungen zum Anfang und Ende des Potis den Bereich vergrössern kann. Damit wird die Steigung in deiner Grafik kleiner und der Bereich breiter. Kolja L. schrieb: > Das Poti wird am ADC des µC ausgelesen. Wenn der ADC auch die Servoelektronik ansteuert, kannst du das doch locker in der Software lösen.
Matthias S. schrieb: > Wenn der ADC auch die Servoelektronik ansteuert, kannst du das doch > locker in der Software lösen. Wenn ich ihn richtig verstanden habe, soll sich das Poti endlos drehen. Also auch über den Bereich bewegen, wo sich beim Poti gar keine Widerstandsbahn befindet. Wie willst du das in Software lösen? Er will ja auch dort, wo sich keine Widerstandsbahn befindet, einen Positionswert haben. Hier stehe ich auf dem Schlauch. :-)
Moin Matthias Vielleicht habe ich mich etwas ungeschickt ausgedrückt. Die X-Achse des Diagrammes stellt zwei volle Umdrehungen des Potis dar. Das Verhältnis (55/45) ist der Bereich des Potis in dem eine Widerstandsänderung erfolgt (55% = 198°) oder es in einem Bereich ist (45% = 162°) in den es normalerweise nicht gelangt, da dies die mechanische Begrenzung verhindert.
Kolja L. schrieb: > Das Verhältnis (55/45) ist der Bereich des Potis in dem eine > Widerstandsänderung erfolgt (55% = 198°) Und ob das so bleibt, hängt vom Aufbau des Potis ab. Wenn der Schleifer über alle möglichen Kanten und Ecken am Ende der Widerstansbahn poltert ist er schnell abgeschliffen. Nimm ein Servo mit einem magnetischen Encoder, dann bekommst du auch den vollen Winkel http://www.hobbyking.com/hobbyking/store/__22614__HobbyKing_8482_Mi_Digital_Brushless_Magnetic_Induction_HV_MG_Servo_4kg_0_034sec_57g.html MfG Klaus
@Matthias Das war wohl nichts. Dein Vorschlag funktioniert bei normaler Servofunktion, wenn nur ein Teil der Schleifbahn des Servos verwendet wird. Bei Servos sind dies üblicherweise 180° Servobewegung von 270° Potischleifbahn. Hier sieht man, dass der Poti über die gesammte Schleifbahn und darüber hinaus bewegt wird. Da stellen sich natürlich mehrere Fragen: Macht der Poti das auf die Dauer mit? Der Schleifer bewegt sich nicht nur auf der Schleifbahn sondern auch daneben (da hat er nichts verloren deshalb war da auch ein Anschlag). Welche Positionsgenauigkeit wird benötigt? Kann die Positon durch die Motorenlaufzeit interpoliert warden? Es kann ja am Anfang der Steigung wider "aufsynchronisiert" werden. Anders ist es nicht möglich. Das gibt die Funktion des Potis nicht her. Gruß JensM
Kolja L. schrieb: > Wie könnte man die Position im restlichen Bereich (45%) einigermaßen > genau erreichen? > > Eine Umdrehung dauert etwa 3s und es kann keine zusätzliche Hardware > eingebaut werden. einigermaßen genau... lege Referenzpunkte im Rampenbereich des Potis und mache den Rest über die Laufzeit.
tom69 schrieb: > einigermaßen genau... lege Referenzpunkte im Rampenbereich des Potis und > mache den Rest über die Laufzeit. Funktioniert das auch, wenn er innerhalb des toten Bereiches ein Stück drehen will? ;-)
Wie lange das Poti die ungewohnte Bewegung mitmacht, muss sich in einem Dauertest noch herausstellen. Magnetische Encoder kannte ich noch nicht, werde mich mal umschauen. Die müssen aber von der Größe und dem Preis ins Konzept passen. Das verlinkte Servo ist mit 4kgcm zu schwach und zu teuer. Interpolieren über die Motorlaufzeit hört sich erstmal gut an. Du meinst 5° = (t_U / 360°) * 5 = Zeit in Sekunden die der Motor Strom bekommt um 5° zu drehen? Dafür muss nur die Winkelgeschwindigkeit konstant sein. Interessante Idee, Danke!
Kolja L. schrieb: > Das verlinkte Servo ist mit 4kgcm zu schwach und zu teuer. War ja nur ein Beispiel. Dynamixel hat stärkere, die können möglicherweise schon alles was du machen willst. MfG Klaus
Kolja L. schrieb: > Wie könnte man die Position im restlichen Bereich (45%) einigermaßen > genau erreichen? Gar nicht, dort weiss Dein Aufbau nicht, wo er sich befindet. Ausserdem: Es soll sich also nur in eine Richtung drehen und Du willst trotzdem Positionen anfahren koennen? Ueberleg mal, was passiert, wenn das Ding bei Y=900 steht und Du Y=800 als Sollwert vorgibst. MMn: mechanischen Antrieb des Potis entfernen und Winkel separat erfassen. wendelsberg
Keine zusätzliche Hardware? Schade, sonst hätte ich vorgeschlagen ein 2. Poti um 180° gedreht anbauen, 2 ADC Eingänge und in Software das plausible Poti auswählen.
Moin Also die magnetischen Drehencoder sind leider preislich eine Liga zu hoch. (Ehr zwei Liegen...) Wenn ich nur in eine Richtung kann und und auf -10 will, muss ich wohl fast ne ganze Runde machen. Verstehe das Problem daran nicht? Wenn Platz für ein zweites Poti wäre, würde ich dort ein Mehrangpoti hinsetzen.
Kolja L. schrieb: > Wenn Platz für ein zweites Poti wäre, > würde ich dort ein Mehrangpoti hinsetzen. Wie sollte das denn das Problem lösen? Wenn Du endlos in eine Richtung drehst, bist Du auch damit irgendwann durch.
Ergänzung zu Mehrgangpoti: Was die Genauigkeit angeht: ein Mehrgang-Poti hat ein Getriebe, Getriebe haben Spiel. Grundsätzlich sollte das bei einer solchen Anwendung ein Nachteil sein. (Gut, wenn man immer nur in eine Richtung dreht, dann nicht, aber dann ist man irgendwann am Ende...)
Stimmt, aber endlos bedeutet in meinem Anwendungsfall maximal 2-3 Umdrehungen. Sorry für die unpräzise Angabe.
Kolja L. schrieb: > Also die magnetischen Drehencoder sind leider preislich eine Liga zu > hoch. 1,60€ ? AS5600
So, wieder zuhause und mal die Zeit zwischen den Messungen ausgeben lassen. Hier mal der Code:
1 | zeit_0 = millis(); |
2 | Serial.print(analogRead(A0)); |
3 | Serial.print(" ");
|
4 | Serial.println(millis() - zeit_0); |
5 | zeit_0 = 0; |
In blau wieder die Spannungen in orange (mit Faktor 100, damit sie in die Skalierung passen) die Zeiten. Sie liegen also zwischen 2 und 6 ms (den Anfang mal ausgenommen) Was mich stutzig macht, dass es einen Zusammenhang zu geben scheint, zwischen Zeit und Spannung. Als ob der Motor langsamer wird, wenn die Spannung hoch ist, oder sich im hohen Bereich nicht mehr ändert. Am Motor ist aber eine mechanische Last, die um ein Vielfaches größer ist, als die die zum drehen des Potis notwendig ist. Ne Idee?
So, jetzt mal die Umlaufzeiten gemessen. Von 70 Messungen liegen 4 außerhalb der Realität. (Blau in ms) Damit sollte sich erstmal arbeiten lassen. In orange der gemessene Spannungswert. Hier wieder der Code, falls es jmd interessiert, oder jmd ne Verbesserung hat.
1 | if (analogRead(A0) > 1000) |
2 | {
|
3 | runde = 1; |
4 | } |
5 | |
6 | if (analogRead(A0) < 1000 && runde == 1) |
7 | {
|
8 | Serial.print(millis() - zeit_1); |
9 | Serial.print(" ");
|
10 | Serial.println(analogRead(A0)); |
11 | runde = 0; zeit_1 = millis(); |
12 | } |
JensM schrieb: > @Matthias > Das war wohl nichts. Ha, wenn du wüsstest, wie lange wir mit dem TE schon über so eine simple Sache wie dieses Servo diskutieren - da greift man bald nach jedem Strohhalm. Wir haben ihm Mehrgangpotis, Servos mit echten Drehgebern und Segelwinden vorgeschlagen - ohne Wirkung. Er bastelt seit Wochen an einem automatischen Schraubendreher rum, ohne jeden Erfolg und er will unbedingt das in einem RC Standardservo unterbringen: Beitrag "Servo mit 360° gesucht, kein Hack!" Man beachte - 'kein Hack'
Nimm mal ein Potentiometer auseinander und schau es Dir genau an. Dann wird Dir klar, dass deine Messungen nicht "komisch" sind. Und dass dein Vorhaben völliger Unsinn ist.
Das Poti habe ich natürlich geöffnet, aber wie ich damit erklären kann, dass es in der Dauer zwischen den Messungen ein Muster gibt, weiß ich nun wirklich nicht. Ich wäre Dir sehr dankbar, wenn du helfen würdest. Danke und Gruß Kolja
Sorry, aber ich weiss nicht, wie ich Dir das erklären soll. Jetzt wo das Poti schon offen vor Dir liegt und dir dessen Funktionsweise noch immer nicht klar ist. Man sagt, dass ich gut erklären kann, aber jetzt bin ich ausnahmsweise mal sprachlos.
Funktionsweise: Inner Ring mit 2 Kontakten, damit der Widerstand vom Metallkranz zur Mitte immer gleich hoch ist. Äußer Ring mit einem Kontakt der den Gesamtwiderstand (1-3) auf die beiden Teilwiderstände 1-2 und 2-3 aufteilt. Aber warum hängt die Dauer der Messung mit dem Widerstand zusammen? Vielleicht habe ich ja echt ein Brett vor dem Kopf...
Kolja L. schrieb: > Wenn ich nur in eine Richtung kann und und auf -10 will, > muss ich wohl fast ne ganze Runde machen. > Verstehe das Problem daran nicht? Hmm, wenn ein Servo auf 70 steht und Du ihm sagst, es soll auf 60 gehen, dann wird es ganz profan -10 machen und nicht weiter vorwaerts drehen. Aber das liest sich hier wie so oft: Es wird krampfhaft versucht, eine falsche Loesung umzusetzen und das Problem an sich bleibt geheim. wendelsberg
Es ist hier wie so oft, es werden Antworten gegeben ohne die Frage gelesen oder gar verstanden zu haben. Eine Antwort hätte ich aber gerne noch: Warum hängt die Dauer der Messung mit dem Widerstand zusammen?
Kolja L. schrieb: > Es ist hier wie so oft, > es werden Antworten gegeben ohne die Frage gelesen oder gar verstanden > zu haben. > > Eine Antwort hätte ich aber gerne noch: > > Warum hängt die Dauer der Messung mit dem Widerstand zusammen? Bezogen auf dieses Programmbeispiel: Hier mal der Code: zeit_0 = millis(); Serial.print(analogRead(A0)); Serial.print(" "); Serial.println(millis() - zeit_0); zeit_0 = 0; Ausgegeben wird die Zeit für eine Schleifendurchlauf. Das ist die Zeit für die A/D-Wandlung und die serielle Ausgabe. Je größer der Messwert und auch die gemessene Zeit ist je länger dauert die serielle Ausgabe (x msek pro zeichen). Also ist die Schleife bei einem Messwert von 0 schneller als bei 1023.
Kolja L. schrieb: > Stimmt, aber endlos bedeutet in meinem Anwendungsfall maximal 2-3 > Umdrehungen. > Sorry für die unpräzise Angabe. und dann schmeißt Du das Gerät weg? :) Dann muss man sich wohl auch keine Gedanken über die Haltbarkeit eines Potis machen, bei dem der Schleifer über die Grenzen fährt... ;)
Hallo Heiko Damit hätte ich jetzt nicht gerechnet. Dennoch finde ich das logischer, als die Vermutung mit dem Poti. (Was auch immer damit gemeint sein sollte...) Ist es sinnvoll, die Dauer der kurzen Messungen bewusst zu verlängern? Also: Wenn noch keine x ms vorbei sind, mache die Schleife nochmal, wenn x ms schon vorbei sind, miss die Zeit. Bsp: Dann wäre die Dauer für eine Umdrehung (2s) unterteilt in 200 Schritte a 10ms. Somit ergäben sich 200 mögliche Stop-Positionen.
Kolja L. schrieb: > Hallo Heiko > > Damit hätte ich jetzt nicht gerechnet. > Dennoch finde ich das logischer, als die Vermutung mit dem Poti. > (Was auch immer damit gemeint sein sollte...) > > Ist es sinnvoll, die Dauer der kurzen Messungen bewusst zu verlängern? > Also: Wenn noch keine x ms vorbei sind, mache die Schleife nochmal, wenn > x ms schon vorbei sind, miss die Zeit. > > Bsp: > Dann wäre die Dauer für eine Umdrehung (2s) unterteilt in 200 Schritte a > 10ms. > Somit ergäben sich 200 mögliche Stop-Positionen. Im Prinzip ja. Ich würde evtl. mehrmals messen und mitteln, falls Rauschen oder Störungen die Messung verfälschen, oder evtl. die Bereichsgrenzen weiter auseinander wählen. Wenn du (im 2. Programmbeispiel) z. B. sowas wie 1001,999,1001,999 misst wird dies als eine sehr schnelle Umdrehung erkannt. Daher wäre es sicherer z.B. auf >1000 und <500 zu testen, und dann evtl. zusätzlich noch die gemessene Zeit für die Umdrehung auf Plausibilität zu überprüfen.
Hallo Ganz ohne zusätzliche Hardware gibt es schon auch noch eine Lösung . Dis I-t Kurve des DC Motors ist keine Zeitachsenparallele Gerade . Schau Dir mal den Strom mit einem Oszi an . Dadurch daß der Komutator nicht immer nur eine Spule des Ankers schaltet etsteht ein Muster daß sich regelmäsig wiederholt . Mit geeigneter Siebung sollte es möglich sein hieraus die anzahl der Umdrehungen des Ankers zu gewinnen . Mit geringer zusätzlicherHarware wuerde ich einen Hallsensor aufs Gehause kleben . Aus dessen gemessenem B-Feld bekommst Du auch die Anzahl der Umdrehungen heraus . Wuensche Viel Erfolg stephan
Mittlerweile habe ich das Poti aus dem Servo gegen ein RDC80 getauscht. Das sind quasi zwei Potis um 180° versetzt in einem Gehäuse.
Hi Wenn schon Hardware ersetzt wird, warum dann nicht gleich eine berührungsfreie Abtastung? (wobei der Austausch, eigentlich, im Anfangspost ausgeschlossen wurde - Doppelpotis wurden nämlich bereits genannt) Die Schleifer der Potis werden verschleißen. Wenn auch eine optische Abfrage eine geringere Auflösung mit sich bringen wird - aber immerhin keine 50% 'am Stück' ohne Signal.
Son RDC kostet n Euro, kann direkt mit einem µC ausgelesen werden, passt ohne Anpassungen in das Servo Gehäuse, hat eine mehr als ausreichend hohe Auflösung und soll laut Alps mindestens 100.000 Umdrehungen halten.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.



