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
Machs mit einer Messwert reihe -> Drehwinkel ADC-Wert Ist bzw Sollwert
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
@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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.