Forum: Mikrocontroller und Digitale Elektronik Tankanzeige mit AVR nicht linear


von Frank S. (blaueslicht)


Lesenswert?

Hallo zusammen,
Ich habe einen Tankgeber am Atmega644P über einen Spannungsteiler 
angeschlossen. Soweit funktioniert das ganze auch. Allerdings sind die 
Ergebnisse meiner Berechnungsformel leider nicht linear.

Folgende ADC Werte erhalte Ich:

Tank voll - 290 (soll 22liter entsprechen, Wert ist korrekt)
Tank 3/4 - ca 500 (soll 16,5 liter entsprechen, Berechnung ergibt nur ca 
14l)
Tank halbvoll - 600 (soll 11 liter entsprechen, Berechnung ergibt nur ca 
8,2l)
Tank 1/4 - ca 700 (soll 5,5l entsprechen, Berechnung ergibt nur ca 3,5l)
Tank leer - 780 (soll 0liter entsprechen, Wert ist korrekt)

Meine derzeitige c Formel lautet:
tank_tmp = (780-adc_wert)*0.0448979591836735;

Der Faktor 0.044... ist wie folgt entstanden:
780 (min Wert) - 290 (max Wert) = 490 Schritte
22 liter (Tank voll) geteilt durch 490

Bauart bedingt hat der Tankgeber bei Tank leer den größten Widerstand.

Wie kann ich die Werte "korrigieren" ?
Danke schon mal.
Gruß

von Kai S. (hugstuart)


Lesenswert?

Look-Up-Table

von casud (Gast)


Lesenswert?

http://de.wikipedia.org/wiki/Polynominterpolation

Sieh dir das Beispiel mit der Tangensfunktion an.

von Oldie (Gast)


Lesenswert?

Die ADC-Werte sind ja ganz nett:
Sie sagen, was aus deiner Schaltung herauskommt.
Sie sagen aber nicht, mit welcher Spannung gearbeitet
wird und wie die Widerstände mit dem Geberwiderstand
verschaltet sind.

Zeig doch mal eine kleine Skizze,
sonst wird das Raten zu nervig.

von HolgerR (Gast)


Lesenswert?

Moin
ist das ein Moped-Tank?
Das wird dann nie linear.
Gruß Holger

von Oldie (Gast)


Lesenswert?

Oder sage einfach welche Widerstandswerte des Gebers sich
für die Zustände leer, 1/4, 1/2, 3/4, voll ergeben.

Dann lässt sich da schon was machen!

von MaWin (Gast)


Lesenswert?

Frank S. schrieb:
> Wie kann ich die Werte "korrigieren" ?

Ein Tank muss ja nicht linear sein, die Höhe des Schwimmers (oder was du 
sonst als Tanksensor hast, du schreibst es ja nicht) kann durchaus 
unlinear mit dem Tankvolumen zusammenhängen.

Das kann eine Tabelle lösen, mit stückweiser Interpolation.

von H.Joachim S. (crazyhorse)


Lesenswert?

MaWin schrieb:
> Ein Tank muss ja nicht linear sein, die Höhe des Schwimmers (oder was du
> sonst als Tanksensor hast, du schreibst es ja nicht) kann durchaus
> unlinear mit dem Tankvolumen zusammenhängen.

Kann nicht nur, sondern ist es praktisch immer.

von Oldie (Gast)


Lesenswert?

Das haben wir festgestellt:

1) Tankgeber sind nicht unbedingt linear.
   Bei alten Autos war die Anzeige ähnlich:
   Entweder ging es zu schnell von voll auf halb,
   oder zu langsam - und dafür schnell von halb auf
   leer. Die waren nicht korrigiert.

2) Ein Spannungsteiler verändert das nochmal.

3) Wenn man den Widerstandsverlauf des Tankgebers
   kennt, und die Anschaltung (Spannungsteiler) an
   den ADC, lässt sich der Füllstand aber mit etwas
   Berechnung deutlich genauer anzeigen.

4) Wenn  Frank S. (blaueslicht)  keine Daten liefert,
   kann man ihm aber nicht helfen.

von Mike (Gast)


Lesenswert?

Frank S. schrieb:
> Meine derzeitige c Formel lautet:
> tank_tmp = (780-adc_wert)*0.0448979591836735;

Wie soll man denn mit ca.-Werten eine vernünftige Formel aufstellen. 
Hast du nun Werte für "Tank 3/4" und "Tank 1/4" oder nicht. Zumindest 
der für "Tank 3/4" scheint arg aus der Reihe zu fallen.

von Sascha (Gast)


Lesenswert?

Versuchs doch mal so: Tank leermachen und ADC-Messergebnis aufschreiben. 
Einen Liter Sprit reinkippen, aufschreiben, und das ganze widerholen bis 
der Tank voll ist. Wenn du dann die Kennlinie ADC-Messwert/Liter 
zeichnest, solltest du sehen, dass die Kennlinie krumm ist, da Tanks 
selten eine regelmäßige Form haben.

