Forum: Mikrocontroller und Digitale Elektronik LM335Z auswerten.


von Dirk D. (guggug)


Lesenswert?

Hallo zusammen...

Ich fummel hier gerade mit einem Arduino nano und einem LM355Z herum

Dabei verwende ich folgenden Code
1
float temp_in_celsius = 0, temp_in_kelvin=0, temp_in_fahrenheit=0;
2
3
void setup()
4
{
5
  Serial.begin(9600);
6
}
7
8
void loop()
9
{
10
11
  //Reads the input and converts it to Kelvin degrees
12
  temp_in_kelvin = analogRead(0) * 0.004887585 * 100;
13
 
14
  //Converts Kelvin to Celsius minus 2.5 degrees error
15
  temp_in_celsius = temp_in_kelvin - 35 - 273.15;
16
 
17
  temp_in_fahrenheit = ((temp_in_kelvin - 35) * 9 / 5) - 459.67;
18
19
  //Print the temperature in Celsius to the serial port
20
  Serial.print("Celsius: ");
21
  Serial.println(temp_in_celsius);                 
22
23
  //Print the temperature in Fahrenheit to the serial port
24
  Serial.print("Fahrenheit: ");
25
  Serial.println(temp_in_fahrenheit);
26
  Serial.println();
27
28
29
  delay(3000);
30
}

Als erstes stellt sich mir die Frage, warum hat der Sensor solch eine 
große Abweichung? In diesem Code Bsp. haben sie eine Abweichung von 
2,5Grad was mir realistisch erscheint. Ich musste um auch nur annähernd 
auf den richtigen Wert zu kommen 35 Grad Korrekturwert benutzen. Kann es 
wirklich solch eine große Tolleranzn bei diesen Bauteilen geben?

Das nächste was mich etwas stört, warum springt der Wert im Bereich von 
1 Grad auf und ab? Wie kann ich das weg bekommen, oder zumindest 
minimieren??
Der Arduino wird über USB mit Spannung versorgt.

Der Sensor wird über einen 2,2K Widerstand am mittleren Pin vom Adruino 
5V versorgt. Der rechte Pin liegt auf Minus und am linken Pin hängt der 
Schleifer eines 10K Potis.

Vielen Dank für Eure Hilfe...

von Oldie (Gast)


Lesenswert?

Lass erst mal das Potentiometer weg. Das ist für
Feinkorrekturen, NACHDEM du den Fehler gefunden hast.

Links und rechts sind nicht sehr aussagekräftig.
Vielleicht ist der LM335 verkehrt herum angeschlossen und
du misst nur das Potentiometer + Rückwärtsströme????

Anfangen würde ich mit +5 V über 2,2 k an Pin 1 (V+) und
Masse an Pin 3 (V-). Und einem Voltmeter an Pin 1 und 3.

Da müsste sich bei Raumtemperatur schnell zeigen, ob die Pins
richtig erkannt wurden...

von Max M. (jens2001)


Lesenswert?

Dirk D. schrieb:
> temp_in_kelvin = analogRead(0) * 0.004887585 * 100;

Über de Zeile würd ich noch mal nachdenken.

von Dirk D. (guggug)


Lesenswert?

> Anfangen würde ich mit +5 V über 2,2 k an Pin 1 (V+) und
> Masse an Pin 3 (V-). Und einem Voltmeter an Pin 1 und 3.
>
Da messe ich 3.013V

Das würde bedeuten ich müsste bei meinen 21 Grad Zimmertemperatur auf
2,94 Volt einstellen?? Sehe ich das richtig?

grüße aus dem Süden

von Dirk D. (guggug)


Lesenswert?

Max M. schrieb:
> Dirk D. schrieb:
>> temp_in_kelvin = analogRead(0) * 0.004887585 * 100;
>
> Über de Zeile würd ich noch mal nachdenken.

Du hast Recht ich hatte mit 1023 gerechnet..

Was mich eben immer noch wundert ist solch ein riesiger Korrekturwert 
wie oben geschrieben..


Grüße aus dem Süden

von S. Landolt (Gast)


Lesenswert?

