Forum: Analoge Elektronik und Schaltungstechnik NTC als spannungsteiler linearisieren?


von Max D. (max_d)


Lesenswert?

Ich bastel grade ein Thermometer und dazu würde ich gerne einen ntc 
nehmen weil die doch recht robust und trotzdem billig sind.
Jetzt ist das hinterlistige Teil natürlich nicht linear.
Gurgel liefert eine Seite die angeblich eine Schaltung und Werte liefert 
( http://www.electronicdeveloper.de/MesstechnikNTCLinearR.aspx ) 
allerdings wollen die jetzt plötzlich Geld.
An sich kann das ja aber nur eine ganz einfache Formel sein, leider 
findet sich nur kram um den Widerstand an sich zu linearisieren (und 
nicht die Ausgangsspannung eines teilers).

Vlt. Weiß hier ja jemand die Formel dazu?

Danke für eure hilfe :)

von Pandur S. (jetztnicht)


Lesenswert?

Naja. zu jedem NTC gehoert eine Formel, ueblicherweise eine 
exponentialfunktion. Die rechnet man dann eben mit dem Controller durch.

Der Teiler ist etwas Zeug rundrum, dann kann man nach der Temperatur als 
Funktion des ADC aufloesen.

von Max D. (max_d)


Lesenswert?

Die Idee an der linearisierung mit zwei Widerständen ist eben, dass man 
NICHT die Expo auf dem uC fahren muss....

von MaWin (Gast)


Lesenswert?

Wie üblich bei kostenpflichtigen Angeboten im Netz sind die das Geld 
nicht wert.
Ein per simplem Widerstand linearisierter NTC ist natürlich nicht 
linear, sondern nur weniger unlinear. Der Restfehler kann berechnet 
werden.


http://en.tdk.eu/blob/531110/download/3/pdf-applicationnotes.pdf

von Der Andere (Gast)


Lesenswert?

Max D. schrieb:
> Ich bastel grade ein Thermometer und dazu würde ich gerne einen ntc
> nehmen weil die doch recht robust und trotzdem billig sind.

Und was machst du mit dem NTC?
Du wertest ihn irgendwie über einen µC aus oder (Spannungsteiler, C 
laden über den NTC. usw.)?

Wo ist also dein Problem die Linearisierung über Software zu machen?

von Max D. (max_d)


Lesenswert?

Wenn ich mit zwei Widerständen eine (nahezu) lineare Spannung an meinen 
adc krieg, dann wäre es doch blöd da in Software rumzurechnen.

von Torben K. (tokuhila)


Lesenswert?


: Bearbeitet durch User
von Pandur S. (jetztnicht)


Lesenswert?

> Die Idee an der linearisierung mit zwei Widerständen ist eben, dass man
NICHT die Expo auf dem uC fahren muss....

Dazu sollte man sich ueberlegen :
- wie oft braucht man diesen Wert ? 0.1Hz, 1Hz, 5Hz
- Wie genau braucht man die Temperatur ?
- Darf kalibriert werden, sonst Produktestreueung einbeziehen

Nicht vergessen : ein NTC hat auch noch eine Langzeit Drift, gemaess 
Datenblatt

Man kann die Exponentialfunktion, resp, den NTC plus Spannungsteiler 
durch ein Polynom approximieren. Eine Taylorentwicklung. Den Fehler kann 
man sich fuer jeden Grad plotten lassen, und dann waehlen.
Man kann die Temperatur als Funktion des ADC Wetes als Tabelle mit N 
Stuetzstellen hinterlegen, und dazwischen interpolieren. Auch hier kann 
man den Fehler rechnen und optimieren.

von Max D. (max_d)


Lesenswert?

Torben K. schrieb:
> http://www.preis-ing.de/index.php/de/extras/alle-b...
> http://www.electronicdeveloper.de/MesstechnikNTCLinearR.aspx

Der erste link ist nützlich :)
Der zweite ist der aus meinem ersten Post, der will Geld :(

von Harald W. (wilhelms)


Lesenswert?

Max D. schrieb:

> Wenn ich mit zwei Widerständen eine (nahezu) lineare Spannung an meinen
> adc krieg, dann wäre es doch blöd da in Software rumzurechnen.

Nein, Linearisierung über Tabelle ist mit einem µC
die einfachste Lösung. Nur, wenn man ohne µC messen
will, macht die Linearisierung Sinn. Man nimmt dann
einfach den Widerstand, den der NTC genau in der
Mitte des angedachten Messbereichs hat, als Serien-
widerstand, und lebt mit dem Restfehler.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Max D. schrieb:
> Wenn ich mit zwei Widerständen eine (nahezu) lineare Spannung an
> meinen
> adc krieg, dann wäre es doch blöd da in Software rumzurechnen.

Das seh' ich genau anders. Durch diese "Linearisierung" mit 
Widerstaenden wird das "Nutzsignal" des NTC, also die 
Widerstandsaenderung kleiner. D.h. jegliche Stoerungen werden darauf 
bezogen groesser.
Also: In SW umrechnen. Dafuer ist ein µController ja da. Mit ein 
bisschen Hirnschmalz geht das sogar in Integerarithmetik und ohne 
Division.

Gruss
WK

von Max D. (max_d)


Lesenswert?

Ich denk ich nehm, dann den tabellengenerator aus dem link und optimier 
die table in den flash rein.
Das Ding prophezeit mir ~1 Grad Genauigkeit in meinem Bereich, dass ist 
also besser als so ein billiger ntc bringen kann, also vollauf genug. 
Und der mega hat nen hw multiplizierer, also sind die Multiplikationen 
fast geschenkt ^^

von Der Andere (Gast)


Lesenswert?

Max D. schrieb:
> Und der mega hat nen hw multiplizierer, also sind die Multiplikationen
> fast geschenkt ^^

Weil du ja 100000 mal pro Sekunde die Tempweratur messen musst.

von Max D. (max_d)


Lesenswert?

Es schadet nicht sich ein paar Gedanken zu dem Ressourcenverbrauch zu 
machen, auch wenn es vlt. nich 100 % entscheidend ist.
Mit deiner Einstellung nehm ich gleich nen arduino und Wunder mich dann 
auf dem halben weg wieso der jetzt schon voll ist.

von Charlie (Gast)


Lesenswert?

Der Thread ist zwar schon alt, aber die Frage immer noch neu.
Zumindest für mich.

Meine Lösung:

https://www.youtube.com/watch?v=beVNphAA0l0

http://www.afug-info.de/download

von Jella (Gast)


Lesenswert?

Natürlich geht Linearisieren auch mit µC, wenn der Temperaturbereich 
nicht allzu groß ist.
Für ein Thermometer sollte das überhaupt kein Problem sein.
Der Restfehler spielt dabei keine Rolle.
Die meisten Thermometer haben keine Nachkommastellen.

von Helmut S. (helmuts)


Angehängte Dateien:

Lesenswert?

Bei mir funktioniert die Seite ohne Geld. Siehe screenshot.

https://www.electronicdeveloper.de/MesstechnikNTCLinearR.aspx

Hier mal ein Beispiel in dem ich den systematischen Fehler simuliere. 
Das ist die Abweichung von einer Geraden umgerechnet in Grad Celsius. 
Das Simulationsprogramm LTspiceXVII kanst du hier herunterladen.
Programm
http://ltspice.analog.com/software/LTspiceXVII.exe
Anleitungen
https://www.analog.com/en/design-center/design-tools-and-calculators/ltspice-simulator.html

Der Parameter B steht im Datenblatt des NTC-Widerstandes. B und der 
Widerstand bei 25°C haben Toleranzen. Die kommen dann noch als Fehler 
dazu. Um die wegzubekommen muss das verbaute Exemplar bei mindestens 
zwei genau bekannten Temperaturen vermessen werden.

von Klaus R. (klara)


Lesenswert?

Helmut S. schrieb:
> Bei mir funktioniert die Seite ohne Geld.

Bei mir auch.

von zuhörer (Gast)


Lesenswert?

Klaus R. schrieb:
> Helmut S. schrieb:
>> Bei mir funktioniert die Seite ohne Geld.
>
> Bei mir auch.

Ursprungsthread entstand vor 3 Jahren. Möglicherweise war das 
Geschäftsmodell nicht erfolgreich. Daß das Angebot dennoch kostenlos 
bestehen blieb, ist allerdings ein netter Zug vom Seitenbetreiber.

von Elektrofan (Gast)


Lesenswert?

Die beste Linearisierung erhält man, wenn man
entweder
einen fast unendlich grossen Widerstand in Reihe
oder
eine fast unendlich kleinen Widerstand parallel schaltet.     ;-)

