logarithmisches Poti linear machen

Gast #698539
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
#698591
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...
#698642
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
#698656
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...
Gast #698661
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.
#698773
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
#698777
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.
Gast #699018
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.
Gast #699056
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
Gast #699276
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren