K |
K |
||
(2 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
Gelegentlich ist es nötig, eine nichtlineare Kennlinie eines Sensors in eine Funktion zu übertragen, | Gelegentlich ist es nötig, eine nichtlineare Kennlinie eines Sensors in eine Funktion zu übertragen, | ||
− | um aus dem Ausgangssignal die gemessene Größe berechnnen zu können. Ein dazu geeignetes Werkzeug ist gnuplot. | + | um aus dem Ausgangssignal die gemessene Größe berechnnen zu können. Ein dazu geeignetes Werkzeug ist gnuplot. Gnuplot ist ein frei verfügbares Programm, um unter Windows, Linux, Unix, Dos, usw. Messwerte oder Funktionswerte darzustellen. |
Das Vorgehen wird am Beispiel des Standardsensors Sharp GP2D120 demonstriert. | Das Vorgehen wird am Beispiel des Standardsensors Sharp GP2D120 demonstriert. | ||
Zeile 36: | Zeile 36: | ||
0.37 310 | 0.37 310 | ||
</pre> | </pre> | ||
− | Diese Daten z. B. in ''Messung.txt'' speichern (als Dezimaltrennzeichen den Punkt benutzen) und im gleichen Verzeichnis gnuplot starten: | + | |
+ | Diese Daten z. B. in ''Messung.txt'' speichern (als Dezimaltrennzeichen den Punkt benutzen) und im gleichen Verzeichnis gnuplot starten (oder unter Windows mit ChDir in das Verzeichnis mit Messung.txt wechseln): | ||
gnuplot> | gnuplot> | ||
Mit | Mit | ||
gnuplot> plot "Messung.txt" | gnuplot> plot "Messung.txt" | ||
erscheint ein Fenster mit den Messwerten: | erscheint ein Fenster mit den Messwerten: | ||
+ | |||
[[bild:Messung.png]] | [[bild:Messung.png]] | ||
+ | |||
Als nächstes muss man eine Funktion finden, die die Kurve nachbilden könnte. | Als nächstes muss man eine Funktion finden, die die Kurve nachbilden könnte. | ||
Wenn die Berechnung später auf einem Mikrocontroller geschehen soll, ist es sinnvoll, dazu eine möglichst effizient | Wenn die Berechnung später auf einem Mikrocontroller geschehen soll, ist es sinnvoll, dazu eine möglichst effizient | ||
Zeile 74: | Zeile 77: | ||
Entfernung = 162.4 / (Spannung + 0.1624) | Entfernung = 162.4 / (Spannung + 0.1624) | ||
aus der Spannung in Volt berechnen. | aus der Spannung in Volt berechnen. | ||
+ | |||
+ | |||
+ | [[Kategorie:Software]] |
Aktuelle Version vom 3. Dezember 2009, 20:40 Uhr
Gelegentlich ist es nötig, eine nichtlineare Kennlinie eines Sensors in eine Funktion zu übertragen, um aus dem Ausgangssignal die gemessene Größe berechnnen zu können. Ein dazu geeignetes Werkzeug ist gnuplot. Gnuplot ist ein frei verfügbares Programm, um unter Windows, Linux, Unix, Dos, usw. Messwerte oder Funktionswerte darzustellen. Das Vorgehen wird am Beispiel des Standardsensors Sharp GP2D120 demonstriert.
Dazu ist es zuerst nötig, die Kennlinie zu vermessen und in eine Textdatei zu speichern. (Alternativ kann man aus Tabellenkakulationspogrammen eine .csv-Datei exportieren und als Feldtrennzeichen den Tabulator auswählen.) Hier das Ergebnis von 15 Minuten mit Maßband und Multimeter, linke Spalte Spannung in V, rechte Spalte Entfernung in mm.
3.00 40 2.89 50 2.44 60 2.04 70 1.81 80 1.56 90 1.45 100 1.32 110 1.16 120 1.09 130 0.99 140 0.94 150 0.85 160 0.81 170 0.78 180 0.74 190 0.68 200 0.6 210 0.6 220 0.54 230 0.5 240 0.48 250 0.45 260 0.43 270 0.41 280 0.39 290 0.39 300 0.37 310
Diese Daten z. B. in Messung.txt speichern (als Dezimaltrennzeichen den Punkt benutzen) und im gleichen Verzeichnis gnuplot starten (oder unter Windows mit ChDir in das Verzeichnis mit Messung.txt wechseln):
gnuplot>
Mit
gnuplot> plot "Messung.txt"
erscheint ein Fenster mit den Messwerten:
Als nächstes muss man eine Funktion finden, die die Kurve nachbilden könnte. Wenn die Berechnung später auf einem Mikrocontroller geschehen soll, ist es sinnvoll, dazu eine möglichst effizient zu berechnende Funktion auszuwählen. Grundsätzlich sieht die Kurve nach einer 1/x-Funktion aus, was gnuplot mitgeteilt werden muss:
gnuplot> f(x) = a / (x)
Jetzt kann mit
gnuplot> fit f(x) "Messung.txt" via a
der Parameter a bestimmt werden, mit dem f(x) den Messdaten am besten entspricht. Das Ergebnis lässt sich mit
gnuplot> plot "Messung.txt", f(x) with lines
betrachten.
In diesem Fall passt es noch nicht so ganz, also scheint die Funktion etwas komplizierter zu sein. Nächster Versuch:
gnuplot> f(x) = a / (x+b) gnuplot> fit f(x) "Messdaten.txt" via a,b gnuplot> plot "Messung.txt", f(x) with lines
Das Ergebnis sieht ausreichend genau aus. Wenn man im Konsolenfenster etwas hochscrollt, findet man die Parameter a und b wieder:
Final set of parameters Asymptotic Standard Error ======================= ========================== a = 162.436 +/- 3.165 (1.948%) b = 0.162385 +/- 0.01297 (7.985%)
Die Entfernung in Milimetern lässt sich also mit der Formel
Entfernung = 162.4 / (Spannung + 0.1624)
aus der Spannung in Volt berechnen.