von Helmut S. (helmuts)


Lesenswert?

Elektrofan schrieb:
> Die beste Linearisierung erhält man, wenn man
> entweder
> einen fast unendlich grossen Widerstand in Reihe
> oder
> eine fast unendlich kleinen Widerstand parallel schaltet.     ;-)

Nein. Das wären die schlechtesten Lösungen.

von Toxic (Gast)


Angehängte Dateien:

Lesenswert?

Von Ulrich Maassen gibt ein Polynom Makerprogramm.
Schaltflaeche "Testeingabe" aktivieren und im Grafikfeld per Maus 
Messpunkte
setzen.Danach einfach die Schaltflaechen Lin,Log,Parabolic etc 
nacheinander "ausprobieren" um zu sehen welche der dabei entstehende 
Kurve den Messpunkteverlauf am besten wiedergibt.
Die Funktion der Kurve kann man dann unter "Result" ablesen.
Als Beispiel habe ich die x-Achse mit 100 (Grad)Einheiten  und die 
y-Achse mit 1000 (Ohm)Einheiten genommen und willkuerlich NTC-Werte 
gesetzt.Das Polynom 4.Order kommt dem Messpunkteverlauf recht nahe.
Meine Werte sind natuerlich uebertrieben daneben deswegen die relativ 
"komplexe" lange Formel...
Wie dem auch sei:
Probieren und sich freuen wenn es hilft das Problem zu beseitigen oder 
eine Schnute ziehen und sich sagen: wieder so ein Scheiss der nichts 
bringt?

von Wolfgang (Gast)


Lesenswert?

Toxic schrieb:
> Von Ulrich Maassen gibt ein Polynom Makerprogramm.
> Schaltflaeche "Testeingabe" aktivieren und im Grafikfeld per Maus
> Messpunkte

Jede halbwegs brauchbare Tabellenkalkulation kann das.

Ein Polynom ist allerding eher selten die passende Lösung, wenn es über 
die 3. Ordnung hinaus geht. Das äußert sich in unpassendem Verhalten 
zwischen den Stützstellen (bei geringer Stützstellenzahl) und unsinnigem 
Verhalten bei Extrapolation.

von Helmut S. (helmuts)


Lesenswert?

Wolfgang schrieb:
> Toxic schrieb:
>> Von Ulrich Maassen gibt ein Polynom Makerprogramm.
>> Schaltflaeche "Testeingabe" aktivieren und im Grafikfeld per Maus
>> Messpunkte
>
> Jede halbwegs brauchbare Tabellenkalkulation kann das.
>
> Ein Polynom ist allerding eher selten die passende Lösung, wenn es über
> die 3. Ordnung hinaus geht. Das äußert sich in unpassendem Verhalten
> zwischen den Stützstellen (bei geringer Stützstellenzahl) und unsinnigem
> Verhalten bei Extrapolation.

Zum Thema Polynom-Bestimmung gab es hier mal eine größere Diskussion.

Beitrag "PolynomMaker - Funktion für nichtlineare Bauelemente finden"

von Toxic (Gast)


Lesenswert?

Helmut S. schrieb:
> Zum Thema Polynom-Bestimmung gab es hier mal eine größere Diskussion.
>
> Beitrag "PolynomMaker - Funktion für nichtlineare Bauelemente finden"

