Forum: Mikrocontroller und Digitale Elektronik Taupunktberechnung ohne Logaritmus Naturalis


von Dewi (Gast)


Lesenswert?

Hallo Leute,

Suche eine Möglichkeit eine halbwegs genaue (+-0,1°C) Berechnung des 
Taupunktes zu unternehmen.
ABER OHNE LOGARITMUS NATURALIS!!!!

Es handelt sich um eine Kleinsteuerung, welche nur mit Integerwerte 
rechnen kann. (-32768 bis +32767)

Daher kann ich keine Exponentialfunktion/Logaritmus benutzen :-(

Bereits gegeben sind:
Temperatursensor (-40°C bis +60°C)
Feuchtesensor ( 0% bis 100%)
Absolutfeuchtesensor ( 0 g/m³ bis 50g/m³)

Lässt sich diese Aufgabe irgendwie lösen?

von kk (Gast)


Lesenswert?

Mit einer Look-up-table sollte das gehen. Alle 5°C eine Stüzstelle und 
dazwischen linear oder quadratisch interpolieren.

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


Lesenswert?

Dewi schrieb:
> Lässt sich diese Aufgabe irgendwie lösen?
Wie wärs mit einer Tabelle, wo Stützpunkte der Funktion abgelegt sind? 
Und dann einfach zwischen ein zwei Punkten interpolieren...

von amateur (Gast)


Lesenswert?

Es würde mich allerdings wundern, wenn das Problem nicht schon in 
vereinfachter Ganzzahlarithmetik gelöst wäre.

Ansonsten:
In Zeiten, als es noch keine Taschenrechner gab, hat man für so etwas 
einen Rechenschieber oder eine Tabelle herangezogen.
Leg Dir doch so eine Tabelle an, nicht in normalen, sondern in 
angepassten Abständen - sonst wird's zu ungenau - und interpoliere den 
Rest. Ist eigentlich nur eine Frage des vorhandenen Platzes und der 
gewünschten Genauigkeit.

von MaWin (Gast)


Lesenswert?

Vielleicht hilft dir dieses
1
double pow10(double x)
2
{
3
    return exp(x*2.30258509299404568402);
4
}
5
double t,h,dew;
6
int temp,humi;
7
  
8
temp=sbus_measure(MEASURE_TEMP);
9
t = temp*0.01-40.1; // calc. temperature from ticks to [°C] for 5V supply
10
humi=sbus_measure(MEASURE_HUMI);
11
h = 0.0367*humi-0.0000015955*humi*humi-2.0468; // -0.0000028*(float)humi*(float)humi + 0.0405*humi - 4.0; // calc. humidity from ticks to [%RH]
12
h = (t-25) * (0.01+0.00008*humi) + h;     // calc. temperature compensated humidity [%RH]
13
dew = 216.687 * (h/100.0)*(6.1078*pow10(7.5*t/(237.3+t))) / (t+273.15);
Ich weiss, ein exp ist nicht signifikant anders als ein log10.

von Carsten R. (kaffeetante)


Lesenswert?

Welche Formeln verwendest Du? Ich kenne mich nicht so gut mit der 
Luftfeuchtigkeit aus. Aber wenn die Formen die Du verwendest diesen hier 
ähneln, dann sollte das möglich sein.

http://www.wetterochs.de/wetter/feuchte.html

Die Frage ist nur wie genau es werden soll und wieviel Speicher zur 
Verfügung steht. Dann kannst Du die Funktionen mal am PC plotten lassen 
und dann Stützstellen so wählen, daß bei einer (linearen) Interpolation 
der Fehler unter deinen Grenzwerten bleibt. Diese Stützstellen kommen 
dann in ein Array auf dem µC. Damit kann man dann die Funktion mit 
relativ wenig Rechenleistung bewältigen. Ein großer Wertebereich und 
eine hohe Anforderung an die Genauigkeit können aber den Speicherbedarf 
stark ansteigen lassen.

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

anstatt Tabellen kann man auch transzendente Funktionen ersetzen durch 
ein Polynom n-ten Grades, das die gewünschte Funktion im Messinterval 
genau genug approximiert. Ich verwende z.B. für die Temperatur eines 
Pt100 die Formel
1
3.27946 * R * R + 106.54505 * R - 9.04725
anstatt der Exponentialfunktion, das sind nur 3 Multiplikationen und das 
Ergebnis ist +- 0,1 Grad genau von -20 bis +100 Grad Celsius.

Welchen Polynomgrad man für eine bestimmte Genauigkeit braucht, muss man 
berechnen, ich lasse mir die Koeffizienten von MathCad kalkulieren.

Und bevor jetzt das Riesengeschrei losgeht - natürlich kann man auch 
Tabellen verwenden. Aber so ist das Problem in einer Programmzeile 
gelöst. Jeder nach seinen Vorlieben und Fähigkeiten.

Gruss Reinhard
PS wieso muss man Multiplikationen mit "*" als Code deklarieren, damit 
das Mal-Zeichen nicht verschluckt wird??

von Carsten R. (kaffeetante)


Lesenswert?

@ Reinhard

Das geht natürlich auch, ist sogar viel eleganter, aber es wurden sehr 
enge Grenzen bei der Fragestellung gesetzt. Da könnte es knapp werden 
mit dem Wetrtebereich. Prinzipiell könnte man den natürlich aufblähen. 
Aber ob das so leicht vom Themenersteller in seiner Umgebung mit seinen 
Mitteln zu bewerkstelligen ist?

Ich finde deinen Ansatz natürlich auch viel schicker.

Dewi schrieb:
> Es handelt sich um eine Kleinsteuerung, welche nur mit Integerwerte
> rechnen kann. (-32768 bis +32767)

von Reinhard Kern (Gast)


Lesenswert?

Carsten R. schrieb:
> Dewi schrieb:
>> Es handelt sich um eine Kleinsteuerung, welche nur mit Integerwerte
>> rechnen kann. (-32768 bis +32767)

Da hast du recht, das ist eine herbe Einschränkung - da muss man ja 
ständig hin und her normieren um überhaupt im erlaubten Zahlenbereich zu 
bleiben.

Irgendwie geht immer alles (siehe Turing), aber so recht sinnvoll kann 
man die Aufgabe nur mit Gleitkommaarithmetik rechnerisch (ohne Tabellen) 
lösen.

Gruss Reinhard

von Yalu X. (yalu) (Moderator)


Lesenswert?

Welche Funktion hättest du denn gerne mit Integerarithmetik berechnet:

Die von Carsten gepostete

  http://www.wetterochs.de/wetter/feuchte.html

oder die aus Wikipedia (Gl. 2.3)

  http://de.wikipedia.org/wiki/Taupunkt#Der_Taupunkt_in_Abh.C3.A4ngigkeit_von_relativer_Luftfeuchtigkeit_und_Lufttemperatur

?

Es handelt sich beidesmal um die gleiche Funktion, aber mit leicht 
unterschiedlichen Parametern. Eine von beiden wird wohl in dem von dir 
gewünschten Temperatur- und Feuchtebereich bessere Ergebnisse liefern 
als die andere. Die Frage ist nur welche.

Dewi schrieb:
> Suche eine Möglichkeit eine halbwegs genaue (+-0,1°C) Berechnung des
> Taupunktes zu unternehmen.

Ich weiß nicht, ob die ±0,1 K realistisch sind. Alleine die Abweichung 
zwischen den beiden o. g. Funktionen ist schon größer. Das sind eben 
auch nur Näherungsfunktionen.

> ABER OHNE LOGARITMUS NATURALIS!!!!

Die Taupunkttemperatur ist in erster Näherung eine logarithmische 
Funktion der relativen (und auch der absoluten) Luftfeuchtigkeit. Möchte 
man den kompletten Wertebereich der Luftfeuchtigkeit ab 0% abdecken, 
gibt es keine einfachere Näherungsfunktion. Man kann allenfalls 
versuchen, den Logarithmus in Integerarithmetik zu berechnen.

Liegt die relative Luftfeuchtigkeit unter 1%, wird die 
Taupunktbestimmung aber sowieso ungenau, da in diesem Bereich bereits 
ein kleiner Fehler in der Feuchtigkeitsmessung zu einem großen Fehler im 
Ergebnis führt. Dagegen hilft auch die exakteste Formel oder die 
feinstaufgelöste Wertetabelle nicht.

Aber treten solch niedrige relativen Luftfeuchtigkeiten in der Realität 
überhaupt auf? Wird der Wertebereich der relativen Luftfeuchtigkeit 
bspw. auf 10%–100% oder gar 20%–100% eingeschränkt, sieht die Sache 
schon sehr viel günstiger aus. Da sich die Messwerte dann nur noch über 
eine Dekade erstrecken, kann man den Logarithmus auch – wie von Reinhard 
vorgschlagen – durch ein relativ einfaches Polynom annähern.

> Feuchtesensor ( 0% bis 100%)
> Absolutfeuchtesensor ( 0 g/m³ bis 50g/m³)

Da die relative und die absolute Luftfeuchtigkeit bei Kenntnis der 
Temperatur ineinander umgerechnet werden können, reicht prinzipiell 
einer von beiden Feuchtesensoren. Welcher ist genauer? Oder kann es 
sein, dass der eine bei trockener und der andere bei feuchter Luft 
bessere Ergebnisse liefert? Dann müsste die optimalen Bereiche für jeden 
Sensor kennen, so dass man immer den jeweils günstigsten auswählen kann.

von Carsten R. (kaffeetante)


Lesenswert?

Dewi schrieb:
> Suche eine Möglichkeit eine halbwegs genaue (+-0,1°C) Berechnung des
> Taupunktes zu unternehmen.

Ach ja, diese Genauigkeit ist alles andere als halbwegs genau. Man kann 
schon froh sein wenn man überhaupt auf 0,5 Grad genau die Temperatur 
messen kann. Man schafft vielleicht eine höhere Auflösung, diese ist 
dann abwer nicht genau. Macht es da Sinn die Berechnungen mit einer 
höheren Genauigkeit auszuführen als es die Sensoren erlauben? Das ist 
wirklich sehr kontextabhängig was man genau vor hat.

von Mr. Wu (Gast)


Lesenswert?

Dewi schrieb:
> LOGARITMUS

Da krümmen sich einem die Fußnägel.
http://de.wikipedia.org/wiki/Logarithmus

von Amateur (Gast)


Lesenswert?

Ich würde mich mal beim DWD erkundigen, was für relative Feuchten in 
unseren Breiten erreicht werden.
10% klingt nach künstlich getrockneter Luft oder nach einer 
Grußbotschaft aus dem Kühlhaus.

von Dewi (Gast)


Lesenswert?

Das Problem ist eben der Integer Wertebereich.
Es kann also nicht mit Gleitpunkt gerechnet werden.

von Carsten R. (kaffeetante)


Lesenswert?

Aber man kann den Integer als Festkommazahl mißbrauchen.

Ob man nun den Integer beispielsweise als 3141 oder als 3,141 (Pi) liest 
ist letztlich egal. Bei Festkomma ist ein Cast nur eine Frage der 
Interpretation. Man muß nur aufpassen daß man mit dem Wertebereich 
auskommt. Wenn man weiß daß die zahlen beispielsweise nie über 600 
hochlaufen, könnte man den Integer 30000 als 600 lesen ind jeder 
Ingegerschritt entspräche einem Festkommasprung von 600/30000 = 0,02. 
Dann muß man diese Umwandlung nur ganz am Ende bei der Ausgabe 
berücksichtigen.

Das ist zwar kein Gleitkomma, aber manchmal schon ausreichend genau, 
wenn die auftretenden Zahlen in ihrer Größenordnung vorher schon 
absehbar sind. Und das scheint mir in diesem Fall zutreffend zu sein.

von amateur (Gast)


Lesenswert?

Ich kenne ehrlich gesagt keinen µP, dem man nicht, zumindest durch 
Tricks, eine 64 Bit Integerrechnung aufsetzen könnte. Selbst die 
08/15-er 8-Bit-Grübler können das.

Die Alternative: Erst dividieren und dann multiplizieren verträgt sich 
nicht mit dem Begriff "Genau".

von Reinhard Kern (Gast)


Lesenswert?

amateur schrieb:
> Ich kenne ehrlich gesagt keinen µP, dem man nicht, zumindest durch
> Tricks, eine 64 Bit Integerrechnung aufsetzen könnte.

Das liegt auch sicher nicht am (bisher geheimen) Prozessor, sondern an 
der Softwareausstattung des Systems. Meine approximierten Polynome habe 
ich schon im vorigen Jahrhundert auf einem Z80 eingesetzt, und der hatte 
keinerlei Probleme damit.

Gruss Reinhard

von Winfried J. (Firma: Nisch-Aufzüge) (winne) Benutzerseite


Lesenswert?

und wie wäre es mit einem bereichsflag? dann wären nur die mantissen 
der logrithmen mit hinreichender Auflösung aus einer tabelle zu 
entnehmen der Rest ist linear zu berechnen. Der Rechenschieber lässt 
grüßen.

p.s.

die Fusnägel folgen in ihrer Krümmung ebenfals dem Logarithmus naturalis 
;)

