Forum: Analoge Elektronik und Schaltungstechnik LM35 mit AD-Wandler


von Michelle.E. (Gast)


Lesenswert?

Hallo,

ich habe ein Problem mit dem AD-Wandler.

Ich möchte nämlich die Temperatur mit dem LM35 einlesen.
Ich verwände einen Arduino uno, programmiere aber in C.

Als erstens habe ich mein Programm geschrieben und den LM angeschlossen.
einfach + auf + und GND auf GND, den V-out habe ich direkt auf einen 
Analog pin gelegt.

Dann hatte ich das Problem das ich bei meinem LCD Display einen komplett 
falschen wert hatte und das der Wert stark schwankte.
Aber wenn ich eine externe Spannung angeschlossen habe(ohne LM35) hat es 
funktioniert.
Also dachte ich das dass Programm richtig sein muss.
Nach langem hin und her dachte ich das die interne Referenz Spannung das 
Problem sein könnte also habe ich eine Externe 5V Referenz Spannung 
genommen (mit Kondensatoren und Spulen zum glätten).
Es wurde etwas besser aber der Wert schwankte immer noch stark.
Ich hab auch verschiedene Schaltungen aus dem Datenblatt ausprobiert, da 
es ja nur vom LM kommen kann, hat aber gar nichts gebracht.

schlussendlich dachte ich der LM sei Kaputt oder das ich ihn kaputt 
gemacht habe und mir einen neuen besorgt. und zuerst mit dem Multimeter 
gemessen (Hab ich auch bei dem Alten getan aber sobald ich in an den AD 
Pin angeschlossen habe fing der wert wider an zu schwanken), da 
funktioniert er einwandfrei aber wenn ich ihn wieder an den AD pin 
schlisse fällt der wert wieder und anstatt die 25.xx zeigt er mir 32,xx, 
und das ist ja nicht richtig.

ich hab auch schon versucht einen 100nf zwischen GnD und + , beim LM35 
und zwischen dem AD und GND anzuschließen brachte aber nichts.

Auch den Mittelwert zu ermitteln funktioniert nicht wirklich da mir ein 
wert angezeigt wird und dann wieder auf 0 abfällt sobald der LM35 
angeschlossen ist.

ich weiß echt nicht mehr was ich tun soll hat jemand sonst noch eine 
Idee? hab auch schon hier einige Forme durchgelesen und nichts 
brauchbares gefunden!

bitte um Hilfe!

lg Michelle.E
 hatte aber wenn ich

von Achim S. (Gast)


Lesenswert?

Michelle.E. schrieb:
> ich hab auch schon versucht einen 100nf zwischen GnD und + , beim LM35
> und zwischen dem AD und GND anzuschließen brachte aber nichts.

Wenn ich es richtig verstehe hast du also 100nF als Last am Ausgang des 
LM35? Das mag der gar nicht. Siehe Abschnitt 8.1 im Datenblatt:
http://www.ti.com/lit/ds/symlink/lm35.pdf
(Die 100nF an der Versorgung sind aber richtig, die solltest du dran 
lassen.)

Mehr als 50pF am Ausgang können dem LM35 instabil machen, und 50pF 
kannst du auch schon zusammenbekommen, wenn du längere Anschlusskabel 
verwendest. Im Zweifel schalte mal direkt am LM35 200 Ohm in Serie zu 
Ausgang.

Michelle.E. schrieb:
> Es wurde etwas besser aber der Wert schwankte immer noch stark.

Was heißt das? Um 20mV oder um 2V? Und welche Spannung misst du, wenn du 
mit einem Multimeter an den Ausgang des LM35 gehst?

von Michelle.E. (Gast)


Lesenswert?

Achim S. schrieb:

> Michelle.E. schrieb:
>> Es wurde etwas besser aber der Wert schwankte immer noch stark.
>>Achim S. schrieb:
> Was heißt das? Um 20mV oder um 2V? Und welche Spannung misst du, wenn du

Damit meine ich das der bereich in dem es schwankt kleiner wurde.

>>Achim S. schrieb
> mit einem Multimeter an den Ausgang des LM35 gehst?

wenn ich den ad Wandler mit angschlossen habe, kann es von 1V- bis zu 
300mV hin und her schwanken(am Multimeter)

