Servo mit ext. Poti

OP #4515574
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.
Angehängte Dateien:
(Firma: matzetronics)
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.
Gast
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. :-)
OP
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.
Gast
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
Gast
@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
Gast
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.
OP
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!
Gast
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
Gast
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.
OP
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.
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...)
OP
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?
Angehängte Dateien:
OP
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
  }
Angehängte Dateien:
(Firma: matzetronics)
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'
Gast
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.
OP
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
Gast
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.
OP
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...
Gast
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
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...  ;)
OP
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.
Gast
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
Gast
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.
Gast
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.