von amateur (Gast)


Lesenswert?

@Reinhard
Aber auch Opa z80 kannte bereits ADC und SBC.

@Winfried
Das mit den Fußnägeln erscheint mir auch nicht unbedingt praktikabel. 
Die Skalierung anhand der Schuhgröße und die Anpassung über den 
Platzfußkoeffizienten dürfte das wohl als zu umfangreich 
disqualifizieren.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Dewi schrieb:
> Das Problem ist eben der Integer Wertebereich.

Das ist ein Problem, aber nur ein ganz kleines. Prinzipiell könnte man 
auch auf der Basis von 16-Bit-Integer-Arithmetik eine 
Floating-Point-Bibliothek mit beliebiger Genauigkeit aufbauen. Das wird 
auf jedem Mikroprozessor ohne FPU so gemacht.

Das löst aber dein eigentliches Problem nicht, da die Ungenauigkeit 
nicht von der Berechnung, sondern der Messung kommt.

Rechenbeispiel:

Temperatur: 60 °C
Relative Luftfeuchtigkeit: 3,10%

Nach der Formel in Wikipedia liegt dann der Taupunkt bei 0,18 °C.

Angenommen der Feuchtesensor wäre ultrapräzise und hätte einen Fehler 
von nur 0,05%. Er misst also 3,15% statt 3,10%. Eingesetzt in die Formel 
ergibt dies 0,40 °C. Der Fehler im Taupunkt liegt somit bei 0,22 K, also 
mehr als doppelt so hoch wie die von dir geforderten 0,1 K.