aber wenn ich den ad wandler weg nehme bekomme ich die aktuelle 
raumtemperatur am Multimeter.

von Achim S. (Gast)


Lesenswert?

Michelle.E. schrieb:
> Damit meine ich das der bereich in dem es schwankt kleiner wurde.

Gib bei sowas einfach konkrete Zahlenwerte an, unter "kleiner 
Schwankung" versteht jeder etwas anderes.


Michelle.E. schrieb:
> wenn ich den ad Wandler mit angschlossen habe, kann es von 1V- bis zu
> 300mV hin und her schwanken(am Multimeter)
>
> aber wenn ich den ad wandler weg nehme bekomme ich die aktuelle
> raumtemperatur am Multimeter.

Demnach macht der µController selbst irgendeinen Unsinn. Der AD-Eingang 
kann ja auch als digitaler Ausgang genutzt werden. Kann es sein, dass 
dein Programm zwischendurch versehentlich auf den Pin schreibt? Wenn du 
die Möglichkeit hast, die Spannung mit dem Oszi zu untersuchen, kann das 
viel über die Quelle der Schwankungen verraten.

von Tcf K. (tcfkao)


Lesenswert?

Hast Du an dem AD-Wandler-Pin einen PULLUP eingeschaltet?
Der LM35 kann nur Strom sourcen (speisen), nicht sinken (senken).

Zitat: "The temperature-sensing element is then buffered by an amplifier 
and provided to the VOUT pin. The amplifier has a simple class A output 
stage with typical 0.5-Ω output impedance as shown in the Functional 
Block Diagram. Therefore the LM35 can only source current and it's 
sinking capability is limited to 1 μA."

: Bearbeitet durch User
von Michelle.E. (Gast)


Lesenswert?

Also ich habe jezt mal einen 200 Ohm am ausgang in reihe geschalten und 
nochmal geguckt ob ich irgendwo den Port verwände wird aber auser in der 
LCD rutine aber da habe ich blos die lezten zwei Pins angesteuert und 
ich nehme beim  AD den ersten Pin also sollte das ja kein problem sein 
oder??

und bei meinem LCD display zeigt es mir den Wert 1287 an und dann wieder 
0005 immer abwechselnd.

von Michelle.E. (Gast)


Angehängte Dateien:

Lesenswert?

Hir wäre mein completer C-Code

von Tcf K. (tcfkao)


Lesenswert?

Nein, ich vermute irgendwas zieht den Pin nach oben, deswegen die 
Frage nach dem Pullup. Der Ausgang des LM35 kann nur Strom gegen GND 
liefern (source), nicht gegen Vcc (sink). Entweder sich den Pin im 
angeschlossenen Zustand mit einem Oszilloskop ansehen oder 
1k-Pulldown-Widerstand anschließen -- falls es dann funktioniert aber 
die Ursache beheben.

von Michael K. (Gast)


Lesenswert?

Vorweg: Offensichtlich sorglose Rechtschreibung wird hier als 
Unhöflichkeit gewertet.

Dein Atmel enthält einen AD Wandler der auf mehrere Pins gemultiplext 
wird.
Jedes mal wenn Du also den Wandler auf deinen Messpin legst wird der 
interne sample and hold Kondensator geladen.
Dieser Kondensator ist klein, aber verursacht an schwachen Quellen 
trotzdem Spannungsabfälle die zu Abweichung führen wenn man das nicht 
berücksichtigt.

In Deinem Fall sieht das aber nach Programmierfehler aus.
Der Wert 1287 erfordert mindestens 11bit und der AD Wandler hat nur 10, 
kann also nur Dezimalwerte bis 1024 bzw. Hex 3FF darstellen

von Michelle.E. (Gast)


Lesenswert?

Tcf K. schrieb:
> Nein, ich vermute irgendwas zieht den Pin nach oben, deswegen die
> Frage nach dem Pullup. Der Ausgang des LM35 kann nur Strom gegen GND
> liefern (source), nicht gegen Vcc (sink). Entweder sich den Pin im
> angeschlossenen Zustand mit einem Oszilloskop ansehen oder
> 1k-Pulldown-Widerstand anschließen -- falls es dann funktioniert aber
> die Ursache beheben.

Danke für deinen Hinweis die Spannung hat sich total beruhigt :)
mein Multimeter zeigt jetzt die aktuelle Temperatur an und der AD 
Wandler ist angeschlossen ^^

