Erweiterung des Bereichs analoger Werte vom Temperatursensor

Ich versuche, ein temperaturgesteuertes Relaismodul mit einem ATtiny45 (Arduino UNO R3 als ISP) und einem NXP KTY81-222 Temperatursensor zu bauen.

Der Temperaturbereich, den ich überwachen möchte, liegt zwischen 20 °C und 30 °C.

( Datenblatt -> http://www.produktinfo.conrad.com/datenblaetter/150000-174999/153653-da-01-en-TEMPERATUR_SENSOR_KTY10_7_KTY81_222.pdf )

Mein Schaltungslayout sieht so aus = (Ich verwende den Arduino UNO R3 zum Debuggen)

Geben Sie hier die Bildbeschreibung ein

** Beachten Sie, dass ich auch versucht habe, den 1K-Widerstand und die Sensorposition zu "tauschen", um den Ausgang zu invertieren.


* und das Arduino-Board ->

Geben Sie hier die Bildbeschreibung ein

A0 ist der analoge Eingang 0 des Arduino. 5V werden direkt in den 5V-Ausgangsstift des Arduino gesteckt.

(später wäre es das gleiche auf dem ATtiny45 mit einigen Batterien)

Geben Sie hier die Bildbeschreibung ein

(VCC kann 2,7 V bis 5,5 V betragen)

Ich habe ein Haushalts-Digitalthermometer verwendet, um die Werte vom analogen Eingang mit den gemessenen °C-Werten zu vergleichen.

Dies ist eine Schnellmaßtabelle =

Analog -> °C


687 bis 690 -> 24,4 °C bis 25,1 °C

707 bis 708 -> 36,2 °C bis 36,5 °C

Wie Sie sehen können, habe ich einen Bereich von etwa 20 analogen Einheiten, der einen Bereich von etwa 10 ° C-Einheiten darstellt.

Was ich also eigentlich möchte, ist, den Bereich der analogen Einheiten auf etwa 200 analoge Einheiten für den Bereich von 10 ° C-Einheiten zu "erweitern". Die Lösung sollte einen gut zu handhabenden Wertebereich haben, damit ich dem µC sagen kann, dass er das Relais einschalten soll, wenn die Temperatur unter 24 ° C liegt, und das Relais schließen, wenn die Temperatur über 28 ° C liegt.

Ich möchte, dass 20 ° C ein analoger Wert von etwa 500 und 30 ° C etwa 700 ist. (Dieser Bereich von 500 bis 700 wäre gut genug für mich.

Ich hoffe, ich konnte meine Frage für mein schlechtes Englisch gut erklären.

Warum willst du mehr Präzision? 0,5°C sollten für diese Aufgabe ausreichen. Und traue einem Haushaltsthermometer nicht zu sehr.
Ich habe kein anderes Thermometer, um die tatsächliche °C für jeden Wert zu berechnen. Warum ich also einen größeren "Bereich" haben möchte, ist, dass ich herausfinden muss, welche Werte in meinem Code für die untere und die obere Grenze verwendet werden sollen ...
Der wirkliche Weg, Ihr Problem zu lösen, den Bereich Ihres Systems so anzupassen, dass der interessierende Temperaturbereich den Bereich Ihres ADC abdeckt, besteht darin, eine Operationsverstärkerschaltung zu verwenden, den Offset zu entfernen und die Verstärkung zu erhöhen. Es wird ein wenig durch die Tatsache erschwert, dass Sie keine negative Stromversorgung haben, sodass Sie einseitige Operationsverstärker verwenden müssen.
hmm ok, ich habe keine Erfahrung mit Verstärkung :S Ich denke, ich sollte einfach bei der aktuellen Schaltung bleiben und es mit den gegebenen Werten versuchen. Kennen Sie eine gute Methode, um die analogen Werte, die ich bekomme, zu "vergleichen", um die tatsächliche ° C zu erhalten? mein raumthermometer scheint nicht gültig zu sein.

Antworten (2)

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Sie werden auf einige Genauigkeitsprobleme stoßen, wie zum Beispiel:

  1. Rauschen von der 5V-Leitung
  2. Selbsterhitzung
  3. möglicher Spannungsabfall (durch Leitungslänge)

Ich würde einfach ein Eindrahtthermometer wie das DS18B20/DS18S20 verwenden. Mit einem digitalen Sensor, weniger immun gegen Rauschen. Sie können es sogar auf eine viel längere Distanz laufen lassen. Es gibt bereits eine Bibliothek für den Arduino. Das ist jedenfalls mein Weg.

Gehen Sie mit Ihrer Route:

Wenn Sie nur den Temperaturbereich von 20 ° C bis 30 ° C wünschen, müssen Sie mit Ihrem Widerstand herumspielen, um diesen Bereich zu erhalten. Beispielsweise beträgt der Nennwiderstand bei 20 °C 1922 Ohm und bei 30 °C 2080 Ohm.

Spannungsteilerzustände ergeben also:

@ 20 C : v Ö = v ich R S R S + R 1 = 5 v 1922 1922 + 1000 = 3.288 v

@ 30 C : v Ö = v ich R S R S + R 1 = 5 v 2080 2080 + 1000 = 3.376 v

Der Unterschied beträgt 0,08778 V oder 87,78 mV. Da Arduinos Analog 10b (1023) verwendet: 5 v 1023 = 4.888 M v / S T e P . Dies hätte 17,9 Schritte ergeben sollen ( 87,78 M v 4.888 M v , also sagen wir einfach 17. Wenn Sie dies auf eine größere Auflösung reduzieren möchten, können Sie die 3,3 V vom FTDI-Port des Arduino an den analogen Referenzstift anschließen. Versorgen Sie Ihren Spannungsteiler jedoch mit denselben 5 V. Verwenden Sie in Ihrem void setup() analogReference(EXTERNAL). Dadurch wird Ihr Analog so eingerichtet, dass es die 3,3-V-Referenz anstelle der internen 5-V-Referenz verwendet.

Jetzt rechnen wir noch etwas weiter:

Da wir jetzt eine 3,3-V-Referenz verwenden, ändert sich die Auflösung zu 3.3 v 1023 = 3.23 M v / S T e P . Dies ergibt nun 27,2 Schritte ( 87,78 M v 3.23 M v ) (sagen wir einfach 27 Schritte).

Wie Sie sehen können, haben wir uns gerade von 17 Schritten auf 27 Schritte verbessert. In einem Bereich von 10 °C (30 °C bis 20 °C) können wir theoretisch eine Auflösung von 10 °C/27 = 0,37 °C erreichen. Ich würde einen Kondensator parallel zum Sensor empfehlen, um einen Tiefpassfilter erster Ordnung zu erstellen (lässt niedrige Frequenzen durch und unterdrückt hohe Frequenzen nach dem Abschalten mit einer Rate von 20 dB oder der 10-fachen Unterdrückung pro Dekade). Verdrahten Sie diesen Kondensator direkt zwischen A0 und gnd (so nah wie möglich an A0). Der Grenzfilter wird berechnet mit:

Angenommen, Sie verwenden einen 1k-Widerstand und einen 1uF-Kondensator:

F C = 1 2 π R C = 1 2 π 1000 0,000001 = 159 H z

Alles, was Sie jetzt tun müssen, ist, mit dem Widerstandswert herumzuspielen (er sollte jetzt größer als 1k sein). Stellen Sie sicher, dass im schlimmsten Fall keine Spannung größer als die Referenzspannung bereitgestellt wird.

Ich würde wahrscheinlich einen 2k-Widerstand wählen:

v Ö = 5 v 1922 1922 + 2000 = 2.450 v analogRead ergibt also 759

v Ö = 5 v 2080 2080 + 2000 = 2.549 v analogRead ergibt also 790

Worst-Case-Szenario: @ 150 ° C -> 4280 Ohm

v Ö = 5 4280 4280 + 2000 = 3.4 v (OK)

Differenz 98,73 mV -> 98,73 mV/3,23 mV -> 30 Schritte

Tiefpassfilter: ( 2 π 2000 0,000001 ) 1 = 79.6 H z (AC-Signal bei 796 Hz wird auf 10-mal kleiner reduziert, bei 7960 Hz ist es 100-mal kleiner usw.).

danke für diese gute erklärung. Können Sie bitte eine kurze Zeichnung des Schaltungslayouts für Ihre endgültige Lösung hochladen? Meine Elektrikkenntnisse sind nicht so gut. Denken Sie auch daran (für die Selbstheizung), dass ich den Sensor an einem 1-Meter-Duplex-Kabel habe. es liegt also außerhalb des "elektronischen Bereichs". und auch: kann ich einfach den 3,3-V-Ausgangspin des Arduino verwenden?
Ich habe meine Frage mit einigen Referenzbildern für das Arduino und das von mir verwendete Attiny aktualisiert.
Dieser 3,3-V-Ausgangspin kommt vom FTDI-Chip. Denken Sie daran, dass dieser Pin nur bis zu 50 mA verarbeiten kann. Wenn Sie versuchen, mehr als das zu zeichnen, wird es das arme Ding braten. Verwenden Sie einfach das Bild, das Sie derzeit für das Schaltungslayout haben. Platzieren Sie einen Keramikkondensator zwischen A0 und Masse, sodass er parallel zum Sensor liegt. Ich bin mir nicht sicher, wie ich Bilder hochladen soll.
Unter Ihrem Antworttext können Sie auf "Bearbeiten" klicken, im Editor können Sie auf "Bildsymbol" klicken, um ein Bild in den Text an der aktuellen Position hochzuladen. Ich weiß nicht, warum ich den Kondensator verwenden sollte, weil ich kein ahy-Rauschen habe.
Ich bin mir ziemlich sicher, dass Sie das tun werden. Wenn Sie beispielsweise Ihren AnalogRead (A0) seriell drucken, schwankt der Wert, selbst wenn sich die Temperatur nicht ändert. Dies wird als Rauschen betrachtet.

Es scheint keine sehr breite Palette digitaler Zahlen zu sein, aber haben Sie darüber nachgedacht, (sagen wir) zehn Messwerte zu mitteln? Rauschen (wenn es im Allgemeinen über der Bandbreite liegt, die Sie messen müssen) kann durch einen Prozess namens Dithering zu Ihrem Vorteil genutzt werden. Durch die Zufälligkeit des Rauschens erhalten Sie eine Streuung der Messwerte für eine feste Temperatur, und die Mittelung mehrerer Zahlen ergibt eine größere Auflösung. Die Mittelung der Zahlen ist ein Tiefpassfilter, der (a) das Rauschen entfernt und (b) Ihnen eine höhere Auflösung bietet.

Sie erwähnen "analoge Einheiten", beziehen sich aber auf digitale Werte, die von einem ADC gesammelt wurden, also schlage ich vor, dass Sie genau dies tun - versuchen Sie es zumindest und sehen Sie, wie die Variationen sind. Wenn Sie wirklich gute stabile Signale in Ihrem ADC haben, kann eine Form der Verstärkung mit einem Operationsverstärker versucht werden. Wenn Sie den Eingang des ADC mit einem Kondensator entkoppeln, können Sie versuchen, ihn zu entfernen.

Ich denke, das Problem des "Rauschens" in meiner obigen Maßtabelle ist mein Haushaltsthermometer. Ich habe kein anderes Instrument, um die richtige Temperatur zu messen.
Wenn Sie zehn oder 16 oder 32 Messungen schnell hintereinander vornehmen würden, wären dann alle Messungen genau gleich? Wenn ja, hilft Ihnen meine Antwort nicht weiter. Wenn es eine vernünftige Streuung von + oder - einer Zähleränderung gibt, hilft Ihnen meine Antwort. Ich versuche, nach alternativen Wegen zu suchen, die im Gegensatz zum "Standard" -Weg zur Anwendung der Verstärkung hilfreich sein könnten. Wenn Sie einen Ersatz-Schmitt-Inverter haben, können Sie die Dreieckswellenform (in der Amplitude stark reduziert) überlagern, um das Signal tatsächlich leicht zu dithern. Die Frequenz muss innerhalb von Nyquist und unabhängig von Ihrer Abtastfrequenz liegen, damit sie funktioniert.
Ja, während das Kabel mit dem Sensor in meinem Zimmer bleibt, ändert sich der Wert nicht, bis ich den Sensor kühle oder erhitze.