Ich glaube aber nicht, dass dein Sensor einen Messfehler von nur 0,05% 
hat. 2% sind da schon sehr viel realistischer. Bei 3,10% + 2% = 5,1% 
,liegt der berechnete Taupunkt schon bei 7,25 °C. Das ist ein Fehler von 
mehr als 7 K.

Weitet man den Wertebereich des Taupunkts auf negative Temperaturen aus 
(dann heißt der Taupunkt Frostpunkt), wird die Sache noch sehr viel 
schlimmer.

Merkst du etwas?

Es bringt überhaupt nichts, an der Genauigkeit Approximation oder der 
Arithmetik herumzudoktern, bevor du die erwartete Genauigkeit und der 
betrachtete Messbereich sinnvoll festgelegt hast.

von Carsten R. (kaffeetante)


Lesenswert?

Wenn sich einem da mal nicht die Fußnägel hochrollen. ;-)

Reinhard Kern schrieb:
> Das liegt auch sicher nicht am (bisher geheimen) Prozessor, sondern an
> der Softwareausstattung des Systems.

Genau das vermute ich auch. Ich erinnere mich beispielsweise noch an ein 
System Namens Basic Tiger. Das waren fertige Module die eine lange Zeit 
immer auf der Rückseite der c't beworben wurden. Die hatten auch eine 
eigene Entwicklungsumgebung. Das System gibt es bis heute noch. Zudem 
gibt es noch andere SPS und Mikro-SPS Systeme. Da kommt es darauf an was 
die IDE zuläßt, bzw. was man leicht damit implementieren kann. Vom darin 
werkelnden µC bekommt der Nutzer nichts mit.