Den Thread kannte ich gar nicht - es handelt sich aber um das gleiche 
Programm.
Das Programm hatte ich hochgeladen,weil unter ulrich-maassen.de kein 
Download-button mehr fand.Aber das hat sich nun - dank Helmut - 
erledigt.
Hier der Original-Link:
http://www.serialcominstruments.com/math.php

von oldeurope O. (Gast)


Lesenswert?

Für meinen NTC gibt es alle 5Kelvin einen Widerstandswert.
Die Punkte habe ich in ein Koordinatensystem gezeichnet
und so für jedes Grad den entsprechenden Spannungswewrt
ermittelt und auf den Bereich von 0 bis 1023 angepasst.
In dem Sketch gibt das dann ganz viele if-Bedingungen,
hier die für +10Grad:

if (analogRead(aussen)>= 475 && analogRead(aussen) <= 482)
   {
    lcd.setCursor(5, 0); // Erste Zeile
    lcd.print("+10 ");
   }

LG
old.

von oldeurope O. (Gast)


Lesenswert?

MaWin schrieb:
> Ein per simplem Widerstand linearisierter NTC ist natürlich nicht
> linear, sondern nur weniger unlinear.

Helmut S. schrieb:
> Bei mir funktioniert die Seite ohne Geld. Siehe screenshot.
Das lässt sich auf eine Spannungsquelle mit einem Serienwiderstand
umrechnen.

LG
old.

von Günter Lenz (Gast)


Lesenswert?

Aus der W. (Firma: oldeuropesblogs.blogspot.de schrieb:
>In dem Sketch gibt das dann ganz viele if-Bedingungen,

Warum erfindet man immer wieder für ein und die
selbe Sache, immer wieder neue Begriffe? Man könnte
doch einfach Programm sagen und es so lassen.
Bei Händys hießen die Programme irgendwann Apps
und nun heißen sie auf einmal Sketch.

von oldeurope O. (Gast)


Angehängte Dateien:

Lesenswert?

Günter Lenz schrieb:
> Warum

Weil der Begriff "Sketch" eine Bezeichnung für ein
Arduino-Programm ist und Jeder sofort bescheid weiß
wofür das gedacht ist.

Für meinen NTC wirft der Onlinerechner übrigens 49K raus.
Ich hatte ohne groß nachzudenken etwa 58K gewählt.

LG
old.

von Wolfgang (Gast)


Lesenswert?

Toxic schrieb:
> NTC-FakeResult.jpg

p.s.

Gerade erst gesehen ...

Das Bild ist ein schönes Beispiel, warum ein Polynom 4. Ordnung Mist 
ist. Oberhalb von 85 °C kann man die Kurve direkt in die Tonne treten.

von oldeurope O. (Gast)


Angehängte Dateien:

Lesenswert?

Aus der W. schrieb:
> Für meinen NTC gibt es alle 5Kelvin einen Widerstandswert.
> Die Punkte habe ich in ein Koordinatensystem gezeichnet …

Graph anbei.

LG
old.

von W.S. (Gast)


Lesenswert?

Toxic schrieb:
> Von Ulrich Maassen gibt ein Polynom Makerprogramm.

Oh klasse!

Leute, hat sich denn in den letzten 3 Jahren seit Erscheinen dieses 
Threads noch nicht die altbekannte Steinhart-Hart-Formel 
herumgesprochen? Die funktioniert bei einer passenden 
Dreipunkt-Kalibrierung über den gesamten Temperaturbereich, der hier zur 
Debatte steht.

Ich glaub, hier ist vor gefühlten 100 Jahren diese ganze Formelei schon 
x-mal gepostet worden.

W.S.

von Toxic (Gast)


Lesenswert?

W.S. schrieb:
> Ich glaub, hier ist vor gefühlten 100 Jahren diese ganze Formelei schon
> x-mal gepostet worden.
>
> W.S.

Sorry - wusste ich nicht.
Ich werde von nun an vor jedem Posting erstmal eine Stunde lang googeln 
um mich zu vergewissern,dass nicht schon irgendwer vor 1000 Jahren in 
Hintertupfingen etwas aehnliches gepostet hat.☹️

von W.S. (Gast)


Lesenswert?

Toxic schrieb:
> Sorry - wusste ich nicht.

Unwissenheit und Ahnungslosigkeit sind keine positiven 
Qualitätsmerkmale.

W.S.

von Harald W. (wilhelms)


Lesenswert?

Günter Lenz schrieb:

> und nun heißen sie auf einmal Sketch.

Sketch as sketch can? :-)