Oder du nimmst statt einem Faktor (deine ~0,045) mehrere, jeweils 
zwischen 1, 0,75, 0,5, 0,25 und 0 Tank berechnet. Das sollte ausreichend 
genau sein.

von Frank S. (blaueslicht)


Lesenswert?

Moin, hätt ich gewusst dass es so viele Nachtaktive hier gibt, wäre ich 
noch ein bissel wach geblieben :)
Es ist ein Tankgeber mit Schwimmer (30-180 Ohm) in Reihe mit einem 75 
Ohm Widerstand an 5V, was auch AREF ist.

Sieht genauso aus, nur die Werte sind nicht gleich:
http://www.ebay.de/itm/Tankanzeige-Tankgeber-Tankuhr-Universal-12-24V-Boot-Traktor-Schlepper-240-33-Ohm-/281147480180?pt=Bootsteile_Zubeh%C3%B6r&hash=item4175b21874

Der Tank ist Rechteckig (Bootstank) und das Poti des Gebers soll mittig 
im Tank platziert werden. Der Schwimmer soll dann den maximalen Weg von 
oben nach unten gehen können.

Berechnet habe ich folgende Spannungswerte über den Tankgeber: 1,49V 
voll bis 3,55V leer. Stimmt auch einigermaßen mit der Realität überein.

Tank
1/1 - 32 Ohm
3/4 - 57 Ohm
1/2 - 96 Ohm
1/4 - 145 Ohm
0 - 186 Ohm

Wie Oldie bereits schrieb, ist das Problem dass die Anzeige zu schnell 
von voll auf halb geht.

von Mike (Gast)


Lesenswert?

Frank S. schrieb:
> Wie Oldie bereits schrieb, ist das Problem dass die Anzeige zu schnell
> von voll auf halb geht.

Das Problem ist, dass du mit einer linearen Gleichung keinen 
nichtlinearen Zusammenhang modellieren kannst.

von 123 (Gast)


Lesenswert?

Oldie schrieb:
> Das haben wir festgestellt:
>
> 1) Tankgeber sind nicht unbedingt linear.
>    Bei alten Autos war die Anzeige ähnlich:
>    Entweder ging es zu schnell von voll auf halb,
>    oder zu langsam - und dafür schnell von halb auf
>    leer. Die waren nicht korrigiert.
>
> 2) Ein Spannungsteiler verändert das nochmal.

Wenn du damit auf die Linearität des Systems anspielst - Das kann nicht 
sein. Der Spannungsteiler ist ein (bis auf geringe parasitäre Effekte 
die bei dir kaum zum Tragen kommen) eine hochgradig lineare Schaltung. 
Der Spannungsteiler ändert nichts an der Linearität oder 
Nichtlinearität.

> 3) Wenn man den Widerstandsverlauf des Tankgebers
>    kennt, und die Anschaltung (Spannungsteiler) an
>    den ADC, lässt sich der Füllstand aber mit etwas
>    Berechnung deutlich genauer anzeigen.

Das nennt man Modellbildung.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Frank S. schrieb:
> Meine derzeitige c Formel lautet:
> tank_tmp = (780-adc_wert)*0.0448979591836735;

Mit der Nachkomma-Genauigkeit könntest du deinen Tankinhalt auf das Atom 
genau ausmessen, vermutlich noch darunter ;-)

Ob das deine Controller-Arithmetik das auch so genau kann 
(Rundungsfehler) oder ob du eine derartig feine Auflösung brauchst, oder 
ob dein Tankinhalt wirklich so exakte 22,00000000000000000000 Liter 
Inhalt hat, weißt nur du allein.

ein Schritt (diskreter Wert) kann halt nur 22 Liter / 490 Schritte = 
0,4489 ... also, ca. 45 Milli-Liter auflösen.

also ergäbe ein Meßwert in Voll-Aussteuerung einem Tankinhalt von

22,00000000000002e+16 Liter ("genau" berechnet), bzw.
22,050 Liter ("gerundet")



Da kannst du locker mit Integer-Arithmetik rechnen ....

von Gerhard W. (gerhard86)


Lesenswert?

123 schrieb:
> Wenn du damit auf die Linearität des Systems anspielst - Das kann nicht
> sein. Der Spannungsteiler ist ein (bis auf geringe parasitäre Effekte
> die bei dir kaum zum Tragen kommen) eine hochgradig lineare Schaltung.
> Der Spannungsteiler ändert nichts an der Linearität oder
> Nichtlinearität.

Das System ist aber nicht einfach nur ein Spannungsteiler. Bei einem 
variablen Widerstand(Potigeber) gegen Masse in Serie mit einem 
Festwiderstand ist Ua=Uref*Rvar/(Rfest+Rvar), mit Rvar als 
Eingangsgröße, und das ist alles andere als linear.