Auch wenn man diesen unter umgehen der IDE direkt hardwarenah 
programmieren könnte und somit auch Gleitkomma implementieren könnte, so 
ist bei solchen Systemen davon abzuraten. Zum einen verliert man den 
Komfort der IDE und zum anderen ist das vorhandensein eines speziellen 
µC keine zugesicherte Produkteigenschaft. Der µC könnte von Charge zu 
Charge, je nach Verfügbarkeit, Markt und Preislage und auch durch 
Modernisierungen der Produktlinie (auch beim Zulieferer), jederzeit 
wechseln. So gibt es vom Rondostat unterschiedliche Versionen, mal mit 
Atmel und mal nicht. Der Nutzer wird dank der IDE nicht mit dem 
Hardwarewechsel hinter den Kulissen belästigt. Das wäre dann Bestandteil 
den Konzeptes. Man muß sich dann aber nach den Möglichkeiten der IDE 
richten und nicht nach den Möglichkeiten der Hardware.

von Dewie (Gast)


Lesenswert?

Es handelt sich um eine ELC-12 Stuerung von http://www.xlogic-plc.com/ .
Es handelt sich um keinen uC.
Die PLC wird Blockorientiert programmiert. Daher das Problem mit der 
Berechnung. Die Steuerung kann nur  + - * : Mehr nicht.

