Forum: Mikrocontroller und Digitale Elektronik STM32F103 Temp.-Sensor anschließen an ADC


von Hans M. (mutzel6)


Lesenswert?

Hallo,

ich beschäftige mich seit ein paar Wochen mit einem STM32F103 
Entwicklerboard und bin auch schon ganz gut voran gekommen (für meine 
Begriffe).
Nun habe ich 2 Potentiometer (5kOhm und 100kOhm) mit Vref + GND 
verbunden und  an ADC1 (Pin A1 und A2) angeschlossen und kann die Werte 
auslesen. Je nach Stellung wird 4096, 0 oder irgendwas dazwischen 
angezeigt, je nach Stellung der Poti's. Die eingestellten Werte 
schwanken dabei um +/- 3, wenn ich nichts ändere.

Nun wollte ich einen einfachen 2-wire analogen Temperatursensor 
auslesen, was aber nicht klappt. Ich weiß nicht, wie ich die 2 Kabel 
anschließen soll. Zwischen ADC und GND/Vref wird immer 0 oder 4096 
angezeigt. Das gleiche passiert, wenn ich zwischen Vref und GND einen 
Widerstand klemme und dann den Sensor zusätzlich an ADC und GND/Vref.

Schließe ich nur ein Potentiometer an, ändert sich der 2. Wert bei 
Veränderung mit (aber nicht, wenn ich beide Poti's anklemme!). Wenn ich 
beide Anschlüsse frei lasse, schwankt A1 permanent stark zwischen 1.000 
und 2.900, A2 deutlich weniger stark zwischen 2.600 und 2.800. Was  mich 
auch irgendwie wundert.

Kann mir jemand erklären, was da nicht stimmt? Geht es überhaupt, einen 
2-Draht-Sensor ohne Zusatzschaltung zu lesen? Deutet das Verhalten auf 
einen Fehler in meinem Programm? Dann würde ich als nächstes natürlich 
den Code beisteuern.

Vielen Dank für Eure Hilfe!

von Arduino Badboy (Gast)


Lesenswert?

Hans M. schrieb:
> Nun wollte ich einen einfachen 2-wire analogen Temperatursensor
> auslesen, was aber nicht klappt.

Und welcher das ist bleibt ein Geheimnis. Das darf auf
keinen Fall verraten werden.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Wenn das was vom Typ NTC oder PTC ist, musst du diesen in einen 
Spannungteiler integrieren. Nehmen wir mal an, das du da einen 10k NTC 
hast, dann legst du den z.B. zwischen VRef und ADC und von ADC nach GND 
einen 10k Widerstand.
Dann liegt bei der Nominaltemperatur des NTC (meistens 25°C) genau die 
halbe VRef am ADC. Steigt die Temperatur, wird die Spannung am ADC 
höher.

von Stefan F. (Gast)


Lesenswert?

Schau Dir mal das Beispiel in diesem Büchlein in Kapitel 11.4 an.
http://stefanfrings.de/mikrocontroller_buch2/index.html

Und das hier wäre auch noch von Interesse:
http://www.electronicdeveloper.de/MesstechnikNTCLinearR.aspx

Für sachdienlichere Hinweise wäre es nötig, zu wissen, welchen konkreten 
Sensor du meinst. Es gibt nämlich nicht nur einen, nicht 10, nicht 
hundert, sondern tausende die sehr unterschiedlich funktionieren.

von Jim M. (turboj)


Lesenswert?

Hans M. schrieb:
> Kann mir jemand erklären, was da nicht stimmt? Geht es überhaupt, einen
> 2-Draht-Sensor ohne Zusatzschaltung zu lesen?

Das kommt darauf an(tm). Einige NTC Typen könnten man vermutlich mit 
Hilfe des internen Pullups auslesen - bekommt dann aber natürlich keine 
ernstzunehmende Genauigkeit hin.

P100 und P1000 gehen AFAIK nicht ohne Verstärkerschaltung und 
4-Leitermessung.

von Hans M. (mutzel6)


Lesenswert?

Tausend Dank an alle!

Ich habe die Sensoren nicht benannt, da mein Problem nicht die 
Umwandlung der Werte war, sondern "irgendeine" nachvollziehbare Reaktion 
zu erzielen. Ich habs jetzt nach  Matthias's Hinweis geschaltet und es 
funktioniert. Vielen Dank für die einfache Erklärung!

Ich habe einen PT500 probiert und einen "noName" Temperatursensor aus 
einem PC-Gehäuse. Der PT500 hat (wer hätt's gedacht ;-) bei 
Raumtemperatur um 550Ohm, der andere Sensor um 12kOhm.

Testweise, und wens interessiert: ich hab die Poti's mal auf ~500 Ohm 
und ~12kOhm eingestellt und lt. Matthias mit dem Sensoren angeklemmt 
(nacheinander, nicht 500Ohm und 12kOhm gemeinsam). Damit ist dann 
jeweils eine deutliche und nachvollziehbare Änderung zu merken, wenn ich 
die Sensoren anfasse. Beim PT500 kann ich mit meinem Aufbau 
(Temperaturänderung < 15°) eine Veränderung um etwa 45 "messen", was bei 
einer Spanne von 0-4095 nicht viel ist (der noName Sensor ist da um 
Größen "flexibler").

Nach dem Kommentar von Jim Meba werde ich mal interessehalber versuchen, 
ob ich ohne Zusatzschaltung vernünftige Messungen hinbekomme, wenn ich 
die Durchschnittswerte von 30 sek. oder so auswerte.

Vielen Dank an nochmal!

ach so: und vielen Dank für den Link auf das Buch. Das ist ja toll. Ich 
denke, heute wird's nichts mit zeitig Bettl gehen :-)

: Bearbeitet durch User
von Jim M. (turboj)


Lesenswert?

Hans M. schrieb:
> Nach dem Kommentar von Jim Meba werde ich mal interessehalber versuchen,
> ob ich ohne Zusatzschaltung vernünftige Messungen hinbekomme, wenn ich
> die Durchschnittswerte von 30 sek. oder so auswerte.

Eher nicht. Die Pullups sind furchtbar ungenau, und alle Schwankungen 
von VCC schlagen voll auf die Messung durch.

Da ist mit Sicherheit die interne Temperaturdiode genauer - und die 
misst bei aktivem µC die meistens um 5-10°C wärmere 
Sperschicht-Temperatur.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Jim M. schrieb:
> Eher nicht. Die Pullups sind furchtbar ungenau, und alle Schwankungen
> von VCC schlagen voll auf die Messung durch.

Die Frage ist, welche Density das Gehäuse hat. Wimre haben zumindest die 
HighDensity beim STM32F103 auch getrennte VRef Pins. Sonst ist es Vcc, 
die dann natürlich besonders sauber sein sollte - wobei die absolute 
Höhe den Fehler nicht so beeinflussen sollte.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Hast an Vref eigentlich auch eine Referenz-Spannungsquelle 
angeschlossen?

Ein Poti hat 3 Anschlüsse. Ich habe dich so verstanden, dass du sie so 
angeschlossen hast:
1
Vref o------[====]-------| GND
2
              ^
3
              |
4
              o
5
          ADC Eingang

Nun ist der Vref Pin aber kein Ausgang für irgendwelche Lasten. Er ist 
dazu gedacht, entweder einen stabilisierenden Kondensator anzuschließen 
oder mit einer externen Spannungsquelle verbunden zu werden. Mehr dazu: 
http://www.st.com/content/ccc/resource/technical/document/application_note/group0/3f/4c/a4/82/bd/63/4e/92/CD00211314/files/CD00211314.pdf/jcr:content/translations/en.CD00211314.pdf 
Seite 23.

Richtig wäre es also so:
1
               10nF
2
Vref o---+---||----------|
3
         |                   (optional)
4
         +---||----------|
5
               1µV    
6
7
3,3V
8
VDDa o------[====]-------| GND
9
              ^
10
              |
11
              o
12
          ADC Eingang

Oder so:
1
Referenzquelle
2
z.B. 2V   o---+-------------------o Vref
3
              |
4
              +------[====]-------| GND
5
                       ^
6
                       |
7
                       o
8
                  ADC Eingang


> ich hab die Poti's mal auf ~500 Ohm und ~12kOhm eingestellt
> und lt. Matthias mit dem Sensoren angeklemmt

Da kann man mit Phantasie alles rein interpretieren. Die Sprache der 
Elektronik nennt sich "Schaltplan". Bitte zeichne einen. In meinem oben 
empfohlenen Büchlein habe ich vorgeführt, wie ein vereinfachter aber 
ausreichender Schaltplan aussehen kann. Das bekommt jeder hin, ohne das 
Fach gelernt oder studiert zu haben.

Ein Foto von einer Bleistiftzeichnung wäre schon 10x besser, als Prosa.

So kann es funktionieren:
1
         Fühler    Festwiderstand       (oder anders herum)
2
VDDa o---[===]---+---[===]-------| GND
3
                 |
4
                 |
5
                 o
6
             ADC Eingang

von Hans M. (mutzel6)


Lesenswert?

Vielen Dank, Stefan, für Deine Erklärungen.

Ich dacht Vref ist die "Referanzspannung", die der Controller definiert 
und damit genau messen kann. Ich habe meine Versuchsschaltung jetzt auf 
VDDa umgestellt.

Wegen der Darstellung hast Du natürlich Recht. Aber die Erklärung von 
Matthias und meine Ausführungen fand ich als relativ einfach bzw. 
einfach genug, um keinen großen Spielraum zuzulassen.

Ich habe nun die Schaltung so aufgebaut (wie Du zuletzt beschrieben hast 
;-):
1
                      Poti
2
         Fühler     -[===]-------| GND
3
 VDDa o---[===]--+-----|
4
                 |
5
                 o
6
             ADC Eingang

Das funktioniert auch. Allerdings wundert mich nach wie vor, dass 
Eingang 2 sich mit Eingang 1 ändert, wenn ich an 2 nichts anschließe. 
Gibts dafür eine Erklärung?

... und DU hast also das "Büchlein" geschrieben. Coole Sache das! Ich 
hab den Einstieg noch recht schnell überflogen, aber spätestens mit der 
Erklärung der Register, wird es für mich interesant. Mein größter 
Respekt vor Deiner Mühe!

Vielen Dank!

von Stefan F. (Gast)


Lesenswert?

> Ich habe nun die Schaltung so aufgebaut

Irgendwas stimmt bei deiner Zeichnung nicht. jetzt hängt das Poti ja am 
linken Ende in der Luft und der ADC Eingang ist nach GND 
kurzgeschlossen.

> Allerdings wundert mich nach wie vor, dass
> Eingang 2 sich mit Eingang 1 ändert, wenn ich an 2 nichts anschließe.

Offene Eingänge haben zufällige Spannungspegel. Ein gewisses 
Übersprechen von Kanal zu Kanal ist in diesem Fall normal. Im 
Referenzhandbuch oder Datenblatt wird deshalb ein gewisser minimaler 
Eingangswiderstand empfohlen.

> spätestens mit der Erklärung der Register, wird es für mich interesant.

Das Büchlein ist aber wirklich nur ein Einblick. Der Chip kann viel viel 
mehr, als dort beschrieben ist.

von Hans M. (mutzel6)


Lesenswert?

Stefan U. schrieb:
> Irgendwas stimmt bei deiner Zeichnung nicht. jetzt hängt das Poti ja am
> linken Ende in der Luft und der ADC Eingang ist nach GND
> kurzgeschlossen.

Ja, ich hab die Poti (bzw. dort das eine) so eingestellt, wie die 
Nennwiderstände der Sensoren. Also auf 500Ohm bzw. 12k. Die dienen mir 
jetzt als Festwiderstand, zum ausprobieren, da das am schnellsten zu 
machen war. Ich hab die Einstellung spaßeshalber vorher mit der alten 
Schaltung errechnet, dann am Controller den Wert eingestellt. Und siehe 
da, beim nachmessen stimmte es sogar.

Stefan U. schrieb:
> Das Büchlein ist aber wirklich nur ein Einblick. Der Chip kann viel viel
> mehr, als dort beschrieben ist.

Klar, ich habe ja auch schon "viel mehr" damit gemacht. Aber eher in 
Richtung programmieren. Da ist ein Diplay mit Touch dran, für das ich 
mir eben eine Grafikbibliothek baue. Ich habe auch RTC aktiviert mit 
Backup-Register, Uhr und Kalender (samt grafischer Einstellung) dazu 
geschrieben und jetzt bleibt die Zeit dank Batterie sogar ohne Strom 
erhalten. Da bin ich stolz drauf ;-)

Als nächstes möchte ich eben an den Eingängen div. Temperaturen 
auslesen, die Berechnungsvariablen im Backup ablegen, damit ich auch 
andere Sensoren "errechnen" kann ohne neu zu kompilieren und dann ein 
paar Ausgänge schalten.
Es gibt noch viel zu tun :-) und ich werde sicher noch ein paar mal hier 
Anfängerfragen stellen.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Stefan U. schrieb:
> Offene Eingänge haben zufällige Spannungspegel. Ein gewisses
> Übersprechen von Kanal zu Kanal ist in diesem Fall normal.

Das ist nicht Übersprechen, sondern die Ladung des Speicherkondensators 
(Sample & Hold). Dieser wird vom Eingangswahlschalter gespeist 
(Multiplexer) und während des ADC Messzyklus vom Eingang getrennt und 
vom ADC abgetastet.

Schaltet man dann den Eingang um, liegt es bei der Quelle an diesem 
Eingang, den S&H Kondensator auf die neue Ladung zu bringen. Ist der 
Eingang offen, passiert nichts mit der Ladung und sie bleibt auf dem 
alten Wert.
Das ist auch der Grund, warum ADC Quellen niederohmig sein sollten, so 
wird der Kondensator schnell umgeladen.

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.