: Bearbeitet durch User
von Mike (Gast)


Lesenswert?

Gerhard W. schrieb:
> und das ist alles andere als linear.

Eben, darum:

Mike schrieb:
> Das Problem ist, dass du mit einer linearen Gleichung keinen
> nichtlinearen Zusammenhang modellieren kannst.

von ?!? (Gast)


Lesenswert?

Gerhard W. schrieb:
> Das System ist aber nicht einfach nur ein Spannungsteiler. Bei einem
> variablen Widerstand(Potigeber) gegen Masse in Serie mit einem
> Festwiderstand ist Ua=Uref*Rvar/(Rfest+Rvar), mit Rvar als
> Eingangsgröße, und das ist alles andere als linear.

Das sind alles Widerstände, egal ob Poti oder Reihenwiderstand. Ich sehe 
hier kein einziges nichtlineares Bauelement. Wodurch soll hier eine 
Nichtlinearität auftreten?
Vorausgesetzt natürlich, daß das Poti nicht logarithmisch ist, was ich 
aber bei einem Tankgeber nicht annehme.
Selbst der Tank ist rechteckig, hat also keine Verjüngungen oder 
sonstige Verformungen.

von Paul B. (paul_baumann)


Lesenswert?

Der Tank hat doch einen Inhalt von xxx Kubik zentimetern.

Bei "hoch 3" (Kubik) kann der Zusammenhang zwischen Füllhöhe und Inhalt
doch nicht linear sein, oder bin ich noch nicht ganz wach?

MfG Paul

von MaWin (Gast)


Lesenswert?

Du bist noch nicht wach.

von Georg G. (df2au)


Lesenswert?

?!? schrieb:
> Wodurch soll hier eine
> Nichtlinearität auftreten?

Vorschlag: Nimm Excel und mach dir eine Tabelle für den Füllstand von 0 
bis 1 mit Schrittweite 1/10. Dann zeichne ein Diagramm. Sieh dir die 
Kurve an. Sie ist stetig aber nicht linear.

von Mike (Gast)


Lesenswert?

?!? schrieb:
> Wodurch soll hier eine Nichtlinearität auftreten?

Thema verfehlt

Es geht um die Linearität zwischen Widerstand bzw. Spannung und 
Literzahl.

von Biker (Gast)


Lesenswert?

Paul Baumann schrieb:
> Bei "hoch 3" (Kubik) kann der Zusammenhang zwischen Füllhöhe und Inhalt
> doch nicht linear sein

Der Tank wird doch nicht aus eine Ecke heraus gefüllt ...

von ?!? (Gast)


Lesenswert?

Mike schrieb:
> ?!? schrieb:
>> Wodurch soll hier eine Nichtlinearität auftreten?
>
> Thema verfehlt
>
> Es geht um die Linearität zwischen Widerstand bzw. Spannung und
> Literzahl.

Ganz und gar nicht, ich habe nur auf den Einwurf von Gerhard 
geantwortet, der mehrere Widerstände anführte und dann sagte, daß diese 
"alles andere als linear" seien.

Beim Gesamtsystem ist mir schon klar, daß zum Beispiel auch durch den 
Kreisbogen, den der Schwimmer zwischen seiner oberen und unteren 
Stellung beschreibt, eine Nichtlinearität reinkommt.

von Georg G. (df2au)


Lesenswert?

?!? schrieb:
> Ganz und gar nicht, ich habe nur auf den Einwurf von Gerhard
> geantwortet, der mehrere Widerstände anführte und dann sagte, daß diese
> "alles andere als linear" seien.

Nochmals, ganz langsam geschrieben: Es ist kein klassisches Poti sondern 
es sind ein Festwiderstand und ein veränderlicher Widerstand. Und das 
ergibt auch mit einem linearen Widerstand eine gekrümmte Kennlinie. 
Glaub es, probiere es aus oder rechne es.

von Mathematiker (Gast)


Lesenswert?

Gerhard W. schrieb:
>
?!? schrieb:
> Ganz und gar nicht, ich habe nur auf den Einwurf von Gerhard
> geantwortet, der mehrere Widerstände anführte und dann sagte, daß diese
> "alles andere als linear" seien.

Dann versuche mal, die Gleichung
1
Ua=Uref*Rvar/(Rfest+Rvar)
mit Rvar als unabhängiger Variable in die Form
1
y = mx + b
zu bringen.

von ge-nka (Gast)


Angehängte Dateien:

Lesenswert?

Georg G. schrieb:
> Vorschlag: Nimm Excel und mach dir eine Tabelle für den Füllstand

von ge-nka (Gast)


Angehängte Dateien:

Lesenswert?

