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