Hallo,
ich erfasse eine Temperatur per NTC -> Spannungsteiler über eine
Analogspannung.
Ich erfasse den Wert alle 100 ms.
1.) Weiß jemand wie "träge" so ein NTC ist? Wie schnell geht er
Temperaturänderungen mit? Passen die 100 ms zur Abtastung?
2.) Wieviel Werte würdet ihr zur Filterung (mittelung) verwenden? 2 / 4
? Irgendwas in der Größenordnung 2^x sollte es sein.
Was ist genau genug?
Wenn ich mittle gibt es mehrere Möglichkeiten dies zu tun:
a)
1
summe>>=1;// division 2
2
summe+=1;// 1 addieren um zu runden
3
summe>>=1;// divsion 2 (bei 4 Werten)
oder b)
1
summe>>=2;
b)ist natürlich effektiver, a) dafür aber genauer, weil ab x,5 hoch
gerundet wird und unter x,5 abgerundet.
3.) In welchem Wertebereich gibt ein NTC Werte aus? Sagen wir NTC an 5V,
darunter ein Widerstand von 10 K an Masse. Der Mittelabgriff wird zum AD
Eingang geführt.
Der ADC hat 10 Bit - 0 bis 1023
In welchem Bereich würden die Werte schwanken? Wenn ich von einem
Temperatubereich von 0 Grad bis 130 Grad ausgehe?
Hintergrund: Ist das Fenster vielleicht so eng, dass ich noch die höhere
Genauigkeit benötige.
4.) Reicht vielleicht auch eine Mittelung mit 2 ? Das wäre natürlich
sehr effektiv, dafür ist der Filter aber nicht so "stabil" wie der mit 4
Werten.
Hat jemand da Erfahrungen?
5.) Danke!
Gruss =)
Ich nehme mal den 10K NTC als Beispiel her:
http://www.fuehlersysteme.de/resistance_characteristics_de.pdf
Bei 0 GRad = 32,65 K
Bei 130 GRad = 0,30 K = 300 Ohm
VCC = 5 V
---------------------------------
R_unten = 10 K
VCC
^
|
R_NTC
|
|--------------------------> AD_Eingang
R_unten
|
_
Masse
U_AD = VCC * R_Unten / (R_unten + R_NTC)
ALso von:
R_klein = 0,2344
R_gross = 0,9708
U_AD_klein = 5 V * R_klein = 1,172 V
U_AD_gross = 5 V * R_gross = 4,854 V
Bei 10 Bit - 1023
Volt/Bit -> 5 V / 1023 = 0,0048876 V / Bit
U_AD_klein_ADC = 872
U_AD_gross_ADC = 993
Mhm... hier ist die Spanne sehr klein.. also bräuchte ich hier mehr
Genauigkeit!
ODer habe ich da einen Denkfehler drin?
> U_AD_klein = 5 V * R_klein = 1,172 V> U_AD_gross = 5 V * R_gross = 4,854 V> U_AD_klein_ADC = 872> U_AD_gross_ADC = 993
Hier musst du dich irgendwo verrechnet haben
1.1V sind ein ADC Wert von irgendwo um die 200
Fehler:
U_AD_klein_ADC = 872
U_AD_gross_ADC = 993
--->
so is es richtig:
U_AD_klein_ADC = 239 (!!!)
U_AD_gross_ADC = 993
Das Fenster ist also gar nicht so klein ....
Also sehe ich das richtig, dass bei diesem relativ grossen Fenster, die
Genauigkeit nicht so wichtig ist?
Also dass man auch rundunungsfehler bei x,5 verkraften kann?
Kann jemand etwas über die "Trägheit" eines NTCs sagen? Ich meine rein
thermisch gesehen, ist ein NTC ja von Natur aus träge. Kein Material
erwärmt sich ja innerhalb einer Nanosekunde von 0 auf 100 Grad ...
Aber hat jemand da eine Hausnummer?
Etwa 1 Grad pro 100 ms möglich?
Klar so ein NTC hat eine Nicht-lineare Widerstandskennlinie.
R(Temperatur) = nicht linear
aber wie sieht es zeitlich aus?
sagen wir der ntc wird schlagartig in einen raum mit 100 GRad gelegt...
R wird schnell kleiner dann immer weniger, aber wie schnnell ist
schnell?
Was ich aus Erfahrung weiß ist dass ein NTC etwas braucht bis er sich
wieder abgekühlt hat...
> 1.) Weiß jemand wie "träge" so ein NTC ist? Wie schnell geht er> Temperaturänderungen mit? Passen die 100 ms zur Abtastung?
Hängt von der Wärmekapazität/Masse des NTCs und dem Medium ab, in dem
der NTC sitzt. Es gibt NTCs wie ein Stecknadelkopf, die sprechen in Luft
unter 1s an. Größere können in Luft im Bereich von Minuten benötigen.
> 3.) In welchem Wertebereich gibt ein NTC Werte aus? Sagen wir NTC an 5V,> darunter ein Widerstand von 10 K an Masse. Der Mittelabgriff wird zum AD> Eingang geführt.
Das sollte Dir das Datenblatt des NTC verraten. Danach mußt Du auch den
zweiten Widerstand des Spannungsteilers dimensionieren. NTCs werden nach
Nennwiderstand und Steigung bei Nenntemperatur (oft 25°C) verkauft. Die
Kennlinie ist nicht linear, siehe http://de.wikipedia.org/wiki/NTC oder
http://www.betatherm.com (hier die Seite durchsuchen, die haben einige
Infos zu NTCs).
Mach den Strom durch den NTC nicht zu groß, sonst heizt Du den NTC durch
die Abwärme auf.
Beachte auch, daß Du den Spannungsteiler mit dem Eingangswiderstand des
A/D-Wandlers belastest. Evtl. einen Impedanzwandler zwischenschalten.
> In welchem Bereich würden die Werte schwanken? Wenn ich von einem> Temperatubereich von 0 Grad bis 130 Grad ausgehe?
Widerstand des NTC bei gewünschter Minimal- & Maximaltemperatur aus
Datenblatt raussuchen, Spannungsteiler mit Vorwiderstand berechnen =>
Antwort
> 5.) Danke!
Bitte.
Nachtrag: Anbei ein Bild von vier Betatherm 30K6A1, die mit der Hand
erwärmt und in der Luft wieder abgekühlt wurden.
bei dem NTC handelt es sich um einen im SMD format, der die erwärmung
der platine überwachen soll, wenn durch Bauteile in der nähe sehr viel
strom fließt -> erwärmung der umgebung...
also, wenn es so im bereich von sekunden liegt, dann ist eine abtastung
im 100 ms bereich ja gut, oder?
Die Achsenbeschriftung in NTC.png ist Stunden:Minuten:Sekunden. Man
braucht also gut 3 Minuten, bis die Luft den NTC soweit wieder
runtergekühlt hat.
Auf der Platine sollten eher Verhältnisse wie beim Erwärmen per Hand
herrschen. Also Ansprechzeiten von einigen Sekunden. Entscheidend ist
dabei wohl die thermische Trägheit der Platine, nicht die des
SMD-Thermistors. Dran denken: Die Kupferleiterbahnen leiten nicht nur
den Strom, sondern auch die Wärme gut. Das Basismaterial selber leitet
Wärme deutlich schlechter.
Danke!
Also werd ich wohl alles mitbekommen, wenn ich alle 100 ms einen Temp
Werte habe?
Was für einen Glättungsfilter würdest du mir empfehlen?
2 Werte mitteln, oder doch 4 ?
gruss
Hat keiner mit sowas Erfahrung?
Es geht ja nur darum:
a)streuen die Werte so sehr, dass ich glätte muss
und
b) Wie groß wirkt sein ADC Fehler von x.5 aus? Ich würde sagen das ist
abhängig davon wo man sich auf der Skala befindet wegen der
Nicht-Linearität der Kennlinie. Aber dennoch würde ich jetzt sagen, dass
x.5 aber nicht ausschlaggebend sind bei einer Skala von ca. 200 - 900
(plausible ADC Werte)
Frohe Ostern allerseits :)
Mister_Ntc wrote:
> Hat keiner mit sowas Erfahrung?>> Es geht ja nur darum:>> a)streuen die Werte so sehr, dass ich glätte muss
Einfach mal ausprobieren. Schreib dein Programm, gib die Werte aus, lass
dir im Excel ein Diagramm malen. Dann weißt du mehr.
> b) Wie groß wirkt sein ADC Fehler von x.5 aus? Ich würde sagen das ist> abhängig davon wo man sich auf der Skala befindet wegen der> Nicht-Linearität der Kennlinie. Aber dennoch würde ich jetzt sagen, dass> x.5 aber nicht ausschlaggebend sind bei einer Skala von ca. 200 - 900> (plausible ADC Werte)
Rechne doch mal zurück, welchem Temperaturfehler diese ADC-Differenz
entspricht. Am besten machst du dir im Excel mal ein paar Tabellen, die
dir das alles über den interessanten Temperatur (und damit
Widerstandsbereich des NTC) zeigen.
Aber ich denke mal, dass du den Rundungsfehler ruhig ignorieren kannst.
Dein ADC wird nämlich nicht 4 mal hintereinander denselben Wert bringen,
so dass dieser 'Fehler' nicht ins Gewicht fällt. Wenn der ADC die Werte
229, 231, 227 und 234 bringt, kannst du zwar einen Mittelwert von 230
ausrechnen, aber ob der richtige Wert nun 229, 230, 231 oder 232 ist,
kannst du sowieso nicht sagen.
Alles in allem: Probiers einfach aus.
Und nochwas:
Wenn du durch 4 dividieren willst, dann schreib das auch so hin
Summe /= 4;
oder meinetwegen
Summe = Summe / 4;
und lass den Unsinn mit
summe >>= 2;
Sowas ist regelmässig ein Eigentor. Wenn es möglich ist eine Division
durch Schieberei zu ersetzen, dann wird das der Compiler für dich
machen. Das ist nichts worüber du dir Gedanken machen musst.
Ich hatte mal 'ne ähnliche Anwendung, in der die Leiterplattentemp per
NTC gemessen wurde. Im Anhang ein Diagramm in der Abkühlphase. Man
erkennt -wie schon erwähnt- dass die Zeitkonstante hauptsächlich von der
Leiterplatte bestimmt wird, der NTC (SMD 0603) folgt in diesem
Zeitrahmen praktisch verzögerungsfrei. Das hängt aber sehr stark von der
Bauform und der Kapselung ab (je kleiner die Bauform, umso kleiner auch
die Zeitkonstante).
Also mit 100ms Samplingrate kommst Du dicke hin!
Die Werte hier wurden übrigens mit einem USB-Datenlogger aufgenommen,
ohne Mittelung, Glättung, etc.
Ich hab jetzt mal die Filter auf die NTC ADC Werte simuliert. Das
Ergebnis ist im Anhang,
Hier kann man gut sehen, dass der 4 Werte Filter runder ist und den
sprunghaften Änderungen der NTC Werte nicht so schnell folgt.
Der 2 Werte Filter folgt den original NTC Werten sehr rasch und ist
nicht ganz so rund...
Doch was ist jetzt für meine Anwendung besser / schlechter?
Qualitativ sehe ich da jetzt keinen großen Unterschied.
:) ciao
Zum Thema Filter oder Mittelwertbildung kann ich Folgendes empfehlen:
1
ZK=8;
2
TG=TG*(1-1/ZK)+T/ZK;
Wobei T die aktuell gemessene Temperatur ist,
TG die gemittelte Temperatur
und ZK die Zeitkonstante des Filters in Sekunden*Abtastrate.
Also bei einer Abtastrate von 1s wäre die ZK von 8 => 8s Filterzeit.
Bei 100ms Abtastrate 8s/10 => 0.8s Filterzeit.
Ich sehe den sinn des filterns nicht so ganz. Die Erwärmung, wenn sie
den stört, sollte so groß sein, das kaum Porbleme durch Rauschen zu
erwarten sind. Wenn man schnell reagieren will, dann ist das mitteln
mehrer Werte über eine lange Zeit (>100 ms) eher contraproduktiv.
Wenn man schon filtern will, dann wäre eventuell ein Medianfilter
sinnvoll, um einzelen grobe Ausreißer zu eliminieren. Ein Möglichkeit
wäre z.B. 4 Werte relativ schnell, etwa innerhalt 10 ms, aufzunehmen.
Der größte und kleinste Wert wird verworfen und die beiden restlichen
gemittelt. Bei einer größeren Anzahl Punkte wird das Verfahren aber
rechenintensiv.
Wenn man starke Störungen z.B. durch 50 Hz hat, macht es auch Sinn über
einen Periode zu mitteln,um die 50Hz zu unterdrücken. Man muß auch nicht
durch die Zahl der Summanden teilen. Damit man den zusätzlichen Gewinn
an Auflösung durch oversampling behält, sollte man eher durch die Wurzel
der Anzahl teilen, und das Ergebnis als Zahl mit höherer Auflösung
interpretieren, so als hätte der A/D 1 oder 2 extra bits.
>Ich sehe den sinn des filterns nicht so ganz. Die Erwärmung, wenn sie>den stört, sollte so groß sein, das kaum Porbleme durch Rauschen zu>erwarten sind. Wenn man schnell reagieren will, dann ist das mitteln>mehrer Werte über eine lange Zeit (>100 ms) eher contraproduktiv.
Naja, reagiert werden kann ja innerhalb von 100 ms. Also sobald der ADC
Wert über einem definierten Grenzwert liegt. Das Filtern hat den Sinn,
dass der Grenzwert nicht schon durch Rauschen ausgelöst wird, wenn der
NTC sich in der nähe des Grenzwertes bewegt.
Wäre für diesen Fall eine Mittelung durch 2 Werte evtl. sogar besser,
weil schneller auf echt NTC Wert Änderungen reagiert werden kann?
>Wenn man schon filtern will, dann wäre eventuell ein Medianfilter>sinnvoll, um einzelen grobe Ausreißer zu eliminieren. Ein Möglichkeit>wäre z.B. 4 Werte relativ schnell, etwa innerhalt 10 ms, aufzunehmen.>Der größte und kleinste Wert wird verworfen und die beiden restlichen>gemittelt. Bei einer größeren Anzahl Punkte wird das Verfahren aber>rechenintensiv.
Wie du schon geschrieben hast ist das Verfahren zu rechenintensiv.
Vom Prinzip her wäre dieses Verfahren, aber am Besten geeignet, weil es
Ausreißer erst gar nicht glätten muss sondern direkt aussortiert.
>Wenn man starke Störungen z.B. durch 50 Hz hat, macht es auch Sinn über>einen Periode zu mitteln,um die 50Hz zu unterdrücken. Man muß auch nicht>durch die Zahl der Summanden teilen. Damit man den zusätzlichen Gewinn>an Auflösung durch oversampling behält, sollte man eher durch die Wurzel>der Anzahl teilen, und das Ergebnis als Zahl mit höherer Auflösung>interpretieren, so als hätte der A/D 1 oder 2 extra bits.
Nehmen wir an ich habe 9 Werte aufgenommen und teile dann die Summe
durch Wurzel(9) also 3... das wäre doch dann nicht mehr das korrekte
Ergebnis?
Danke für die Hinweise!