von Erich (Gast)


Lesenswert?

>Die Steuerung kann nur  + - * : Mehr nicht.

Vielleicht solltest du die Taupunktberechnung mitsamt dem zugehörigen 
Sensor einer Sub-Baugruppe zuordnen, die dann das Ergebnis über RS232 
oder wie auch immer der besagten Kleinsteuerung zuschickt.

Gruss

von Winfried J. (Firma: Nisch-Aufzüge) (winne) Benutzerseite


Lesenswert?

ah ein LOGO Clone
hehe IDE beschränkung also volltreffer
am ende ist da ach nur ein µC drinnen
....

also Tabelle
Ich wette es geht um Kondenswasservermeidung mittels Heizung/Lüftung 
deren Energieverbrauch optimiert werden soll.

von Ingo (Gast)


Lesenswert?

Dewie schrieb:
> Es handelt sich um eine ELC-12 Stuerung von http://www.xlogic-plc.com/ .
> Es handelt sich um keinen uC.

Selber Schuld, wenn man son SPS Abklatsch verwendet. Die Dinger machen 
dir n Treppenhauslicht und ne Marquisensteuerung, nicht aber unbedingt 
gute Regler oder gute Frequenzmesser oder gute Messgeräte... Dafür sind 
die nicht gebaut worden. Rechnen ist meist garnicht deren Stärke.

Ich nutze für sowas immer n µC mit der Peripherie die ich genau für mein 
Projekt brauche!

Guck mal auf der Homepage, wofür dein Gerät gebaut ist...
"being specifically designed to replace mini PLCs, multiple components, 
such as , various timers, relays, contactor and counters etc;"


Da du das Ding jetzt aber hast, musst du dir ne Lösung überlegen, 
Tabelle wird das Ding wohl auch nicht können...

Ingo

von Sascha (Gast)


Lesenswert?

Hallo,
also ich habe mir mal vor einigen Jahren meine Floating Point Library 
selber Programmiert, weil zu der Zeit noch kein Compiler eine wirklich 
fehlerfreie hatte. Meine Library hatte mit Log und Exp eine Codegröße 
von 1,8Kbyte auf dem 8051. Wo liegt also das Problem. (Die Compiler sind 
doch heute gut!!!)

Ich stand vor ca.15 Jahren als ich mit Sensoren angefangen habe auch vor 
dem Problem, dass ich bemerkte das es auch mit 64 Bit Mathe nicht mehr 
weiter ans Ziel geht. Also war Floating Point bis Heute der richtige Weg 
mit unter.