von georg (Gast)


Lesenswert?

Aus der W. schrieb:
> Weil der Begriff "Sketch" eine Bezeichnung für ein
> Arduino-Programm ist und Jeder sofort bescheid weiß
> wofür das gedacht ist.

Das Gegenteil ist der Fall: solche szenespezifischen Spezialbegriffe 
dienen der Abgrenzung der Insider vom Rest der Menschheit. Es soll also 
gerade niemand ausserhalb der Arduinofans wissen was gemeint ist.

Georg

von Wolfgang (Gast)


Lesenswert?

Aus der W. schrieb:
> Graph anbei.

Wenn du jetzt auch noch die Wertetabelle postest, könnte man gucken, wie 
sich das ggf. mathematisch beschreiben lässt, so dass die Umsetzung der 
Spannung in eine Temperatur nicht in eine If-Orgie ausartet.

Aus den Werten des NTC würde man sogar direkt die drei Parameter für die 
Steinhart-Hart-Formel (z.B. mit Excel oder LibreOffice) bekommen und 
hätte damit, im Gegensatz zu einem hochgradigen Polynom, eine adäquate 
Beschreibung.

von Wolfgang (Gast)


Lesenswert?

Man kann sich aus bekannten NTC-Kenngrößen eine Tabelle erzeugen lassen 
(oder selber messen).
Die Rechnung wird dann zu einem "Dreizeiler"

Sogar Online-Rechner mit Code-Generator gibt es dafür:
http://www.sebulli.com/ntc/index.php?lang=de&points=32&unit=0.01&resolution=8+Bit&circuit=pulldown&resistor=10000&r25=10000&beta=3999&tmin=-10&tmax=50

von oldeurope O. (Gast)


Angehängte Dateien:

Lesenswert?

Wolfgang schrieb:
> Wenn du jetzt auch noch die Wertetabelle postest

anbei.

von Wolfgang (Gast)


Lesenswert?

Aus der W. schrieb:
> anbei.

Ich hab's befürchtet. ;-(

In dem Format lassen sich die Daten leider nur etwas mühsam in ein 
Tabellenkalkulationsprogramm einlesen, um per Modellierung Parameter zu 
bestimmen. Aber glücklicherweise braucht man bei einem adäquaten Modell 
lange nicht so viele Stützstellen.

von oldeurope O. (Gast)


Lesenswert?

Wolfgang schrieb:
> Ich hab's befürchtet.

Macht nichts, funktioniert auch so.

Wolfgang schrieb:
> If-Orgie

Das juckt den Arduino nicht im geringsten.

Ich hatte schon überlegt hier im Forum
diesbezüglich nachzufragen.
Aber aufgrund der Foren-Erfahrungen habe ich mir das verkniffen.
Die If-Orgie ist definitiv der schnellere Weg.

LG
old.

von Wolfgang (Gast)


Angehängte Dateien:

Lesenswert?

Aus der W. schrieb:
> Wolfgang schrieb:
>> Ich hab's befürchtet.
>
> Macht nichts, funktioniert auch so.

Über die Genauigkeit soll man sich allerdings keinen Illusionen 
hingeben.
Die Temperaturwerte in deine Tabelle liegen z.T. über 0.5K neben der 
Kurve. Da das offensichtlich statistische Fehler sind, deutet das auf zu 
geringe Auflösung deines Referenztermometers bzw. ungleichmäßiger 
Temperaturangleich während der Kalibriermessung hin.

Bevor man die kritiklos übernimmt, lohnt sich ein bisschen 
Qualitätskontrolle.