Wenn ich mich recht erinnere, so heißt 'messen' 'vergleichen mit einer 
bekannten Größe'; Letzteres ist hier wohl die Referenzspannung des 
AVR-ADCs - wie sieht diese aus, wie groß, wie stabil? Und auf sieben 
Stellen genau ist sie sicher nicht.
Die Messung mit dem Voltmeter könnte gerade so hinkommen, im Datenblatt 
lese ich einen maximalen Fehler von 6 °C (bei Tu= 25 °C und I= 1 mA).

Gruß aus dem Südwesten

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

S. Landolt schrieb:
> Letzteres ist hier wohl die Referenzspannung des AVR-ADCs - wie sieht
> diese aus, wie groß
Ungewiss...
> wie stabil?
Ziemlich...

Genaueres steht im Datenblatt. Im besonderen interessant ist hier der 
variable Absolutwert der Referenzspannung.

von S. Landolt (Gast)


Lesenswert?

Lothar Miller schrieb:
>> wie stabil?
>Ziemlich...

Ich kenne die Arduinos nicht.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Was ist auf "Arduinos" verbaut?

von Michael U. (amiga)


Lesenswert?

Hallo,

Lothar M. schrieb:
> Was ist auf "Arduinos" verbaut?

bei den gängigen kleinen wie Nano, ProMini, Uno ein Mega328 mit 16MHz 
getaktet und Bootloader versehen.
AVcc ist nicht gefiltert, ARef hat 100n gegen GND.

Gruß aus Berlin
Michael

: Bearbeitet durch User
von S. Landolt (Gast)


Lesenswert?

> temp_in_kelvin = analogRead(0) * 0.004887585 * 100;
> Der Arduino wird über USB mit Spannung versorgt.
Aus der Berechnung schließe ich auf eine angenommene Referenzspannung 
von 5.00 V; stellt sich also die Frage, wie der verwendete 'Arduino 
nano' aus USB ebendiese erzeugt.

von Oldie (Gast)


Lesenswert?

Da muss ich auch noch mal an den Beitrag von S. Landolt (Gast)
anschließen:

Die 5 V aus der USB-Versorgung sind vielleicht nur eine
Hausnummer. Laut Wikipedia-Artikel "Universal Serial Bus"
dürfen da 4,4...5,5 V anliegen.

Wenn sich an die altmodische TTL-Regel gehalten wird, so haben
wir 4,75...5,25 V. Hast du ein DVM um die "5 V" zu messen, sind
die stabil?

Beispiel: Idealer LM 335 bei 298 K = 25 °C: 2,98 V
Umrechnungsfaktor K = 0,48852 * ADC, °C = K - 273

A) Vcc = Vref = 5,25 V
   ADC = 2,98 / 5,25 * 1024 = 581 -> 11 °C

B) Vcc = Vref = 5,00 V
   ADC = 2,98 / 5,00 * 1024 = 610 -> 25 °C

C) Vcc = Vref = 4,75 V
   ADC = 2,98 / 4,75 * 1024 = 642 -> 41 °C

Beim Mega168 und Mega328 gibts alternativ zu Vcc eine 1,1 V
Internal Reference.
Benutzt du diese und teilst das Signal vom LM335Z mit einem
Spannungsteiler durch 4, kannst du 0...4,4 V (-273...167 °C)
erfassen.

So wie eine 5 V Betriebsspannung als Uref (egal, ob USB, oder ein
LM7805) sind diese 1,1 V auch nicht sehr genau, ABER (!) recht
stabil.

Du wirst in jedem Fall bei der ersten Inbetriebnahme einen
Abgleich vornehmen müssen. Dies kann per Software, oder z.B. mit
einem 10-Gang-Poti (10 kOhm) erfolgen, das den Spannungsteiler
1:4 darstellt. Am Poti kurbelst du solange, bis die mit
einem externen Thermometer ermittelte Temperatur angezeigt wird.

Instabilitäten sind dann nur noch äußere Störungen, die durch
das Layout und RC-Filterung minimiert werden können - und durch
Mittelwertbildung über die Netzspannungsperiode (20 ms), oder
über die Periode der Störspannungen, die du mit dem µC erzeugst...

von Dirk D. (guggug)


Lesenswert?

Vielen Dank für Eure Hilfe.

@ Oldie Vielen Dank für die sehr ausführliche Erklärung. Jetzt hat es 
KLICK gemacht.

Grüße aus dem Schwabenland

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.