Wie linearisiere ich ein logarithmisches Poti?

OP #3501826
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.
#3501836
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
Gast #3501837
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.
Gast #3501843
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.
Gast #3501851
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.
Gast #3501855
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?
#3502413
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
#3502431
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
OP #3502555
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.)
Gast #3502587
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.
#3502948
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
#3502981
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.

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