Hi,
ich habe für meinen Kunden einen LM35 für den Messbereich 30°C - 90°C im
Einsatz. VREF liegt bei 2.5V mit einem LM385.
Nun hat er die Möglichkeit über ein Servicemenue einen Korrekturfaktor
einzubauen, da gemessenen und angezeigte Werte abweichen. (Evtl. auch
weil zu messende Materie und Sensor etwas auseinander liegen)
Laut Datenblatt ist die Messkurve ja relativ linear.
Doch dort gibt es auch das Bild (siehe Anhang).
Aktuell erhällt der Kunde bei 50° mit einem Korrekturwert von +0,4 ein
passables Ergebnis. Jedoch passt ihm diese "Formel" für 90° überhaupt
nicht.
Dort bräuchte ich eine Anpassung von 1,8.
Nun habe ich dazu frei Fragen:
1. mit Welcher FormelMethode kann ich dies möglichst über den ganzen
Messbereich erreichen? (Wichtig sind Werte bei 50 und 90, aber ich
möchte die Anzeige auch nicht springen lassen).
Auch wenn es auf einen LookUpTabelle hinausläuft bräuchte ich initial
eine Formel, um diese in Excel zu berechnen.
2.
Hier...
Beitrag "Re: suche einfachen und guten Temp Sensor"Beitrag "Re: Temperatur 0,1°C Auflösung"
...ist die rede von Erwärmung durch Verlustleistung beim "power-pollen"
Muss ich beim ADC mit dem LM35 ebenfalls aufpassen, und kann bereits
bessere Werte erziehlen, wenn ich den ADC anders anspreche?
(Alternate Sensoren möchte ich an dieser Stelle nicht verwenden. Nur das
optimum durch rumrechnen aus diesem holen)
Falls es von Relevanz ist noch etwas Code:
D a v i d K. schrieb:> (Wichtig sind Werte bei 50 und 90, aber ich möchte die Anzeige auch> nicht springen lassen).
Bei zwei Punkten kannst du doch immer eine Gerade durchlegen. Ein Punkt
bestimmt die Offsetkorrektur an dieser Stelle, der zweite Punkt den
Anstieg. Dazwischen skaliert alles monoton, das sollte also deinen
Bedingungen entsprechen.
Macht sich natürlich am einfachsten als Gleitkommarechnung, aber das ist
auf einem AVR an sich ja kein Problem (hast du möglicherweise ohnehin
schon drin).
D a v i d K. schrieb:> Nun hat er die Möglichkeit über ein Servicemenue einen Korrekturfaktor> einzubauen, da gemessenen und angezeigte Werte abweichen.
Da braucht man mindestens eine Zweipunktkorrektur (A+B*X).
Die passenden Werte bekommt man mit einer Wertetabelle im
Excel, indem man in der erstellten Grafik eine lineare
Regression durchführt. Das geht im Excel recht einfach
selbst mit Korrekturfaktoren zweiten und höheren Grades.
Jens M. schrieb:> Den Wert einfach mit 2 Korrekturwerten mappen ist bei 30-100 Grad nicht> genau genug?
Es ist ein Regelkreis der ohne Nachkommastellen im Display angezeigt
wird jedoch mit 1 Nachkommastelle genau in die Schaltzyklen eingeht.
Bsp. unter 49,5° wird geheizt über 50,3° wird gekühlt.
So dass im Display fast immer 50° steht.
Die angestrebten 50° sind ebenfalls Konfigurierbar. Heißt ein anderer
Kunde könnte dort 40° anstreben und ich möchte wie gesagt nicht, dass es
dann irgendwo plötzlich spring.
Grüße David
Harald W. schrieb:> Das geht im Excel recht einfach> selbst mit Korrekturfaktoren zweiten und höheren Grades.
Da braucht man kein Excel dafür, das kann der AVR auch in einer
Kalibrierroutine selbst ausrechnen. ;-) Man bringt ihn in einen
Kalibriermodus, heizt den Sensor auf 50 °C, drückt eine Taste, heizt auf
90 °C, drückt nochmal eine Taste, und er speichert sich die Werte im
EEPROM ab. Wenn dann mal 40 °C gemessen werden, haben die natürlich
wieder einen kleinen Restfehler, denn der Fehler wurde ja bei 50 und 90
°C zu 0 definiert.
Sorry, ihr habt so schnell geantwortet, dass ich nicht alles sofort
gelesen habe ;)
Harald W. schrieb:> D a v i d K. schrieb:> Da braucht man mindestens eine Zweipunktkorrektur (A+B*X).
Kannst du mir das etwas genauer erklären, stehe gerade auf dem Schlauch.
Was ist der ADC-Wert? X?
Dann hätte ich B=1 gewählt und A=0,01 (bei 50° zumindest)
Bei 90° wäre A=0,02
Jörg W. schrieb:> Harald W. schrieb:>> Das geht im Excel recht einfach>> selbst mit Korrekturfaktoren zweiten und höheren Grades.>> Da braucht man kein Excel dafür, das kann der AVR auch in einer> Kalibrierroutine selbst ausrechnen. ;-) Man bringt ihn in einen> Kalibriermodus
Die beiden Differenzen in einer Routine zu bestimmen bekomme ich hin.
Aber wie rechne ich damit dann weiter.
Also
50: -->50,4
90: -->91,8
(vermutlich muss ich nun erst mal nachschlagen, was "lineare Regression"
wirklich bedeutete.)
Hallo David K.
wenn man sich an diese Schreibweise erinnern mag:
f(x) = a0*x⁰ + a1*x¹ + a2*x² + .. wann wird es vielleicht klarer.
Setzt man dann noch alle Koeffizienten an = 0 mit n >= 2, dann erhält
man eine Geradengleichung:
https://de.wikipedia.org/wiki/Geradengleichung#Koordinatengleichungen
Die Koeffizienten kann man dann einfach, durch Umformen,
bei zwei gegebenen Messwerten y1, y2, f(x1) = y1 und f(x2) = y2
berechnen.
Jörg W. schrieb:> (Hoffentlich habe ich mich nicht vertippselt bei den LaTeX-Formeln.)
Perfekt, danke. (Wusste nicht dass es hier LaTeX-Formeln gibt :)
Ich hoffe der Kunde lässt sich auf die Kalibrierung ein.
Passiert die Reproduzierbarkeit dann darüber, dass der Kunde die .eep
von einem kalibrierten ausließt und auf alle anderen flasht?
Grüße David
Schade, Du hast A und B genau umgekehrt wie ich definiert. :-)
Vor einigen Jahren hatte ich eine ähnliche Aufgabe für die
Kalbrierung eines Interferrometers mit nm-Genauigkeit. Dort
musste ich eine Anpassung dritten Grades machen. Die Formel
konnte dann in das Meßgerät eingetippt werden. Die Meßwerte
habe ich ins Excel eingetippt und die Formel wurde dann vom
Excel errechnet. Dafür das ich vorher noch nie mit Excel
gearbeitet hatte, funktionierte das recht gut. :-)
Jörg W. schrieb:> Macht sich natürlich am einfachsten als Gleitkommarechnung, aber das ist> auf einem AVR an sich ja kein Problem (hast du möglicherweise ohnehin> schon drin).
Man weiss ganz genau, dass der Skalierungsfaktor nahe bei 1 ist und der
Offset bestimmt nicht genauer als 0,1°C erforderlich ist.
Was soll da die Gleitkommarechnung, die zur Erhöhung der Dynamik 8 Bit
für den Exponenten - in diesem Fall - verschwendet und für jede Zahl
ganze 32 Bit durch die Rechnung schleppt, obwohl für den Temperaturwert
10 Bit mehr als genug währen. So eine Aufgabe ist nun wirklich
prädestiniert für Festkommaarithmetik, auch wenn man da vielleicht mal
kurz über Auflösung und Zahlenbereich nachdenken muss.
>Was soll da die Gleitkommarechnung,
Weil es geht?
Wenn genug Flash und Rechenzeit über ist kann man das bedenkenlos
machen.
Handoptimierung macht man erst wenn es nicht anders geht. Kostet ja auch
Zeit und Kundengeld.
D a v i d K. schrieb:> Passiert die Reproduzierbarkeit dann darüber, dass der Kunde die .eep> von einem kalibrierten ausließt und auf alle anderen flasht?
Nein, du kalibrierst jeden Sensor einzeln, denn jeder wird ein wenig
anders ausfallen. Daher ist es ja auch am sinnvollsten, das irgendwie
mit einer Prozedur wie der oben beschriebenen gleich in die Firmware mit
einzubauen.
my2ct schrieb:> Man weiss ganz genau, dass der Skalierungsfaktor nahe bei 1 ist und der> Offset bestimmt nicht genauer als 0,1°C erforderlich ist.
Allein die obigen Rechenergebnisse zeigen, dass deine Annahme schon mal
falsch ist: der Offset ist deutlich größer.
Selbstverständlich kann man das natürlich auch alles in Assembler mit
Bitschieberei und -skaliererei machen – wenn man zu viel lange Weile
hat. Man kann aber auch einfach die paar CPU-Zyklen spendieren und hat
die Lösung dann schon fix&fertig beim Kunden, während andere noch die
Bits zählen … :)
Wenn ich die Aufgabe hätte, würde ich gleich von den rohen ADC-Werten
ausgehend die Kalibrierung vornehmen, d.h. die Umrechnung der ADC-Werte
in die Temperatur fällt dann gleich nebenbei mit ab.
Jörg W. schrieb:> Wenn ich die Aufgabe hätte, würde ich gleich von den rohen ADC-Werten> ausgehend die Kalibrierung vornehmen, d.h. die Umrechnung der ADC-Werte> in die Temperatur fällt dann gleich nebenbei mit ab.
Den letzten Satz verstehe ich nicht.
Na, anstatt
ADC zu Temp ungefähr
und dann
Temp ungefähr zu Temp genau
Kann man auch direkt
ADC zu Temp genau
Also
ADC 34 zu 40° und dann 40°*1,04
Kann man ja direkt ADC 34 * x rechnen und auf die genaue Temperatur
kommen.
Dann hat man Kalibrierung und Konversion in einem Schritt. Und mit
höherer Genauigkeit auch noch.
Jens M. schrieb:> Kann man auch direkt> ADC zu Temp genau
Yep, und für die erste Abschätzung, bis das Ding kalibriert ist,
errechnet man sich vorab ein paar Werte für a und b – von mir aus auch
mit Excel. :-)