Forum: Mikrocontroller und Digitale Elektronik LookUp Tabelle erstellen


von Steffen W. (woern92)


Lesenswert?

Hallo,

ich würde gerne aus 13 Messwerten in einer Tabelle automatisch die 
Zwischenwerte berechnen lassen.

Also um es mal zu erklären, ich habe einen ADC Wert zwischen 0 und 200 
der zu einem realen Wert 0 bis ~8500 umgerechnet werden muss, da die 
werte aber leider nicht linear sind ist meine wahl auf eine lookup 
Tabelle gefallen.

Ich habe aber keine lust, bzw Zeit mir für jeden ADC Wert den richtigen 
Real wert Rauszumessen.

kPa  ADC
0  0
100  9
200  19
300  27
390  34
510  43
620  50
750  58
820  62
910  67
1500  92
2700  123
4700  150
8200  172


Deswegen meine frage: wie bekomme ich die zwischenwerte berechnet um sie 
in meiner Lookup tabelle einzutragen? Gibt es dafür vielleicht sogar 
eine fertige software oder sowas?

MFG

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Rechne das doch einfach aus.

Wert ADC 75

Das fällt zwischen 67 / 92
Also muss das Ergebnis zwischen 910 und 1500 liegen.

Die Formel dazu wirst Du schon raus finden...

PS: Ich würde dafür eher mindestens ein 12-Bit ADC nehmen und nicht nur 
ein 8-Bit.

: Bearbeitet durch User
von Heinz V. (heinz_v)


Lesenswert?

Millimeterpapier, Messwerte eintragen, mit Bleilineal den Graphen 
einzeichnen, Zwischenwerte ablesen.

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

@Steffen We (woern92)

>ich würde gerne aus 13 Messwerten in einer Tabelle automatisch die
>Zwischenwerte berechnen lassen.

Nennt man Interpolation.

>Also um es mal zu erklären, ich habe einen ADC Wert zwischen 0 und 200
>der zu einem realen Wert 0 bis ~8500 umgerechnet werden muss, da die
>werte aber leider nicht linear sind ist meine wahl auf eine lookup
>Tabelle gefallen.

Warum nicht mit einer Formel? Eine Tabelle nimmt man nur, wenn es sehr 
schnell gehen muss.

>Ich habe aber keine lust, bzw Zeit mir für jeden ADC Wert den richtigen
>Real wert Rauszumessen.

Dann halt lineare Interpolation.

kPa  ADC
0  0
100  9
200  19
300  27
390  34
510  43
620  50
750  58
820  62
910  67
1500  92
2700  123
4700  150
8200  172


>Deswegen meine frage: wie bekomme ich die zwischenwerte berechnet um sie
>in meiner Lookup tabelle einzutragen? Gibt es dafür vielleicht sogar
>eine fertige software oder sowas?

Das ist doch eine vorzööögliche ÖÖÖÖÖbung för den Schööööler!

Lineare Funktionen sind(waren) mal Stoff im Mathematikunterricht bis 
Klasse 10. Sag jetzt bitte nicht, daß du erst in der 7. bist ;-)

Kleine Hilfe.

Dein ADC-Wert ist z.B. 52. Also muss man zuerst in der Tabelle die 
richtigen Zeilen finden, hier 7 und 8 (bei 0 beginnend)
Also ist der Druck schon mal >620kPa. Wieviel? Das sagt uns die 
Prozentrechnung.

Die Druckdifferenz zwischen den Zeilen ist 750-620=130kPa, die 
ADC-Differenz ist 58-50=8. Der Rest ist einfache Prozentrechnung

delta ADC / delta ADC_MAX = delta Druck / delta Druck max.

-> delta Druck = delta ADC / delta ADC max * delta Druck max.
->             = 2 / 8 * 130

Zur Verminderung von Rundungsfehler macht man die Division am Schluß, 
also eher 2 * 130 / 8

Druck = Druck der 7. Zeile + delta Druck

von Falk B. (falk)


Lesenswert?

@ Markus Müller (mmvisual)

>PS: Ich würde dafür eher mindestens ein 12-Bit ADC nehmen und nicht nur
>ein 8-Bit.

Es würde für den Anfang erstmal reichen, den Spannungspegel des Sensors 
per OPV auf den vollen ADC-Meßbereich hochzubringen.

von Wolfgang (Gast)


Lesenswert?

Steffen W. schrieb:
> Deswegen meine frage: wie bekomme ich die zwischenwerte berechnet um sie
> in meiner Lookup tabelle einzutragen?

Einfachste Art der Interpolation wäre linear, also per angewandtem 
Dreisatz als 2-Punkte Form der Geradengleichung. Du kannst das auch 
direkt den µC erledigen lassen, falls der sich sowieso langweilt.

Steffen W. schrieb:
> Gibt es dafür vielleicht sogar eine fertige software oder sowas?

Kennst du Excel von Microsoft?
Das kann Trendlinien bestimmen und es gibt auch eine entsprechende 
Funktion zum Berechnen von Werten in Tabellenform. Falls du weisst, wie 
die Funktion aussieht, i.e. du das mathematische Modell dahinter kennst, 
ist das Solver add-on ein passendes Tool.

von Wolfgang (Gast)


Lesenswert?

Falk B. schrieb:
> Lineare Funktionen sind(waren) mal Stoff im Mathematikunterricht bis
> Klasse 10. Sag jetzt bitte nicht, daß du erst in der 7. bist ;-)