Dann zum Thema Tausensor, wie  Yalu X. das Rechenbeispiel schon 
aufgeführt hat, kann ich nur bestätigen du wirst mit dem Feuchtesensor 
nicht auf deine gewünschte Genauigkeit kommen.

Meine Firma hat solsche Tausensoren gekauft, verbaut und anschließend 
alle verschrottet. Ein ordentlicher Tausensor geht nur mit der 
Spiegelmessung.

Gruß Sascha

von Arc N. (arc)


Lesenswert?

Eine Taupunktformel ohne Logarithmus...
http://wwwcaps.ou.edu/arpsbrowser/arps5.2.4browser/html_code/adas/mthermo.f90.html

t in °C, rh in %

x = 1.0 - 0.01 * rh;
// dew point depression
dpd = (14.55 + 0.114 * t) * x + ((2.5 + 0.007 *t) * x)^3 + (15.9 + 0.117 
* t) * x)^14
dpt = t - dpd;

> Meine Firma hat solsche Tausensoren gekauft, verbaut und anschließend
> alle verschrottet. Ein ordentlicher Tausensor geht nur mit der
> Spiegelmessung.

http://www.rotronic.de/hc2-hk25-hc2-hk40.html
Im Handbuch ist ein Diagramm zur Genauigkeit der Taupunktberechnung und 
diese reicht in den meisten Fällen aus.
Wenn es wirklich auf +-0.1 K genau sein soll, geht es allerdings 
wirklich nur mit einem Taupunktspiegel...

von Amateur (Gast)


Lesenswert?

>(14.55 + 0.114 * t)

... sieht nicht gerade nach Vorzeigeintegerzahlen im Bereich von -32K 
bis +32K aus.

von Yalu X. (yalu) (Moderator)


Angehängte Dateien:

Lesenswert?

Arc Net schrieb:
> Eine Taupunktformel ohne Logarithmus...
> 
http://wwwcaps.ou.edu/arpsbrowser/arps5.2.4browser/html_code/adas/mthermo.f90.html

Ja, diese Approximation sieht wirklich nicht schlecht aus. Sie hat im 
Bereich der relativen Luftfeuchtigkeit von 7% bis 100% und der 
Temperatur von -40 °C bis +60 °C eine maximale Abweichung von unter 0,5 
K bezogen auf die Formel in Wikipedia. Bei sehr geringer 
Luftfeuchtigkeit steigt der Fehler erwartungsgemäß stark an. Aber wenn 
die Formel für amerikanische Wissenschaftler gut genug ist, sollte sie 
es für Dewi ebenfalls sein ;-)

Amateur schrieb:
>>(14.55 + 0.114 * t)
>
> ... sieht nicht gerade nach Vorzeigeintegerzahlen im Bereich von -32K
> bis +32K aus.

In dieser Form natürlich nicht. Das Stichwort lautet "Skalierung".

von Arc N. (arc)


Lesenswert?

Yalu X. schrieb:
> Aber wenn  die Formel für amerikanische Wissenschaftler gut genug ist,
> sollte sie es für Dewi ebenfalls sein ;-)

Das auf jeden Fall ;)
Soll es genauer werden, müsste auch der Luftdruck miteinbezogen werden 
und wenn es noch genauer werden soll auch, ob andere Gase und nicht nur 
Wasserdampf vorhanden ist...
Von Vaisala gibt es dazu eine gute Formelsammlung
http://forms.vaisala.com/LP=605

oder ...
http://cires.colorado.edu/~voemel/vp.html
http://www.hygrometers.com/wp-content/uploads/CR-1A-users-manual-2009-12.pdf
und
"ITS-90 FORMULATIONS FOR VAPOR PRESSURE, FROSTPOINT TEMPERATURE, 
DEWPOINT TEMPERATURE, AND ENHANCEMENT FACTORS IN THE RANGE –100 TO +100 
C"
http://www.thunderscientific.com/tech_info/reflibrary/its90formulas.pdf

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.