Leider zeigt mein LCD Display nur 0005 an also denke ich das ich nur was 
am Programm ändern muss das es dann läuft :)

von Pete K. (pete77)


Lesenswert?

- C-Programme werden mit filename.c benannt
- F_CPU Deklaration gehört in das Makefile, damit alle Dateien etwas 
davon haben
- Lass Dir mal den gemessenen Analogwert auf der seriellen Schnittstelle 
ausgeben, dann weisst Du, ob es an der LCD-Ansteuerung oder am LM35 
liegt.
- Zählervariablen werden nicht als float deklariert (float i=25, j=25;)
- Die Schleife wird 26 mal durchlaufen, Du teilst aber durch 25
- Schaltplan wäre nicht schlecht.
- Du benutzt Port D. Ist JTAG ausgeschaltet?
- Sinnvolle Kommentare fehlen: "_delay_ms(500);      //warten"
- Für die String-Formatierung zur Darstellung auf dem LCD schau Dir mal 
sprintf an.

Das soll jetzt nicht despektierlich wirken, aber hast Du Dich mal auf 
Legasthenie untersuchen lassen?

von Michelle.E. (Gast)


Lesenswert?

> Das soll jetzt nicht despektierlich wirken, aber hast Du Dich mal auf
> Legasthenie untersuchen lassen?

ja aber es ist  zu wenig um es wirklich beweisen zu können aber man 
merkt das ich einfach Probleme habe und es wird Jahr zu Jahr besser.

von Tcf K. (tcfkao)


Lesenswert?

Ach so, das wollte ich nicht fragen weil ich nicht sicher war ob Carmen 
oder Mladen schreibt -- bei Nicht-Muttersprachlern sind solche Schnitzer 
verständlich.

von Michelle.E. (Gast)


Lesenswert?

Pete K. schrieb:
> - C-Programme werden mit filename.c benannt
ist nur ein file, das es alle aufmachen können(hoffe ich) im AVR habe 
ich es aber mit filename.c benannt

> - Lass Dir mal den gemessenen Analogwert auf der seriellen Schnittstelle
> ausgeben, dann weisst Du, ob es an der LCD-Ansteuerung oder am LM35
> liegt.
kann nur am LCD oder am AD-Wandler liegen da der LM35 tadellos 
läuft(laut Multimeter)

> - Zählervariablen werden nicht als float deklariert (float i=25, j=25;)
hab jetzt anstatt float, int gewählt
> - Die Schleife wird 26 mal durchlaufen, Du teilst aber durch 25
hab es geändert  dummer Fehler von mir

> - Schaltplan wäre nicht schlecht.
kommt sofort
> - Du benutzt Port D. Ist JTAG ausgeschaltet?
wie kann man ausschalten??
> - Sinnvolle Kommentare fehlen: "_delay_ms(500);      //warten"
wir müssen leider solche sinnvolle Kommentare einfügen sonst punkte 
Abzug
> - Für die String-Formatierung zur Darstellung auf dem LCD schau Dir mal
> sprintf an.
werde ich tun

von Michelle.E. (Gast)


Angehängte Dateien:

Lesenswert?

Hier wäre der Schaltplan:)

von Pete K. (pete77)


Lesenswert?

Michelle.E. schrieb:
> Danke für deinen Hinweis die Spannung hat sich total beruhigt :)
> mein Multimeter zeigt jetzt die aktuelle Temperatur an und der AD
> Wandler ist angeschlossen ^^

Was zeigt denn Dein Multimeter an?

Für die Umrechnung der Spannung in Grad ist im Datenblatt ein Funktion 
enthalten.

von Michelle.E. (Gast)


Lesenswert?

>
> Was zeigt denn Dein Multimeter an?
>
> Für die Umrechnung der Spannung in Grad ist im Datenblatt ein Funktion
> enthalten.

mein Multimeter zeigt 285,6mv an und das wären ja 28,5°C und im Raum 
sind 29°C

von Michael K. (Gast)


Lesenswert?

Michelle.E. schrieb:
> mein Multimeter zeigt 285,6mv an und das wären ja 28,5°C und im Raum
> sind 29°C

5V ist die ADC Referenzspannung
5V / 1024 ist damit der Wert eines Bits (4,88mV)

