Forum: Mikrocontroller und Digitale Elektronik Wie linearisiere ich ein logarithmisches Poti?


von Thomas M. (langhaarrocker)


Lesenswert?

Ein logarithmisches Poti wird per AD Wandler eines AVR ausgelesen.
Gibt es raffinierte Algorithmen, wie man auf einem 8-Bit Mikrocontroller 
diese Messwerte wieder linearisieren kann? Mir fällt da nur eine LUT 
ein, aber die braucht mir zu viel Platz.

: Verschoben durch Moderator
von holger (Gast)


Lesenswert?

>Gibt es raffinierte Algorithmen, wie man auf einem 8-Bit Mikrocontroller
>diese Messwerte wieder linearisieren kann?

Ja, man lötet das logaritmische aus und ein lineares ein.

von Thomas M. (langhaarrocker)


Lesenswert?

Sorry, dass ich nicht erwähnt hatte, dass eine elektronische / 
mechanische Modifikation des Eingangssignals keine Option ist. Da ich 
explizit nach einer algorithmischen Lösung fragte, hielt ich das für 
überflüssig.

Hintergrund: Mit dem Poti wird eine analoge Elektronik gesteuert. Durch 
ein Stereo-Poti ersetzt habe ich zwar einen separaten Kanal für den AD 
Wandler des Mikrocontrollers, aber der ist dann immer noch 
logarithmisch.

von Harald W. (wilhelms)


Lesenswert?

Thomas M. schrieb:

> Hintergrund: Mit dem Poti wird eine analoge Elektronik gesteuert. Durch
> ein Stereo-Poti ersetzt habe ich zwar einen separaten Kanal für den AD
> Wandler des Mikrocontrollers, aber der ist dann immer noch
> logarithmisch.

Dann ersetz die Widerstandsbahn des zweiten Potis durch die eines
baugleichen linearen Potis. Grundsätzlich kannst Du mit dem µC
zwar auch per Formel mathematisch delogarithmieren; das wird
aber m.E. wesentlich aufwändiger als das Auslesen einer Tabelle.
Gruss
Harald

von Amateur (Gast)


Lesenswert?

Da die meisten Mikrokontroller auch rechnen können ist das eigentlich 
kein Problem. Wie bereits angedeutet könnte auch eine Tabelle helfen.
Bedingt durch die Kennlinie selbst wirst Du aber hinter einem 10- oder 
12-Bit-Wandler, mächtig Abstriche von der Genauigkeit bzw. der Auflösung 
machen müssen.

von Amateur (Gast)


Lesenswert?

Ich vergaß:
Es gibt natürlich auch analoge Lösungen. Die Meisten aber erfordern eine 
trickreiche Temperaturkompensation, da sie häufig an Dioden- oder 
Transistorkennlinien arbeiten.
Möglicherweise haben aber Analog Devices oder TI oder ... auch fertige 
Schaltungen zu diesem Zweck.

von Harald W. (wilhelms)


Lesenswert?

Amateur schrieb:

> mächtig Abstriche von der Genauigkeit

Bei einem logarithmischen Poti sind Fehler von 10...30% üblich.

von .... (Gast)


Lesenswert?

Also logarithmisches rechnen auf einem Mikrocontroller benötigt auch 
einiges an Instuktionen - unterschätze das nicht.
Wenn dir eine Tabelle zu groß ist, solltest du evtl an einen Algorithmus 
denken, der die Tabelle verkleinert.

Man muss z.B. nicht jeden Punkt speichern sondern:
1) Erstmal nur 3..4 Werte gleichverteilt über den gesamten Messbereich
Dann Kubisch Interpolieren und mit dem Sollwert vergleichen
2) Dort, wo die Abweichung durch das Interpolieren zu groß werden, fügst 
du eine weitere Stützstelle in deine Tabelle ein. Und zwar dort, wo das 
Maximum der Abweichung war.
3) Das wiederholst du so lange, bis du bei einer zufriedenstellenden 
Genauigkeit angelangt bist.

Durch das Kubische interpolieren wirst du merken, dass du der Kurvenform 
mit schon recht wenig stützstellen recht nahe kommst.
Das ist schnell, Platzeffizient, und wenn du einmal die Minimal-Tabelle 
gefunden hast auch extrem platzsparend, da weder Tabelle noch der 
Auslese-Algorithmus besonders kompliziert sind.

