Forum: Mikrocontroller und Digitale Elektronik logarithmisches Poti linear machen


von Dirk (Gast)


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

von Albi G. (deralbi)


Lesenswert?

Machs mit einer Messwert reihe -> Drehwinkel  ADC-Wert  Ist bzw 
Sollwert

von Paul Baumann (Gast)


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

von Uhu U. (uhu)


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

von Peter D. (peda)


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

von Uhu U. (uhu)


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

von Unbekannter (Gast)


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.

von sechsnullfuenf (Gast)


Lesenswert?

Ich wuerd die Dinger umtauschen.

von Peter D. (peda)


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

von Andreas K. (a-k)


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.

von Uhu U. (uhu)


Lesenswert?

@Peter Dannegger:
Lies doch einfach mal die Frage im OP...

von Unbekannter (Gast)


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.

von Andreas K. (a-k)


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.

von Unbekannter (Gast)


Angehängte Dateien:

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.

von Olli (Gast)


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

von Esko (Gast)


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.

von Stephan (Gast)


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.

von Unbekannter (Gast)


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.

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.