Forum: Mikrocontroller und Digitale Elektronik Analogmesswerterfassung an NTC (Genauigkeit und Filter)


von Mister_Ntc (Gast)


Lesenswert?

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 =)

von Mister_Ntc (Gast)


Lesenswert?

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?

von Karl H. (kbuchegg)


Lesenswert?

> 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

von Mister_Ntc (Gast)


Lesenswert?

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 ....

von Mister_Ntc (Gast)


Lesenswert?

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?

von Mister_Ntc (Gast)


Lesenswert?

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...

von Michael M. (technikus)


Lesenswert?

> 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.

von Mister_Ntc (Gast)


Lesenswert?

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?

von Michael M. (technikus)


Angehängte Dateien:

Lesenswert?

Hier nochmal der Anhang, keine Ahnung warum der beim ersten Mal nicht 
kam.

von Mister_Ntc (Gast)


Lesenswert?

Danke für das Bild!

Was für ne Auflösung hat die X-Achse??

sek : millsekunden

oder

minuten : sekunden ?

thx

von Michael M. (technikus)


Lesenswert?

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.

von Mister_Ntc (Gast)


Lesenswert?

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

von Mister_Ntc (Gast)


Lesenswert?

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 :)

von Karl H. (kbuchegg)


Lesenswert?

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.

von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Mister_Ntc (Gast)


Angehängte Dateien:

Lesenswert?

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

von Mister_Ntc (Gast)


Lesenswert?

Ah zur Erklärung: In der Mitte habe ich einen ungültigen ADC Wert 
simuliert (Wert 0xFFFF) Deshalb dieser Sprung

von Thilo M. (Gast)


Lesenswert?

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.

von Ulrich (Gast)


Lesenswert?

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.

von Mister_Ntc (Gast)


Lesenswert?

>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!

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.