Und jetzt mit Werten aus deinem anderen Post, oben rechts im Diagramm 
steht die Formel die der gepunkteten Linie entspricht.

von Der Physiker (Gast)


Lesenswert?

ge-nka schrieb:
> Unbenannt.PNG

Und wie kommst du auf die Werte für die Spannung?

Bestimmt nicht mit o.g. Spannungsteilergleichung.

Du drehst die mit deinem Excel-Sheet im (falschen) Kreis. Guck dir mal 
deinen Korrelationskoeffizienten an. Spätestens der sollte dich bei 
Auswertung von Messungen nachdenklich stimmen.

von Dennis Heynlein (Gast)


Lesenswert?

Georg G. schrieb:
> ?!? schrieb:
>> Wodurch soll hier eine
>> Nichtlinearität auftreten?
>
> Vorschlag: Nimm Excel und mach dir eine Tabelle für den Füllstand von 0
> bis 1 mit Schrittweite 1/10. Dann zeichne ein Diagramm. Sieh dir die
> Kurve an. Sie ist stetig aber nicht linear.

Excel kann dir dann auch zusätzlich mit Regression die Formel darstellen 
die es idealerweise beschreibt.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Dennis Heynlein schrieb:
> Georg G. schrieb:
>> ?!? schrieb:
>>> Wodurch soll hier eine
>>> Nichtlinearität auftreten?
>>
>> Vorschlag: Nimm Excel und mach dir eine Tabelle für den Füllstand von 0
>> bis 1 mit Schrittweite 1/10. Dann zeichne ein Diagramm. Sieh dir die
>> Kurve an. Sie ist stetig aber nicht linear.
>
> Excel kann dir dann auch zusätzlich mit Regression die Formel darstellen
> die es idealerweise beschreibt.

Sorry zu spät gelesen :)

von ge-nka (Gast)


Angehängte Dateien:

Lesenswert?

Da sind die Formeln die in Zellen stecken, wurde natürlich angenommen 
3,55V ist 100% und 1,49 0% und dann die Zwischenschritte berechnet 25%, 
50%, 75%.
deswegen ist die Kurve so linear.

mehr Input aus dem Satz konnte man nicht rauskitzeln:
Berechnet habe ich folgende Spannungswerte über den Tankgeber: 1,49V
voll bis 3,55V leer. Stimmt auch einigermaßen mit der Realität überein.

Und  ADC wurde dann mit 1023/5*U(inV) berechnet.(wurde angenommen, dass 
die Referenzspannung 5V beträgt)

von Mike (Gast)


Angehängte Dateien:

Lesenswert?

Frank S. schrieb:
> Berechnet habe ich folgende Spannungswerte über den Tankgeber: 1,49V
> voll bis 3,55V leer. Stimmt auch einigermaßen mit der Realität überein.
>
> Tank
> 1/1 - 32 Ohm
> 3/4 - 57 Ohm
> 1/2 - 96 Ohm
> 1/4 - 145 Ohm
> 0 - 186 Ohm

ge-nka schrieb:
> Da sind die Formeln die in Zellen stecken, wurde natürlich angenommen
> 3,55V ist 100% und 1,49 0% und dann die Zwischenschritte berechnet 25%,
> 50%, 75%.
> deswegen ist die Kurve so linear.

Die linearen Zwischenwerte entstammen leider einem völlig unpassenden 
Modell und stimmen nur bei den beiden Punkten mit den Meßdaten überein. 
Man muss schon die Spannungsteilergleichung mit den Fixpunkten 1,49V @ 
32Ω und 3,55V @ 186Ω benutzen.

Wenn man am Spannungsteiler 5V anliegen hat und den oberen Widerstand zu 
75Ω wählt kommen genau die genannten Fixpunkte raus

Tank
1/1   32 Ω   1,49 V   22,0 l
3/4   57 Ω   2,15 V   16,5 l
1/2   96 Ω   2,80 V   11,0 l
1/4  145 Ω   3,28 V    5,5 l
  0  186 Ω   3,55 V    0,0 l

von Rudolph (Gast)


Lesenswert?

Frank S. schrieb:

> Atmega644P
> tank_tmp = (780-adc_wert)*0.0448979591836735;

Ist das Dein Ernst?

von Mike (Gast)


Lesenswert?

Rudolph schrieb:
> Ist das Dein Ernst?

Blitzmerker, lies mal weiter oben ...

von Rudolph (Gast)


Lesenswert?

Mike schrieb:
> Blitzmerker, lies mal weiter oben ...

Gelesen, nur hat sich noch niemand direkt über die Gleitkomma 
Verarbeitung gewundert.

von npn (Gast)


Lesenswert?

Rudolph schrieb:
> Mike schrieb:
>> Blitzmerker, lies mal weiter oben ...
>
> Gelesen, nur hat sich noch niemand direkt über die Gleitkomma
> Verarbeitung gewundert.

