NTC-Thermistorschaltung, ADC-Umwandlung, Temperatur berechnen

Hier sind die Schaltpläne meiner NTC - ADC-Schaltung,

NTC NTC-ADC AREF

ADC 10 Bit, ADCVCC 2,56 V

Vin = 5 V

Kann mir jemand erklären, wie ich RT erhalte, den Widerstandswert von NTC aus dem ADC-Wert? Danke.

Ich verwende die Spannungsteilerformel:

Vout = ADCVCC * ADC_value / 1024
BETA = 3950
R25 = 4700
RT = 10K / (Vin - Vout - 1)
T = (1 / (1/298.16 + 1/BETA * ln(RT/R25 )) - 273.15

Aber ich habe falsche Ergebnisse:

Meine Temperaturbereiche sind:

adc = 1    -> T = 344 °C;
adc = 1023 -> T = 8

Wie muss ich den ADC im AVR einrichten? mit interner Spannungsreferenz oder nicht?

Habe ich eine falsche Formel?

Ich muss mehr oder weniger "genaue" Temperaturen im Bereich von -10 ° C bis + 30 ° C lesen.

Ich habe es bereits mit der SH-Gleichung mit den Koeffizienten A, B, C versucht, aber ich habe die schlechtesten Ergebnisse erzielt !!!

Ich glaube, ich habe die Schaltpläne von NTC-ADC-Schaltungen nicht verstanden ...

Und mein ATMega mit falschen Parametern eingerichtet.

Jemand kann versuchen, mir zu erklären, wie ich meinen ADC-Wert mit diesen Schaltplänen in den Widerstand des Thermistors umwandeln kann?

Danke an Rat für Hilfe.

[BEARBEITEN]

Mein Setup für AVR ADC:

ADMUX |= (1<<REFS0) | (1<<REFS1);
ADCSRA |= (1<<ADEN) |(1<<ADSC) |(1<<ADIE);
ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

und die Formel, die verwendet wird, um den Widerstand aus dem ADC-Wert zu erhalten: Vin = 5 V Vref = 2,56 V (AREF)

Vout = adc_val * (Vref / 1024.0))
RT   = 10k / (Vin / Vout - 1.0)

Dieser Code stimmt mit den Schaltplänen überein? Ist es richtig, dass mein ADC mit diesen Schaltplänen eingerichtet ist? danke im rat.

Erste Annahme zu klären ... der Widerstand des NTC wird niedriger, wenn er sich erwärmt. Wenn also kalter NTC einen hohen Widerstand hat. Im heißen Zustand sinkt der Widerstand. Die Spannung am Thermistor sinkt mit steigender Temperatur ... Ist das das, was Sie wollen? Ich habe die Berechnung nicht durchgeführt, aber Ihre Ergebnisse zeigen, dass Sie die gewünschte Reichweite nicht erreichen können ... passen Beta und R25 zu Ihrem NTC? Sie sind je nach Modellnummer unterschiedlich ... Und war der Operationsverstärker vorhanden, falls Pegelverschiebung und Skalierung erforderlich sind?
Meine Beta- und R25-Werte sind korrekt. Ich habe aus dem Datenblatt genommen. Ich habe ADC mit einer internen Spannungsreferenz von 2,56 V (AREF) eingerichtet, also lautet der AVR-C-Code: ADMUX |= (1<<REFS0) | (1<<REFS1); und der Adc-Wert wird mit der Spannungsteilerformel transformiert: Vref = 2,56 V Vin = 5 V Vout = (adc_val * (Vref / 1024,0)) RT = 10k / (Vin / Vout - 1,0) [Ich habe meine Frage mit mehr bearbeitet die Info]

Antworten (2)

Jemand kann versuchen, mir zu erklären, wie ich meinen ADC-Wert mit diesen Schaltplänen in den Widerstand des Thermistors umwandeln kann?

Erstens macht die Operationsverstärkerschaltung sehr wenig anderes, als einen kleinen Fehler hinzuzufügen. Wenn es einen Gewinn hatte, könnte man argumentieren, dass es einen Nutzen hatte.

Zweitens profitiert diese Schaltung von der Verwendung der Versorgungsspannung als analoge Referenz, da Sie dann einen weiteren Fehlerterm entfernen, nämlich die variable Differenz zwischen der Versorgungsspannung an R1 und der Referenzspannung des ADC.

Der Wert des ADC repräsentiert also das Verhältnis T H e R M ich S T Ö R   R e S ich S T A N C e T H e R M ich S T Ö R   R e S ich S T A N C e + 10 k Ω

Kannst du es von hier nehmen?

Ich nehme an, die Operationsverstärkerschaltung ist als "Rauschfilter" gedacht, um bessere Ergebnisse zu erzielen. Aber ich bin mir nicht sicher. Ich kenne die Entscheidung dafür nicht ... :) Für die von Ihnen vorgeschlagene Gleichung habe ich meine Frage mit weiteren Informationen bearbeitet. aber ist die Spannungsteilerformel richtig? Vin/Vaus = R1/(R1+R2)
Wenn R1 der Thermistor und R2 der Widerstand ist, der ihn von der Versorgung speist, ist dies die Formel für die Spannung am Thermistor relativ zur Versorgung. Wenn Ihr ADC jedoch die Versorgung als Referenz verwendet, ist die Formel der ADC-Wert geteilt durch 1024.

Ich habe Ihren Code in Python ausgeführt und 285 für adc_val = 1 und -84 für adc_val = 1023 erhalten. Bei einem adc_val von 318 erhalte ich 25,9. RT ist zu diesem Zeitpunkt 4504. Es sieht also so aus, als ob Ihre Gleichungen stimmen sollten. Sind Sie sicher, dass es in Bezug auf die Typen korrekt implementiert wird? Es muss alles Fließkomma sein. Wenn etwas in eine ganze Zahl oder so umgewandelt wird, könnten Sie einige seltsame Ergebnisse erhalten.

>>> BETA = 3950
>>> R25 = 4700
>>> Vin = 5
>>> Vref = 5
>>> adc_val = 1
>>> Vout = adc_val * (Vref / 1024.0)
>>> RT   = 10000 / (Vin / Vout - 1.0)
>>> T = (1 / (1/298.16 + 1/BETA * log(RT/R25 ))) - 273.15
>>> T
285.3553121325664
>>> adc_val = 1023
>>> Vout = adc_val * (Vref / 1024.0)
>>> RT   = 10000 / (Vin / Vout - 1.0)
>>> T = (1 / (1/298.16 + 1/BETA * log(RT/R25 ))) - 273.15
>>> T
-84.45667531777428
>>> adc_val = 318
>>> Vout = adc_val * (Vref / 1024.0)
>>> RT   = 10000 / (Vin / Vout - 1.0)
>>> RT
4504.249291784702
>>> T = (1 / (1/298.16 + 1/BETA * log(RT/R25 ))) - 273.15
>>> T
25.970525623383708
Nun, ich habe damals herausgefunden, dass es einige Fehler im Prototyp (Gerät) gab. Als ich diese Intuition hatte (ich bin kein Elektronik-Ingenieur), bemerkte ich ein seltsames Verhalten von Hardware-Antworten. Die Ergebnisse waren weniger präzise, ​​was für das Unternehmen akzeptabel war, da es sich um einen Prototyp handelte. Wie auch immer: wieder einmal ideales und echtes Mismatch! :D :D :D (übrigens danke)