www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik logarithmisches Poti linear machen


Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Ich habe aus versehen logarithmische statt lineare Motorpotis bestellt.

Da ich diese "nur" an einen AT-Mega anschließe, müsste ich den 
logarithmus doch raus rechnen können..

Weiß jmd. vielleicht was ich da rechnen muss(Formel)?

Oder hat jmd. für mich den richtigen such-string? Meine Suche führt 
nämlich weder hier noch bei Google zum Erfolg. Ich bin doch bestimmt 
nicht der erste mit diesem Problem..??

Vielen Dank schon mal für eure Hilfe
Dirk

Autor: Albi G. (deralbi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Machs mit einer Messwert reihe -> Drehwinkel  ADC-Wert  Ist bzw 
Sollwert

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier ist ein Link zu so einer Sache:
http://www.edn.com/article/CA46509.html

(Gott sei Dank sind die Formeln auf deutsch) GRINS

MfG Paul

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Paul:

Das beschreibt die Logarthmierung eines linearen Teils - also genau das 
Umgekehrte.

Mathematisch ist die Sache sehr einfach:

  u = umax * e ** ln(s)

s     ist die Stellgröße (Potiposition)
umax  ist die ans Poti angelegte Spannung
ln(s) ist die Spannung, die aus dem log. Poti bei Stellung s rauskommt
e     ist die eulersche Zahl e = 2,718281828459...
**    ist der Potenzieroperator
u     ist die linearisierte Größe

Mit anderen Worten: Man nimmt den ADC-Wert, rechnet ihn in den 
zugehörigen Spannungswert um und berechnet mit diesem Wert e-hoch-x.

Es ist also ein Riesenaufwand, für den ein kleiner µC viel Zeit braucht, 
wenn er keine FPU hat. Außerdem werden kleine Fehler aus den 
Potibereichen, die nur kleine Widerstandswerte bewirken, in große Fehler 
transformiert.

Eine andere Möglichkeit wäre, eine LUT zu konstruieren, die die 
Umrechnung macht- Damit handelt man sich allerdings noch weitere 
Ungenauigkeiten ein.

Ich denke, ein lineares Poti zu beschaffen, ist einfacher...

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Uhu Uhuhu wrote:

> Es ist also ein Riesenaufwand, für den ein kleiner µC viel Zeit braucht,
> wenn er keine FPU hat.

Das ist Oberquatsch, ein Motorpoti dreht ja nicht mit 10.000U/min!

> Außerdem werden kleine Fehler aus den
> Potibereichen, die nur kleine Widerstandswerte bewirken, in große Fehler
> transformiert.

Das ist dann aber ausschließlich Schuld der Auflösung des ADC.

Einen Trick gibt es, das Poti nicht als Spannungsteiler zu schalten 
sondern in Reihe mit einem Festwiderstand.
Bei geeigneter Wahl des Widerstands ist dann die Spannung wieder 
ausreichend linear.
Logarithmische Potis sind ja eh nicht für hohe Genauigkeit geeignet.


Peter

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Es ist also ein Riesenaufwand, für den ein kleiner µC viel Zeit braucht,
>> wenn er keine FPU hat.
>
> Das ist Oberquatsch, ein Motorpoti dreht ja nicht mit 10.000U/min!

Du bist ein Herzchen... ist die Floatingpoint-Lib kein Aufwand??? Und 
gelesen werden muß es wohl, ob es gerade verstellt wird, oder nicht.

> Bei geeigneter Wahl des Widerstands ist dann die Spannung wieder
> ausreichend linear.

Was ist "ausreichend linear"?

> Logarithmische Potis sind ja eh nicht für hohe Genauigkeit geeignet.

Eben. Deshalb ist der Ansatz keine gute Idee...

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also, mit diesen Log-Potis durfte ich auch schon einige (leidige) 
Erfahrungen sammeln:

Wie Peter schon geschrieben hat: Die Dinger sind extrem ungenau. Die 
Kurve ist alles, nur nicht logarithmisch.

Man kann eine Log-Kurve in eine S-Kurve ändern, wenn man einen 
Widerstand vom Mittelabgriff zum niederohmigen Ende legt.

Aber auch hier wieder das Problem: Da diese Log-Potis extrem ungenau 
sind, hat man bei einem zu kleinen Widerstand ganz schnell einen nicht 
stetigen Gesammtwiderstandsverlauf. Das ist für die meisten Anwendungen 
schlicht unbrauchbar.

Meine Lösung bestand darin, die Kurve mit einem Widerstand etwas 
"linearer" zu bekommen und die Kennlinie dieses "linearisierten" Potis 
aufzunehmen und den Rest in Software zu machen.

Im mittleren Drehbereich hatte ich so eine genügende Auflösung des 
Potis. Die Randbereiche waren unbrauchbar, war für meine Anwendung aber 
egal.

Autor: sechsnullfuenf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich wuerd die Dinger umtauschen.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Uhu Uhuhu wrote:
> Du bist ein Herzchen... ist die Floatingpoint-Lib kein Aufwand??? Und
> gelesen werden muß es wohl, ob es gerade verstellt wird, oder nicht.

Wozu float?
Um mit Kanonen auf Spatzen zu schießen?

Wie gesagt, sind von logarithmischen Potis keine Wunder zu erwarten.
Da reicht dicke ne Tabelle oder mehrere Geradenstücke, max 100 Byte 
Code.

Was einmal an Genauigkeit verloren ist, läßt sich hinterher nicht wieder 
reinrechnen.


Peter

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter Dannegger wrote:

> Was einmal an Genauigkeit verloren ist, läßt sich hinterher nicht wieder
> reinrechnen.

Aber sicher doch, das lässt sich sehr wohl machen. Nämlich mit genau 
solch einer Tabelle. Nur füllt man die dann nicht mit dem 
Taschenrechner, sondern dem Messgerät. Oder man lässt eine 
Selbstkalibrierung laufen - wozu hat das Teil schliesslich einen Motor.

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Peter Dannegger:
Lies doch einfach mal die Frage im OP...

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Aber sicher doch, das lässt sich sehr wohl machen. Nämlich mit genau
> solch einer Tabelle.

Bullshit.

Wenn das Poti auf den ersten 30° nur noch den halben Widerstandswert hat 
und bei der Mittelstellung schon 4/5 des Wertebereichs durch sind, hat 
in der letzten Hälfte des Drehbereichs Dein 10-Bit-AD-Wandler effektiv 
nur noch 7 Bit. Und diese 7 Bit reichen übrigens nicht mal mehr aus, um 
am Ende des Drehbereichs einige Grad aufzulösen.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Bullshit.

Stimmt, so herum gesehen. Ich bezog mich allerdings eher auf die 
Abweichung vom Logarithmus. Wobei man mit einem ADC auf Basis von 
Zeitmessung (comparator) möglicherweise etwas retten kann.

Autor: Unbekannter (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier mal eine Kennlinie eines echten, realen, logarithmischen 
Motor-Poti. Die X-Achse ist die Zeit, die Y-Achse ist der AD-Wert.

Wie man sieht, eine Katastrophe.

Autor: Olli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Unbekannter:

> Die X-Achse ist die Zeit, die Y-Achse ist der AD-Wert.

Die X-Achse ist die Zeit? Wie wärs mit dem Winkel? Hast du denn die 
Beschleunigung am Anfang der Messung miteinberechnet?

Du könntest ja einfach das Messprotokoll hochladen, dann könnten wir 
deine Messung besser kontrollieren.

Euer Olli

Autor: Esko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siehe dazu auch:
http://sound.westhost.com/pots.htm#taper
Dort wird ein Widerstandsverlauf gezeigt der dem vom Unbekannter Gast 
recht ähnelt, und auch erklärt warum dies so ist. Fazit ist: lineare 
Potis verwenden und mit Parallelwiderstand logarithmisieren.
@Olli: Selbst wenn am Anfang merklich beschleunigt würde, wäre ja nur 
das Plateau am Anfang kleiner.

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da muss ich dem Olli aber recht geben, ohne seriös erstelltes 
Messprotoll ist die gezeigte Grafik nichts Wert!

Denn ein altes Sprichwort besagt:
Wer misst, misst Mist.

Autor: Unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jo, wer ein ordentliches Messprotokoll will, darf sich gerne selbst die 
Mühe machen! ;-)

Für meine Zwecke genügte folgendes Verfahren:

- Motorpoti von Hand an den Beginn (Anschlag) drehen.
- AD-Wandler mit fester Abtastrate starten und Werte
  fortlaufend speichern.
- Den Motor des Potis einschalten.
- Warten bis das Poti am anderen Anschlag blockiert.
- AD-Wandlung und Aufzeichnung stoppen.
- Roh-Daten grafisch darstellen.

Da der Motor des Potis offensichtlich schon wenige Zehntel Sekunden nach 
dem Start mit konstanter Geschwindigkeit dreht (Klang!), die komplette 
Drehbewegung mehrere Sekungen dauert, benötigt man keinen Winkelgeber 
wenn man nur am grundsätzlichen Verlauf der Kurve interessiert ist.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.