Doch, hier zum Bleistift:
Wegstaben Verbuchsler schrieb:
> Mit der Nachkomma-Genauigkeit könntest du deinen Tankinhalt auf das Atom
> genau ausmessen, vermutlich noch darunter ;-)

von Mike J. (linuxmint_user)


Lesenswert?

Er kann es ja auch ohne Gleitkommazahlen berechnen:
((780-290)*449)/10 = 22001 Milliliter

Auf eine Ungenauigkeit von 1ml kommt es doch bestimmt nicht an.

Er muss ja nicht unbedingt ein Polynom nutzen, es reicht doch wenn er 
mehrere lineare Teilabschnitte aus den Werten der Tabelle definiert.

: Bearbeitet durch User
von Mike (Gast)


Lesenswert?

Mike J. schrieb:
> Er kann es ja auch ohne Gleitkommazahlen berechnen:
> ((780-290)*449)/10 = 22001 Milliliter

Eine Division durch 10 ist für den µC nun leider immer noch eine eher 
mühselige Operation. Wenn dann sollte man die Konstanten so wählen, dass 
man durch eine glatte Zweierpotenz teilen kann. Damit sollte der 
Atmega644P es locker schaffen, den Tankinhalt ein paarhundert Mal pro 
Sekunde zu berechnen.

von Georg G. (df2au)


Lesenswert?

Mike schrieb:
> den Tankinhalt ein paarhundert Mal pro
> Sekunde zu berechnen.

Wobei es sich empfiehlt, immer über 1000 Messungen oder mehr zu mitteln. 
Die Brühe schwappt nämlich ein wenig hin und her.

von Amateur (Gast)


Lesenswert?

@Frank

Oh, Wunder!

Ein Gefäß, das einen Querschnitt hat, der konstruktiven und 
crashtechischen Gesichtspunkten folgt.

Ein Geber, der bestimmt schon viel von Bögen und Winkelfunktionen gehört 
hat, aber noch nie etwas von Linearität.

Ein Poti, das zwar Wasser- und Benzindicht ist, bei Erschütterung, Wärme 
und Kälte funktioniert, aber noch nie was von ppm und Genauigkeit gehört 
hat.

... und das Ergebnis ist nicht linear. - Eine Riesensauerei ist das aber 
auch.

Vielleicht solltest Du Atmel verklagen;-)

von Mike J. (linuxmint_user)


Lesenswert?

Georg G. schrieb:
> Wobei es sich empfiehlt, immer über 1000 Messungen oder mehr zu mitteln.
> Die Brühe schwappt nämlich ein wenig hin und her.

Ha ha, ihr seid ja ganz schön gemein.

@ Frank S. (blaueslicht)
An den ADC-Pin vom Spannungsteiler wird noch ein 100nF Kondensator gegen 
Masse gelötet und eine Messung pro Minute sollte für diese Zwecke 
ausreichen.

von c-hater (Gast)


Lesenswert?

Frank S. schrieb:

> Es ist ein Tankgeber mit Schwimmer (30-180 Ohm) in Reihe mit einem 75
> Ohm Widerstand an 5V, was auch AREF ist.

> Ich habe einen Tankgeber am Atmega644P über einen Spannungsteiler
> angeschlossen. Soweit funktioniert das ganze auch. Allerdings sind die
> Ergebnisse meiner Berechnungsformel leider nicht linear.

Wie anderweitig im Thread bereits klargestellt (auch wenn es natürlich 
wie immer Idioten gibt, die es nicht checken, aber trotzdem meinen, 
ihren Senf zum Thread beitragen zu müssen), liegt das daran, daß der 
Zusammenhang tatsächlich auch nicht linear ist.

> Der Tank ist Rechteckig (Bootstank)

Rechtecke sind Flächengebilde und haben dementsprechend unabhängig von 
Form und Größe immer exakt das Volumen 0, da ihnen schlicht die 
Ausdehnung in die dritte Dimension fehlt. Du meintest eigentlich: 
quaderförmig oder, etwas allgemeiner: prismatisch.

Das beseitigt aber nur eine der vielen Nichtlinearitäten in deinem 
Zusammenhang. Selbst wenn man die nicht systematischen Nichtlinearitäten 
in den Skat drückt (ADC-Wandlerkennlinie, Sensorpoti-Kennlinie) und sie 
näherungsweise als linear annimmt, so verbleiben doch immer noch zwei 
systematische nichtlineare Teilzusammenhänge:

1)
Füllstandsmesser mit Schwimmer sind üblicherweise so konstruiert, daß 
der
Schwimmer eine Kreisbahn beschreibt. Nur wenn die Schwimmerstange sehr 
lang im Vergleich zur Schwimmerauslenkung ist, könnte man hier von einem 
näherungsweise linearen Zusammenhang ausgehen. Da Tank-Konstrukteure 
aber aus mehreren Gründen üblicherweise dazu neigen, das Verhältnis 
zwischen Oberfläche und Volumen eines Tanks zu minimieren, den also 
tendenziell immer in Richtung Kugel optimieren, ist fast immer auch die 
Länge der Schwimmerstange in der gleichen Größenordnung wie die 
Auslenkung des Schwimmers. Und dann ist der Zusammenhang eben nicht mehr 
mit hinreichender Genauigkeit linear, sondern er folgt einer 
trigonometrischen Funktion.

2)
Deine Schaltung selber ist auch nichtlinear.

Vcc
o-------
        |
        _
       | |R1
       |_|75
        |
        *-----o Vm
        |
        _
       | |R2
       |_|30..180
        |
       ---

Nach den Gesetzen eines Spannungsteilers gilt:

R2   R1 + R2
-- = -------
Vm     Vcc

Umstellen nach R2:

     R1 * Vm
R2 = --------
     Vcc - Vm

Das ist ganz offensichtlich KEINE lineare Gleichung, denn sie läßt 
sich auf keine denkbare Weise in eine von deren Normalformen überführen.

Auch wenn dein ADC-Wert also linear von Vm abhängt UND der variable 
Widerstand R2 linear vom Volumen des Füllstands abhängt, so ist also 
doch der Gesamtzusammenhang mit absoluter Sicherheit nichtlinear.

> Wie kann ich die Werte "korrigieren" ?

Ganz einfach:

1)
Eine Gleichung aufstellen, die korrekt den systematischen 
Gesamtzusammenhang beschreibt. Dazu ist im Minimum neben den dir von 
anderen im Verlaufe des Threads mühsam aus der Nase gezogenen Angaben 
noch Detailwissen über die Sensorkonstruktion nötig. Also: Länge der 
Schwimmerstange und Höhe der Schwimmerauslenkung.

2)
Anwendung eines geeigneten Optimierungsverfahrens auf diese Gleichung 
unter Verwendung der bekannten Lösungen (also deiner 5 
Beispielmeßwerte).

Wenn du dazu zu faul oder zu doof bist, dann bleibt dir nur das im 
Thread bereits beschriebene "Auslitern" zur Gewinnung einer 
Wertetabelle, die den Zusammenhang für deine Zwecke hinreichend genau 
beschreibt und ggf. die Interpolation zwischen den Stützpunkten aus 
dieser Wertetabelle.

Diese Lösung ist zwar im Allgemeinen die Lösung der Dummen, die in der 
Schule in Mathe nicht aufgepaßt haben, sie hat aber auch einen ganz 
wichtigen Vorteil: Sie funktioniert auch dann noch recht gut (und mit 
zunehmender Zahl Stützstellen immer besser), wenn der Tankkörper kein 
Prisma und auch sonst kein regulärer, mit einfachen Formeln 
beschreibbarer Körper ist.

Deswegen ist es garnicht so ungewöhnlich, daß auch Leute sie verwenden, 
die ihre Hausaufgaben immer gemacht haben. Das werden die mit wachsender 
Wahrscheinlichkeit machen, je irregulärer die Form des Tanks ist.

von Praktiker (Gast)


Lesenswert?

Mike J. schrieb:
> An den ADC-Pin vom Spannungsteiler wird noch ein 100nF Kondensator gegen
> Masse gelötet und eine Messung pro Minute sollte für diese Zwecke
> ausreichen.

Bei dem niederohmigen Messteiler aber bitte mit Vorwiderstand. Sonst ist 
die Zeitkonstante erbärmlich klein.

Georg G. schrieb:
> Mike schrieb:
>> den Tankinhalt ein paarhundert Mal pro Sekunde zu berechnen.
>
> Wobei es sich empfiehlt, immer über 1000 Messungen oder mehr zu mitteln.

Die Umrechnung braucht dabei aber nur einmal statt zu finden ;-)

von Amateur (Gast)


Lesenswert?

> Wobei es sich empfiehlt, immer über 1000 Messungen oder mehr zu mitteln.

Unsinn!

Außer bei einem Crash tut sich bei einem Tank, in kurzer Zeit nichts.
Ich unterstelle dabei allerdings, dass der 100KW Motor nicht an einem 
Schnapsglas hängt.

Bei guten Mikrokontrollern finden 1000 Messungen im Millisekundenbereich 
statt, also noch weniger als einmal Schwapp vor und zurück.

Natürlich ist es nicht verboten einen Messzyklus vom 0,001 Schwapp zu 
initialisieren und das Ergebnis jede alle 1/100 Sekunde auszugeben.

von Georg G. (df2au)


Lesenswert?

Praktiker schrieb:
> Die Umrechnung braucht dabei aber nur einmal statt zu finden

Denkt denn niemand an den armen Prozessor? Was macht der in der 
restlichen Zeit? Muss er sich langweilen?