von Michael B. (laberkopp)


Lesenswert?

Wolfgang schrieb:
> Über die Genauigkeit soll man sich allerdings keinen Illusionen
> hingeben.

Für jemanden der 1 GradC genau messen will offenbar ausreichend.

Max D. schrieb:
> Das Ding prophezeit mir ~1 Grad Genauigkeit in meinem Bereich,

von A. S. (Gast)


Lesenswert?

Aus der W. schrieb:
> Wolfgang schrieb:
>> If-Orgie
>
> Das juckt den Arduino nicht im geringsten.
>
> Ich hatte schon überlegt hier im Forum
> diesbezüglich nachzufragen.
> Aber aufgrund der Foren-Erfahrungen habe ich mir das verkniffen.
> Die If-Orgie ist definitiv der schnellere Weg.

Bei einem Dutzend vielleicht noch. Aber danach ist eine Tabelle deutlich 
einfacher, wartbarer, lesbarer, wiederverwendbarer.

von oldeurope O. (Gast)


Lesenswert?

Wolfgang schrieb:
> deutet das auf zu
> geringe Auflösung deines Referenztermometers bzw. ungleichmäßiger
> Temperaturangleich während der Kalibriermessung hin.

Noch schlimmer, ich habe gar keines verwendet, sondern die
Werte aus dem Datenblatt vom Hersteller genommen.
Auch die Spannung habe ich nicht gemessen. Das habe
ich LTspice überlassen.

LG
old.

von Wolfgang (Gast)


Lesenswert?

Michael B. schrieb:
> Für jemanden der 1 GradC genau messen will offenbar ausreichend.

Für 1°C Genauigkeit ist der Aufwand völlig überzogen. Quick & Dirty ;-)

Mit einer derart hoch aufgelösten Tabelle kommt man bei ordendlichen 
Werten locker auf 1/10K

von oldeurope O. (Gast)


Lesenswert?

A. S. schrieb:
> Bei einem Dutzend vielleicht noch. Aber danach ist eine Tabelle deutlich
> einfacher, wartbarer, lesbarer, wiederverwendbarer.

Da kann ich nichts zu sagen weil ich es nur so machen kann,
wie ich es eben kann.

LG
old.

von Harald W. (wilhelms)


Lesenswert?

Aus der W. schrieb:

> Jeder sofort bescheid weiß wofür das gedacht ist.

Genau:
https://www.duden.de/rechtschreibung/Sketch

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Aus der W. schrieb:
> Da kann ich nichts zu sagen weil ich es nur so machen kann,
> wie ich es eben kann.

Da wuerd' ich auch sagen: Wenns so funktioniert, warum nicht?
Unterstuetzt wird diese These ja auch dadurch, dass man kein Geld fuer 
nicht benoetigtes Flash auf dem µC zurueckbekommt. Und auch kein Geld 
bekommt oder zahlen muss, je nach dem Quotient aus der Groesse von .text 
und .data sections im Flash. Und die Temperatur ja auch nicht 
zigtausendmal pro Sekunde gemessen werden muss.

Mich taet' noch interessieren, wie's zu der im 
Temperatur/Spannungs-Diagramm gezeigten Schaltung mit insgesamt 4 
weiteren Widerstaenden um den NTC rum kam - ist da irgendwie Ueberlegung 
dahinter oder hat's irgendwann mal einfach funktioniert und das war dann 
halt grad die aktuelle Beschaltung?

Gruss
WK

von oldeurope O. (Gast)


Angehängte Dateien:

Lesenswert?

Dergute W. schrieb:
> Mich taet' noch interessieren, wie's zu der im
> Temperatur/Spannungs-Diagramm gezeigten Schaltung mit insgesamt 4
> weiteren Widerstaenden um den NTC rum kam

Schaltplan anbei.

LG
old.

von Dergute W. (derguteweka)


Lesenswert?

Aus der W. schrieb:
> Schaltplan anbei.

Bart Simpson wuerde sagen:
> Ay caramba!