von holger (Gast)


Lesenswert?

>Durch
>ein Stereo-Poti ersetzt habe ich zwar einen separaten Kanal für den AD
>Wandler des Mikrocontrollers, aber der ist dann immer noch
>logarithmisch.

Dann miss mal ein paar Spannungen für ein paar Stellungen mit deinem 
Multimeter an deinem logarithmischen Poti. Dann rechnest du dir
aus wie gut du diese mit einem 10Bit ADC überhaupt
auswerten kannst. Wahrscheinlich reicht die Auflösung des
ADC dafür gar nicht.

Was ist das überhaupt für eine Schaltung an der dein Poti hängt?

von Potti (Gast)


Lesenswert?

Sicherlich hilft schon ein geschickt platzierter Widerstand.

von Axel S. (a-za-z0-9)


Lesenswert?

Logarithmische Potis sind in Wahrheit auch seltenst solche, sondern 
haben meist eine aus etlichen linearen Stücken mehr oder weniger 
sorgfältig angenäherte Kennlinie.

Wenn es also nur um ein Einzelexemplar geht, könnte Ausmessen der 
Kennlinie dabei helfen, die Kennlinie ebenfalls stückweise linear 
zurückzuinterpolieren.


XL

von Volker G. (voga2073)


Lesenswert?

Axel Schwenke schrieb:
> Wenn es also nur um ein Einzelexemplar geht, könnte Ausmessen der
> Kennlinie dabei helfen, die Kennlinie ebenfalls stückweise linear
> zurückzuinterpolieren.

...und dann wird das mit dem Rechnen noch aufwändiger. Ich halte die LUT 
für die günstigste Variante. AD beim AVR sind 10 Bit, also 2kB 
Platzbedarf, angesichts der Genauigkeit reichen womöglich schon 1kB.

Das Einbinden der math-Lib braucht wahrscheinlich mehr Platz.

Volker

von Thomas M. (langhaarrocker)


Lesenswert?

Danke für die Ideen!
Ich werde mal den Ansatz probieren den 10-Bit Wertebereich in Segmente 
zu unterteilen, die Segmente unterschiedlich zu stauchen und dann ggfs 
durch eine entsprechend kleine LUT zu schicken. Wenn ich damit die 
Potistellung mit einer Auflösung von 6 Bit ermitteln kann, reicht mir 
das.

(Heimlich hatte ich ja gehofft, dass es möglicherweise irgendeine 
pfiffige Bitschubserei und -rollerei gibt.)

von Amateur (Gast)


Lesenswert?

Möglicherweise gibt es auch einen Mittelweg.
Du misst das Poti aus und zerlegst den Arbeitsbereich in z.B. 5 Segmente 
mit jeweils eigener, linearer Steigung.
Das wäre mathematisch nicht besonders anspruchsvoll (Zeitintensiv) und 
lässt den Platz für andere Tabellen frei.

von Axel S. (a-za-z0-9)


Lesenswert?

Thomas M. schrieb:
> wenn ich damit die Potistellung mit einer Auflösung von 6 Bit
> ermitteln kann, reicht mir das.

Dann brauchst du auch nur eine Tabelle mit 64 Einträgen. Dann suchst du 
einfach mit deinem ADC-Wert in der Tabelle, zwischen welchen 2 
Stützstellen der liegt. Ob 8 Bit ADC-Auflösung reichen, mußt du 
ausprobieren. Das würde die Tabelle nochmal verkleinern.


XL

von Peter D. (peda)


Lesenswert?

.... schrieb:
> Also logarithmisches rechnen auf einem Mikrocontroller benötigt auch
> einiges an Instuktionen - unterschätze das nicht.

Wenn Du es schaffst, das Poti schneller zu drehen, als der MC 
Logarithmen rechnen kann, dann wird der Poti-Schleifer durch die Reibung 
rot glühen oder er reißt durch die Fliehkraft einfach ab.


Echte logarithmische Potis wird man heutzutage kaum finden, um ein 
Ausmessen wird man daher nicht drumrum kommen.
Oftmals sind es nur 2 verschiedene Bahnsegmente, dann reichen 2 Geraden.

: Bearbeitet durch User
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.