SCNR :-)

von DirkB (Gast)


Lesenswert?

Georg G. schrieb:
> Muss er sich langweilen?

Ne, der kann Fließkommaberechnungen machen.

Man kann bei Excel auch polynomische Trendlinien anfordern. Z.B 2. 
Grades.
Das gibt dann eine Multiplikation und eine Addition mehr.

Das sollte die Nichtlinearität verbessern.

von Mathematiker (Gast)


Lesenswert?

DirkB schrieb:
> Man kann bei Excel auch polynomische Trendlinien anfordern. Z.B 2.
> Grades.
> Das gibt dann eine Multiplikation und eine Addition mehr.

Ein Polynom zweiten Grades ist zur Beschreibung der Abhängigkeit wohl 
kaum geeignet. Abschnittsweise Spline Interpolation mit kubischen 
Splines wäre eine geeignete Methode, um den funktionalen Zusammenhang zu 
approximieren.
http://de.wikipedia.org/wiki/Spline-Interpolation

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ich mache das in solchen trivialen Fällen immer mit 17 Stützpunkten und 
linearer Interpolation dazwischen. Hier würden sogar locker die 5 
Stützpunkte vom ersten Post reichen.
Dann muss man mit ein wenig Nachdenken überhaupt nicht teilen. Denn ein 
/16 oder ein /4 kann einfach optimiert werden...

: Bearbeitet durch Moderator
von Benno (Gast)


Lesenswert?

Lothar Miller schrieb:
> Ich mache das in solchen trivialen Fällen immer mit 17 Stützpunkten und
> linearer Interpolation dazwischen. Hier würden sogar locker die 5
> Stützpunkte vom ersten Post reichen.

Sei vorsichtig mit dem, was du sagst, Lothar :-)

c-hater schrieb:
> Wenn du dazu zu faul oder zu doof bist, dann bleibt dir nur das im
> Thread bereits beschriebene "Auslitern" zur Gewinnung einer
> Wertetabelle, die den Zusammenhang für deine Zwecke hinreichend genau
> beschreibt und ggf. die Interpolation zwischen den Stützpunkten aus
> dieser Wertetabelle.

von Paul B. (paul_baumann)


Lesenswert?

Man kann auch mit 8 Personen eine Kuh melken: 4 fassen je eine Zitze
des Euters und die anderen 4 heben und senken die Kuh.

Man könnte ein Aufgabe verhältnismäßig schnell und einfach lösen
-muß man aber nicht....
;-)
MfG Paul

von Carsten R. (kaffeetante)


Lesenswert?

Paul Baumann schrieb:
> Man kann auch mit 8 Personen eine Kuh melken: 4 fassen je eine Zitze
> des Euters und die anderen 4 heben und senken die Kuh.

LOL

Ich sehe es auch so. Man kann es einfach oder schwer machen. Wie einfach 
es sein darf, ergibt sich indirekt aus der Genauigkeitsanforderung. Die 
ist aber nicht beschrieben. Oft reicht eine lineare Interpolation 
zwischen den 5 Werten (voll, 3/4, 1/2, 1/4, leer). Ich würe eventuell 
noch "ganz leer" hinzunehmen, wenn "leer" eigentlich den Beginn der 
Reserve kennzeichnet.

von Paul B. (paul_baumann)


Lesenswert?

Am Wichtigsten ist doch das letzte Zehntel (oder von mir aus 
Sechzehntel)
;-) damit es besser rechnen läßt.
des Tankinhaltes, weil das entscheidend ist, ob ich 10 Meter vor der
nächsten Tankstelle auf der Piste stehenbleibe oder nicht.

Es ist immer das Gleiche: Man kann es treiben, aber auch übertreiben.
MfG Paul

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

Carsten R. schrieb:

> Wie einfach
> es sein darf, ergibt sich indirekt aus der Genauigkeitsanforderung.

So ist es. Und offensichtlich hat die erzielte Genauigkeit dem TO wohl 
nicht gereicht, denn auf eben die Verbesserung der Genauigkeit zielte 
sein Frage im OP ja wohl ganz offensichtlich ab.

Wer lesen kann, ist klar im Vorteil...

von Mathematiker (Gast)


Lesenswert?

c-hater schrieb:
> Und offensichtlich hat die erzielte Genauigkeit dem TO wohl
> nicht gereicht, ...

... und zwar genau, weil er es gegenüber der vorgeschlagenen jeweils 
linearen Interpolation zwischen den 5 Stützpunkten mit einer linearen 
Approximation nur zwischen den beiden Endpunkten der Füllstandskennlinie 
versucht hat. Wenn du dir den Verlauf der Kurve einmal ansiehst, würdest 
du auch verstehen, warum diese Art der Interpolation über eine konkav 
Funktion keine vernünftige Genauigkeit liefern kann, sondern dazwischen 
Fehler von mehreren Litern produziert. Es kommt für die Anwendung sicher 
nicht auf Milliliter an.