;-)

Gruss
WK

von Wolfgang (Gast)


Lesenswert?

Aus der W. schrieb:
> Kennlinie_Temperatur.png

Dergute W. schrieb:
> Mich taet' noch interessieren, wie's zu der im
> Temperatur/Spannungs-Diagramm gezeigten Schaltung mit insgesamt 4
> weiteren Widerstaenden um den NTC rum kam - ist da irgendwie Ueberlegung
> dahinter oder hat's irgendwann mal einfach funktioniert und das war dann
> halt grad die aktuelle Beschaltung?

Ziel der Beschaltung ist, eine möglichst lineare Abhängigkeit zwischen 
Spannung und Temperatur zu bekommen.

Also gibt man halbwegs vernünftige Werte für die 4 Widerstände vor, 
bastelt dann in einer Tabellenkalkulation eine Tabelle mit dem 
Zusammenhang Temperatur-Messspannung, rechnet dort eine Gerade durch und 
summiert die Abweichung zwischen Gerade und Datentabelle als Fehlermaß 
auf.
Dann lässt man die Tabellenkalkulation per Optimierung die Widerstände 
suchen (z.B. Solver Add-in in Excel oder LibreOffice).
.... et Voilá, schon hat man die Beschaltung.

von oldeurope O. (Gast)


Angehängte Dateien:

Lesenswert?

Wolfgang schrieb:
> Ziel der Beschaltung ist, eine möglichst lineare Abhängigkeit zwischen
> Spannung und Temperatur zu bekommen.

Das war mir total egal da die Spannungswerte an zwei NTCs
verglichen werden.

Diese Widerstände dienen im Wesentlichen dazu die
Luftfeuchtigkeit außen korrekt hereinzurechnen.

In diesem Frühjahr habe ich mir ein Display eingebaut.
Die Temperaturanzeige habe ich mit der "If-Orgie" realisiert.

Aus der W. schrieb:
> Für meinen NTC wirft der Onlinerechner übrigens 49K raus.
> Ich hatte ohne groß nachzudenken etwa 58K gewählt.

Mit dem Wissen aus diesem Thread könnte ich den
Quellwiderstand für die NTCs umrechnen und linear
mappen. Vielleicht mache ich das mal wenn ich Lust und
Zeit dazu habe und mich das keine Anzeigegenauigkeit kostet.

Zur Displayanzeige im Bild:
1.Zeile:
Außentrmperatur +7Grad Celsius, Außenfeuchte 58%
2.Zeile:
Errechnete Lüftungsdauer zwischen +2 und +12Grad 21Minuten,
Smilie bedeutet Wäschetrockner darf benutzt werden,
bis +18Grad Außentemperatur dürfte man Außen-Luft in den
Keller lassen.
Für Dauerbetrieb des Lüfters ist es "zu kalt"


LG
old.

von A. S. (Gast)


Lesenswert?

Aus der W. schrieb:
> Da kann ich nichts zu sagen weil ich es nur so machen kann,
> wie ich es eben kann.

erlaubst Du ein Beispiel?
1
int DigToTemp(int dig)
2
{
3
struct {int C; int dig;} Ntc[]=
4
{
5
   {43, 200},
6
   {42, 208},
7
   {41, 219},
8
   {40, 235},
9
...
10
   {-23, 1011}
11
   {-24, 1023}
12
13
};
14
int i;
15
16
   for(i=0; i<countof(Ntc); i++) /* countof(x) --> sizeof(x)/sizeof(x[0]) */
17
   {
18
      if(dig <= Ntc[i].dig) {return Ntc[i].C;}
19
   }
20
   /* was immer auch im Fehlerfall, wenn dig > 1023 oder so */
21
   return -273;
22
}

von oldeurope O. (Gast)


Lesenswert?

A. S. schrieb:
> {41, 219},
>    {40, 235},

Was würde er denn bei 227 anzeigen?
Ich verstehe auch den Zusammenhang Deiner Zahlen mit der
Tabelle nicht. 200cV entspricht +37Grad.