Wenn es schon werden soll und man kein vernünftiges mathematisches 
Modell hat, nimmt man kubische Splines. Damit vermeidet man gegenüber 
einer primitiven linearen Interpolation zumindest schon mal die 
hässlichen Knicke und die kräftigen systematischen Abweichungen zwischen 
den Stützstellen auf Grund der bei einer Geraden nicht vorhandenen 
Krümmung.

Alles eine Frage der Genauigkeitsanforderungen. Zur Prüfung des 
Interpolationsverfahrens kann man einzelne Stützstellen aus der 
Interpolationsrechnung rausnehmen und gucken, wie gut der ausgelassene 
Wert getroffen wird.

von Eberhard H. (sepic) Benutzerseite


Angehängte Dateien:

Lesenswert?

Steffen W. schrieb:
> Deswegen meine frage: wie bekomme ich die zwischenwerte berechnet um sie
> in meiner Lookup tabelle einzutragen? Gibt es dafür vielleicht sogar
> eine fertige software oder sowas?

Wenigstens für den maximalen ADC-Wert (200) solltest du noch einen 
zugehörigen kPa-Wert bestimmen.

Dann kannst du in wenigen Minuten per Exel entweder linear interpolieren 
und die Tabelle in dein Programm einbinden oder gleich per Software 
linear interpolieren.

Der Zusammenhang ist aber exponentiell, so dass eine exponentielle 
Interpolation (Tabelle oder Software) bestimmt bessere Werte liefert, 
insbesondere bei größeren ADC-Werten in der oberen Hälfte.

Im Anhang die lineare Interpolation bis kPa = 8200 als Diagramm.

von Yalu X. (yalu) (Moderator)


Angehängte Dateien:

Lesenswert?

Die Kennlinie sieht nach einer Hyperbel mit den Asymptoten x ≈ -2000 und
y ≈ 200 aus. Zudem verläuft sie durch den Koordinatenursprung. Mittels
Least-Square-Optimierung (z.B. mit SciPy) können ihre Parameter genauer
bestimmt werden. Damit kannst du für jeden Druck- den ADC-Wert berechnen
und umgekehrt.

von Steffen W. (woern92)


Lesenswert?

Danke für die vielen Antworten! Ich habe es jetzt einfach mit einer 
Tabelle und der Interpolation gelöst.
1
Sub Mapping(WertIn as word, WertOut as Single,byval Map as String * 10)
2
Dim Wert_Min as Single
3
Dim Wert_Max as Single
4
Dim ADC_Min as Word
5
Dim ADC_Max as Word
6
Dim ADC_DIFF as Word
7
Dim Wert_Diff as single
8
Dim Wert_Min_Diff as Word
9
Dim Delta as single
10
Dim DeltaRound as long
11
12
Dim ReadOut as String * 20
13
14
Dim Trenner as Byte
15
Dim Wert as Single
16
Dim ADC as Word
17
18
Dim ADCS as String * 5
19
20
21
Open Map For binary As #66
22
23
do
24
lineinput #66, ReadOut
25
Trenner = instr(ReadOut, "-")
26
27
If trenner > 0 then
28
   trenner = trenner  - 1
29
   temp = mid(readout,1,trenner)
30
   ADC_Max = val(temp)
31
   trenner = trenner  + 2
32
   temp = mid(readout,trenner)
33
   Wert_Max = val(temp)
34
35
36
   If ADC_MAX = WertIn then
37
      WertOut = Wert_Max
38
      Goto Ende_Map
39
   end if
40
41
   If ADC_MAX < Wertin Then
42
      ADC_Min = ADC_Max
43
      WERT_Min = Wert_Max
44
   end if
45
46
   If ADC_Max > WertIn then
47
      'Berechnen
48
      ADC_Diff = ADC_MAX - ADC_Min
49
      Wert_Diff = Wert_Max - Wert_Min
50
      Wert_Min_Diff = Wertin - Adc_Min
51
      Delta = Wert_Diff / ADC_Diff
52
      Delta = Delta * Wert_Min_Diff
53
      wertout = Delta + Wert_Min
54
55
56
       Goto Ende_Map
57
   end if
58
59
end if
60
61
Loop Until Eof(66)<> 0
62
Ende_Map:
63
64
close #66
65
66
end sub

von F. F. (foldi)


Lesenswert?

Falk B. schrieb:
> Lineare Funktionen sind(waren) mal Stoff im Mathematikunterricht bis
> Klasse 10.

Nicht in meiner 10. Klasse.

von Wolfgang (Gast)


Lesenswert?

F. F. schrieb:
> Nicht in meiner 10. Klasse.

Ok, kann sein, dass das normalerweise schon in der 9. Klasse dran ist.

von F. F. (foldi)


Lesenswert?

Nein, leider nicht. Ich habe damals die Fachoberschulreife an der 
Hauptschule gemacht. Das war das allererste Jahr, in dem das (zumindest 
in NRW) möglich war.
Ob der Stoff hätte vermittelt werden sollen oder nicht, unsere Lehrerin 
war zu blöd für Mathe und Kurt (später Ing. geworden) hat dann immer 
alles vor gerechnet.
Bei der habe ich nie was kapiert.
Es ist sehr blöd, da in der Elektronik viel gerechnet werden muss und 
ich ja nun leider auf die Fähigkeiten von meinem mathematisch 
hochbegabten Jungen nicht mehr zurück greifen kann.
Richard hatte mir das mal gezeigt und da hatte ich das auch verstanden, 
aber dann nicht wieder angewendet.

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.