von peter (Gast)


Lesenswert?

alter, ist das hier fürn Arsch^^

von Carsten R. (kaffeetante)


Lesenswert?

c-hater schrieb:
> Wer lesen kann, ist klar im Vorteil...

Ich hab es schon gelesen.

Er hat ein Problem damit, daß die "Kontrollstellen" nicht auf einer 
Linie zwischen Minimum und Maximum liegen. Verwendet man jedoch diese 
Kontrollstellen als Stützpunkte zwischen denen man interpoliert, so hat 
man schon erheblich genauere Ergebnisse.

Aber er hat nirgends geschrieben wie genau es denn nun werden soll!

Wenn man alle 25% eine Stützstelle hat, so wird selbst eine liniare 
Interpolation zwischen den Stützstellen wohl kaum einen Fehler von 10% 
aufweisen. Solange die tatsächliche Kennlinie nicht völlig verrückt 
verläuft, kann man mit wenigen Stützstellen akzeptabel genaue Ergebnisse 
erzielen, ohne daß man die Interna des Tanks und des Tankgebers kennen 
müßte. Die Genauigkeit ließe sich simpelst durch weitere Stützstellen 
den Anforderungen anpassen.

Nebenbei:

Es ist schon erstaunlich mit wie wenigen Stützstellen man einen Sinus 
mit linearer Interpolation annähern kann, wenn man die Stützstellen 
richtig platziert.

: Bearbeitet durch User
von Frank S. (blaueslicht)


Lesenswert?

Mathematiker schrieb:
> c-hater schrieb:
>> Und offensichtlich hat die erzielte Genauigkeit dem TO wohl
>> nicht gereicht, ...
>
> ... und zwar genau, weil er es gegenüber der vorgeschlagenen jeweils
> linearen Interpolation zwischen den 5 Stützpunkten mit einer linearen
> Approximation nur zwischen den beiden Endpunkten der Füllstandskennlinie
> versucht hat. Wenn du dir den Verlauf der Kurve einmal ansiehst, würdest
> du auch verstehen, warum diese Art der Interpolation über eine konkav
> Funktion keine vernünftige Genauigkeit liefern kann, sondern dazwischen
> Fehler von mehreren Litern produziert. Es kommt für die Anwendung sicher
> nicht auf Milliliter an.

Genau so sieht es aus.
Moin zusammen, es würde mir schon reichen wenn halbe Liter einigermaßen 
korrekt abgebildet werden. Momentan sind es tatsächlich mehrere liter 
Abweichung. Sorry, aber diese wohl entscheidende Info hatte ich wohl 
vergessen :( Ich weiss, dass der Tankgeber keine Präzisionsmessgerät ist 
und dass der Rest der Schaltung, der Code sowie 1000 andere Faktoren 
auch immens mit rein funken. Letztendlich habe ich nur nach einem Weg 
(Denkanstoß) gesucht, die Werte der Realität etwas anzunähern.
Ich werde vermutlich die Lösung mit den Stützpunkten und linearer 
Interpolation dazwischen anwenden. Sollte für diesen Zweck sicher 
ausreichen und mich hoffentlich zum richtigen Zeitpunkt auf dem Wasser 
bei Spritmangel warnen können.
Danke für die vielen Tips und Anregungen. Bin als Anfänger, der so etwas 
aus Spass in seiner Freizeit macht, dankbar für jede Hilfe.
by the way: der Wert 0.044... wurde einfach 1:1 aus calc.exe kopiert und 
hatte keine tiefere Genauigkeitsbewandnis...

: Bearbeitet durch User
von Oldie (Gast)


Lesenswert?

Menno, der Lösungsweg über einen 3...5-Punkt-Abgleich,
mit Interpolation war doch nun wirklich vorhersehbar.

Ist schon niedlich, wie hier manche Schmalspurdenker
gleich Verschwörungstheorien gegenüber Poti-Linearitäten
aufgebaut haben, weil die Schwimmer-Betätigung eines
Potis in einem realem nicht-ideal-rechteckigem Tank
nun mal nicht-linear sein muss.

Sind das schon Folgen vom 8/9-Abitur?
Oder ist das die allgemeine praxisferne Verblödung?

von Harald W. (wilhelms)


Lesenswert?

Oldie schrieb:

> 1) Tankgeber sind nicht unbedingt linear.
>    Bei alten Autos war die Anzeige ähnlich:
>    Entweder ging es zu schnell von voll auf halb,
>    oder zu langsam - und dafür schnell von halb auf
>    leer. Die waren nicht korrigiert.

Gerade bei älteren Fahrzeugen wurde das zumindest teilweise durch
die Skalenteilung des verwendeten Meßinstruments korrigiert.
Gruss
Harald

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.