LG
old.

von Wolfgang (Gast)


Lesenswert?

Aus der W. schrieb:
> Was würde er denn bei 227 anzeigen?

Bei 227 ist dig zum ersten mal bei dem Eintrag {40, 235} kleiner oder 
gleich /Ntc[i].dig/
Es wird also 40 aus der Funktion raus kommen.

von oldeurope O. (Gast)


Lesenswert?

Wolfgang schrieb:
> Bei

Also muss ich, genau wie bei der "IF-Orgie", die Zwischenwerte
aus der Tabelle ermitteln und eintragen?



Aus der W. schrieb:
> if (analogRead(aussen)>= 475 && analogRead(aussen) <= 482)
>    {
>     lcd.setCursor(5, 0); // Erste Zeile
>     lcd.print("+10 ");
>    }

Der Tabellenwert für +10Grad ist 479cV.

LG
old.

von Wolfgang (Gast)


Lesenswert?

Aus der W. schrieb:
> Also muss ich, genau wie bei der "IF-Orgie", die Zwischenwerte
> aus der Tabelle ermitteln und eintragen?

Welche Zwischenwerte?
In dem Array müssen die Umschaltpunkt drinstehen, also jeweils der 
höchste ADC-Wert, der zu dem Temperaturwert gehört.

von A. S. (Gast)


Lesenswert?

Aus der W. schrieb:
> Also muss ich, genau wie bei der "IF-Orgie", die Zwischenwerte
> aus der Tabelle ermitteln und eintragen?

Naja, der Vorteil wäre, dass die Zahlen in einer Tabelle untereinander 
stehen, und nicht über 70 ifs verteilt sind.

Ich habe jetzt Fantasiezahlen verwendet, da am Handy getippt.

und ja, man könnte auch die Spalte mit den Temperaturen weglassen, wenn 
man wirklich einen Eintrag für jede Temperatur hat. Ist mit 2 Spalten 
(hoffentlich) verständlicher und besser zu kontrollieren.

Und wenn man interpoliert, würde es u.U. ein wenig komplexer (weil man 
dann ggf. 2 Stützpunkte braucht, den davor und den danach.)

von georg (Gast)


Lesenswert?

A. S. schrieb:
> Und wenn man interpoliert

Wenn man eine Wertetabelle hat ist Interpolation eigentlich 
selbstverständlich, sonst verschenkt man den grössten Teil der 
vorhandenen Information. Kost ja fast garnix.

Georg

von oldeurope O. (Gast)


Angehängte Dateien:

Lesenswert?

A. S. schrieb:
> Naja, der Vorteil wäre

Ich habe Dir mal meine aktuelle .ino Datei angehangen.
Für mich ist das übersichtlich und ich verstehe jeden
Schritt darin.

A. S. schrieb:
> int DigToTemp(int dig)

So Etwas kenne ich schon gar nicht.

A. S. schrieb:
> struct {int C; int dig;} Ntc[]=

warum deklarierst Du C und dig nicht vor dem void Setup?

Bevor ich mich mit for, struct und return befassen muss,
finde ich es interessant, die Analogschaltung mal auf
linearisiert umzurechnen und zu sehen wie linear die
Kennlinie wird. Bei der Feuchte habe ich ja erfolgreich gemappt
und das sind nur wenige Schritte, siehe Zeilen 60 bis 68.

Edit: Och nee, in der Codeansicht fehlen ja noch immer
die Zeilennummern.

LG
old.

von Wolfgang (Gast)


Lesenswert?

Aus der W. schrieb:
> warum deklarierst Du C und dig nicht vor dem void Setup?

Weil das alles nur in DigToTemp() gebraucht wird.

von oldeurope O. (Gast)


Angehängte Dateien:

Lesenswert?

Also das Resultat der Linearisierung ist leider nicht so genau
wie erhofft. Siehe Anhang.

Ich lasse das wie es ist, mit den Einzelwerten.
Vorerst noch mit if.
Bei der struct-Sache blicke ich noch nicht richtig durch.

LG
old.

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.