Dein ADC sollte also dez. 58 (hex 3A) liefern.
Derzeit löst Deine Messung mit 5°C auf.
Deinen vollen ADC Wertebereich nutzt Du so erst bei 500°C.

von Michelle.E. (Gast)


Lesenswert?

Michael K. schrieb:
>
> 5V ist die ADC Referenzspannung
> 5V / 1024 ist damit der Wert eines Bits (4,88mV)
>
> Dein ADC sollte also dez. 58 (hex 3A) liefern.
> Derzeit löst Deine Messung mit 5°C auf.
> Deinen vollen ADC Wertebereich nutzt Du so erst bei 500°C.

Heist das jezt das ich einfach eine andere Refernzspannung brauche?
Oder denke ich da jezt falsch??

von Achim S. (Gast)


Lesenswert?

Michael hat sich bei der einen Angabe um einen Faktor 10 vertan: deine 
Messung löst derzeit 0,5°C auf. Wenn dir das reicht, ist es ok.

Wenn nicht würde eine kleinere Referenzspannung wenig helfen (denn man 
kann sie nicht extrem klein machen). Dann würde man eher die 
Ausgangsspannung des LM35 verstärken.

von Michelle.E. (Gast)


Lesenswert?

Ach so ja das reicht mir:)
Dankeschön:)

aber ich habe immer noch das Problem das ich im Moment einen konstanten 
Wert von 2406 auf meinem LCD Display habe und sich leider auch nichts 
mehr ändert.

Wenn ich das Programm neu Starte dann zuerst 406 an und dann macht er 
die zwei vorne dran.

von Pete K. (pete77)


Lesenswert?

Dann versuche mal nur ein paar Zahlen auf dem LCD auszugeben und 
kommentiere alles andere aus.
Es gibt beim LCD auch eine Funktion setcursor, dann kann man ganz normal 
schreiben. Hast Du schon sprintf ausprobiert? Du musst auch mit 
floating-lib linken.

von Michelle.E. (Gast)


Lesenswert?

also zahlen und texte kann ich alle ausgeben das ist ja kein Problemn :)

von Michael X. (Firma: vyuxc) (der-michl)


Lesenswert?

In deinem Schaltplan hängt AREF in der Luft.

von Michelle.E. (Gast)


Lesenswert?

Michael X. schrieb:
> In deinem Schaltplan hängt AREF in der Luft.

er hängt mit einem Kondensator an masse

von Michael X. (Firma: vyuxc) (der-michl)


Lesenswert?

Ach du nimmst die interne Referenz. Ok. Ist AVCC angeschlossen?

von Michelle.E. (Gast)


Lesenswert?

Michael X. schrieb:
> Ach du nimmst die interne Referenz. Ok. Ist AVCC angeschlossen?

nein eine externe aber man muss ja trotzdem einen Kondensator an Masse 
und AREF setzen und beim AVCC einen Kondensator an Masse und eine Spule 
an die gewünschte Spannung

von Michelle.E. (Gast)


Angehängte Dateien:

Lesenswert?

also Leute ich danke euch für eure Kommentare Tipps und Tricks es 
Funktioniert jetzt ^^

ich freu mich grad so richtig bin an dem Problem schon fast einen Monat 
dran und es läuft ^^

Ich danke euch nochmals^^

ich gebe euch noch meinen Kompleten Ordner mit dem Programm vielleicht 
kann es ja noch jemand gebrauchen, dort ist auch meine Motorsteuerung 
und alles mit vorhanden falls es  jemand brauchen kann.

von S. M. (opusdiabolus)


Lesenswert?

Ja was war es denn?

von Michelle.E. (Gast)


Lesenswert?

S. M. schrieb:
> Ja was war es denn?

GND Potenzial Fehler glaube ich da ich einmal Strom vom USB Kabel 
genommen habe und einmal von einer externen Spannungsquelle.
Jetzt nehme ich nur noch die externe Spannungsquelle.

und im Programm durfte ich den AD wert nur einmal einlesen und Kienen 
Durchschnitt bilden dann musste ich nur noch die eingelesen Spannung mit 
einer Schlussrechnung in Temperatur umwandeln und dann hat es 
funktioniert.

und der LM braucht einen kondensator(100nF) von + nach - und einen pull 
down Widerstand (1kOhm) :)

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.