Forum: Mikrocontroller und Digitale Elektronik Servo mit ext. Poti


von Kolja L. (kolja82)


Angehängte Dateien:

Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von npn (Gast)


Lesenswert?

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. :-)

von Kolja L. (kolja82)


Lesenswert?

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.

von Klaus (Gast)


Lesenswert?

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

von JensM (Gast)


Lesenswert?

@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

von tom69 (Gast)


Lesenswert?

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.

von npn (Gast)


Lesenswert?

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? ;-)

von Kolja L. (kolja82)


Lesenswert?

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!

von Klaus (Gast)


Lesenswert?

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

von wendelsberg (Gast)


Lesenswert?

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

von Noch einer (Gast)


Lesenswert?

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.

von Kolja L. (kolja82)


Lesenswert?

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.

von M.A. S. (mse2)


Lesenswert?

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.

von M.A. S. (mse2)


Lesenswert?

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...)

von Kolja L. (kolja82)


Lesenswert?

Stimmt, aber endlos bedeutet in meinem Anwendungsfall maximal 2-3 
Umdrehungen.
Sorry für die unpräzise Angabe.

von Programmtester (Gast)


Lesenswert?

Kolja L. schrieb:
> Also die magnetischen Drehencoder sind leider preislich eine Liga zu
> hoch.

1,60€ ?  AS5600

von Kolja L. (kolja82)


Angehängte Dateien:

Lesenswert?

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?

von Kolja L. (kolja82)


Angehängte Dateien:

Lesenswert?

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
  }

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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'

von Stefan F. (Gast)


Lesenswert?

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.

von Kolja L. (kolja82)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

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.

von Kolja L. (kolja82)


Angehängte Dateien:

Lesenswert?

Hier mal ein Foto.
Und jetzt gib dir ein Ruck und raus mit der Sprache :-)

von Kolja L. (kolja82)


Lesenswert?

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...

von wendelsberg (Gast)


Lesenswert?

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

von Kolja L. (kolja82)


Lesenswert?

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?

von Heiko G. (heikog)


Lesenswert?

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.

von M.A. S. (mse2)


Lesenswert?

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...  ;)

von Kolja L. (kolja82)


Lesenswert?

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.

von Heiko G. (heikog)


Lesenswert?

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.

von Stephan (Gast)


Lesenswert?

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

von Kolja (Gast)


Lesenswert?

Mittlerweile habe ich das Poti aus dem Servo gegen ein RDC80 getauscht.
Das sind quasi zwei Potis um 180° versetzt in einem Gehäuse.

von posti (Gast)


Lesenswert?

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.

von Kolja (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.