Hallo zusammen.
Ich habe vor einen variablen Widerstand (0-180 Ohm) an einem ADC Port
eines ATMega32 auszulesen. Hatte mir vorgestellt das mit einem
Spannungsteiler zu realisieren.
Mein Problem bezieht sich darauf das der Widerstand von Haus aus mit
Masse verbunden ist (Sensor) und sich für mich dann nur die eine
Möglichkeit des Spannungsteilers ergibt.
1
+5V ----RRRRRR----o----RR(0-180 Ohm)RR----GND
2
|
3
|
4
ADC
Sieht in meinem Kopf ungefähr so aus.
Doch jetzt entsteht das Problem das der Wert nie den ganzen Bereich des
ADC erreichen würde? Wie lese ich diesen dann richtig aus? Habe bis
jetzt immer nur den ganzen Bereich des ADC verwendet. Oder gibt es eine
andere Schaltung die man dafür verwenden könnte?
Ich wäre über jede Hilfestellung dankbar.
Ps. Der Messwert muss nicht der genaueste sein er dient nur der
Orientierung. Und ich programmiere in Bascom
Karl schrieb:> Doch jetzt entsteht das Problem das der Wert nie den ganzen Bereich des> ADC erreichen würde?
Das kommt drauf an.
Wenn du den Spannungsteiler 'oben' an 5V legst und dich an die übliche
Gepflogenheit hältst, dass der 2.te Widerstand ebenfalls 180Ohm hat, dan
erreichst du am Spannungsteiler maximal die Hälfte der Spannung. Also
2.5V
Jetzt könnte man natürlich das obere Ende des Spannungsteilers auch an
10V legen und kriegt so dann am Abgriffpunkt eine Spannung im Bereich 5V
bis 0V.
Anstatt da mit 10V zu hantieren, könnte man natürlich dem ADC auch eine
andere Referenzspannung geben. Wenn man dem ADC als Referenz die 2.5V
vorgibt, dann löst er den Spannungsbereich von 0 bis 2.5V wieder in
seiner maximalen Auflösung auf.
ALternativ könnte man auch die Spannung am Spannungsteiler mit einem
Faktor von 2 multiplizieren (OpAmp als Verstärker) und hat dann auch
wieder einen Spannungsbereich von 0 bis 5V
Oder aber man könnte einfach mal durchrechnen, ob man mit dem halben
Wertebereich des ADC durchkommt, weil die damit ermittelten
Widerstandswerte immer noch genau genug sind.
Wie Karl Heinz schon geschrieben hat: wenn der Verlust von 1 Bit an
Auflösung akzeptabel ist, dann kannst du einfach mit dem halbierten
Spannungsbereich leben. Du solltest dann auch noch prüfen, ob der Strom
durch deinen Sensor nicht zu groß werden kann (nicht jeder resistive
Sensor mag Ströme > 10mA).
Falls der große Strom dich doch stören sollte und du keinen "externen"
OPV-Verstärker nutzen willst, kannst du den Vorwiderstand des Teilers
auch größer machen, so dass am Sensor nur max. 0,5V abfallen. Dann gibst
du den Sensor differentiell auf den ADC des ATMega und schaltest dessen
interne Verstärkung auf x10. (Dabei verlierst du allerdings auch wieder
ein Bit an Auflösung, weil der differentielle Eingangsbereich dann von
+Vref bis -Vref reicht).
Danke ihr zwei für die schnellen Antworten.
Leider kommt die Anpassung der Referenzspannung nicht in frage da ich
noch andere Kanäle mit 5V messe und ich den bereich gerne lassen würde.
(aber darauf hätte ich eigentlich auch kommen können..)
Ich habe auch eine 9V Spannungsquelle zur verfügung die könnte man ja
als Quelle nehmen und dann den ersten Spannungsteiler Widerstand auf
180ohm nehmen. Würde zwar nur ca. 4,5v maximal sein aber für mich würde
es reichen.
Achja.. ist es vielleicht eine gute idee noch eine Z Diode
dazuzuschalten einfach nur um sicher zu sein?
Ich werde mir auch mal anschauen wie das mit den Verstärkern geht (habe
ich noch nie verwendet)
Ich danke erstmal für die Hilfestellung.
Moinsen...
"Leider kommt die Anpassung der Referenzspannung nicht in frage da ich
noch andere Kanäle mit 5V messe und ich den bereich gerne lassen würde.
(aber darauf hätte ich eigentlich auch kommen können..)"
Kannst du trotzdem, indem du zur Laufzeit per Code die jeweils zum Kanal
passende Referenz von Acc_5V, Ref._intern, oder Ref._extern
einstellst...
Servus
"Kannst du trotzdem, indem du zur Laufzeit per Code die jeweils zum
Kanal passende Referenz von Acc_5V, Ref._intern, oder Ref._extern
einstellst..."
Das ist natürlich auch eine gute Variante.
Hab das alles immer vor dem eigentlichen Programm eingestellt.
Ich habe noch nicht soviel erfahrung mit Programmieren. Aber dank der
Denkanstöße hier fällt das dazulernen auf jeden fall leichter.
Karl schrieb:> Leider kommt die Anpassung der Referenzspannung nicht in frage da ich> noch andere Kanäle mit 5V messe und ich den bereich gerne lassen würde.> (aber darauf hätte ich eigentlich auch kommen können..)
du könntest mit einem Multiplexer externe REF anschalten nach Bedarf,
aber
Simpel schrieb:> Kannst du trotzdem, indem du zur Laufzeit per Code die jeweils zum Kanal> passende Referenz von Acc_5V, Ref._intern, oder Ref._extern> einstellst...
ist noch besser, es gibt AVR mit 1,1V Ref intern das dürfte mit größerem
Vorwiderstand an 5V zu deinen 180 Ohm die bessere Auflösung geben als
nur 1/2.
Schon bei Uref 2,56V hast du mit Rv 180 Ohm die volle Auflösung wenn der
Strom nicht stört.
Der ATMega32 hat ja eine Referenzspannung von 2,56V. Also müsste ich
quasi nur am Anfang jeder Messung die config des ADC`s machen?
Habe hier mal einen kleinen Entwurf gemacht.
(Die Befehle Text2s Konvertieren den Wert in ein für ein Display gut
darstellbares Format und "Call Createtxt" und "Call Displaytxt" geben
den Eingelesenen Wert an ein Display weiter)
Sub Messung
Config Adc = Single , Prescaler = Auto , Reference = Internal
Start Adc
Wert = Getadc(2) 'KanalEingang
Text2s = Fusing(Wert , "#.&")
Text2s = " " + Text2s + " ^C"
Call Createtxt
Call Displaytxt
Stop Adc
End Sub
Würde das so funktionieren? Da müsste ich die config Zeile ja vor jede
Messung schreiben?
Karl schrieb:> Würde das so funktionieren? Da müsste ich die config Zeile ja vor jede> Messung schreiben?
kA
ich bin nicht der BASCOM Kenner, aber bei
Karl schrieb:> Reference = Internal
fehlt da nicht welche? es gibt doch mehr als eine?
m32 schaue aber jetzt nicht ins Datenblatt
kannst auch nur REF einstellen und ein Dummyload mchen
wenn du die 5V gleichzeitig als Versorgung für den Spannungsteiler und
als Vref verwendest, machst du eine ratiometrische Messung: Drifts und
Ungenauigkeiten der 5V wirken sich dann nicht auf dein Messergebnis aus.
Wenn du den Spannungsteiler mit 5V versorgst, aber als Vref eine davon
unabhängige Spannung wählst, fällt dieser Vorteil weg. Ein Fehler von 5%
bei der 5V Versorgung ergibt dann einen Fehler von 5% in deinem
Messergebnis. Dieser Nachteil kann sehr schnell der Vorteil von 2 Bit
zusätlicher Auflösung überwiegen.
5% Fehler hast du bei Allerweltsspannungsreglern übrigens schnell
beisammen.
ok ich werde die variante wählen
Achim S. schrieb:> wenn du die 5V gleichzeitig als Versorgung für den Spannungsteiler und> als Vref verwendest, machst du eine ratiometrische Messung: Drifts und> Ungenauigkeiten der 5V wirken sich dann nicht auf dein Messergebnis aus.
Danke an alle für die Hilfestellung.
Karl schrieb:> Ps. Der Messwert muss nicht der genaueste sein er dient nur der> Orientierung.
Warum schreibst Du nicht, wie genau es sein sollte? :-(
Der ATmega32 hat vor seinem ADC einen Verstärker (x200), den Du
unbedingt nutzen solltest. Bei Vref = 5 V wären max. 25 mV Meßspannung
notwendig. Die Genauigkeit wird vermutlich bei max. 7-8 Bits liegen,
aber für ein 1% Ergebnis ist das ausreichend. Eine ratiometrische
Messung bleibt ja weiterhin möglich.
Die zuvor genannten Meßverfahren verbrauchen mir viel zu viel Strom.
Irgendwo stehen auch 9 V, weshalb ich einen Batteriebetrieb vermute. Da
ist geringe Stromaufnahme m.E. schon wichtig.
m.n. schrieb:> Warum schreibst Du nicht, wie genau es sein sollte? :-(
Also die Genauigkeit die ich eingestellt habe/haben will liegt bei 0,1.
Also z.b "5,4°C" oder "12,8°C"
zur Versorgung:
m.n. schrieb:> Die zuvor genannten Meßverfahren verbrauchen mir viel zu viel Strom.> Irgendwo stehen auch 9 V, weshalb ich einen Batteriebetrieb vermute. Da> ist geringe Stromaufnahme m.E. schon wichtig.
Verbaut ist momentan ein Spannungsregler der die 9V zu Verfügung stellt.
Also Stromverbrauch ist nicht so wichtig.
Karl schrieb:> Also die Genauigkeit die ich eingestellt habe/haben will liegt bei 0,1.> Also z.b "5,4°C" oder "12,8°C"
Das ist aber ganz schön kalt, macht aber nichts, da der Widerstand bei
höheren Meßströmen gut aufgewärmt wird ;-)
Wieder verräts Du nicht Alles. Welchen Meßbereich bildet denn die
Widerstandänderung von 0 - 180 Ohm ab?
Bei 0 - 20 °C kann man die Sache entspannter sehen, bei -50 - 200 °C
nicht mehr.
Such hier im Forum nach PT100 oder PT1000. Da ist schon jede Menge dazu
geschrieben worden.
Ganz so kalt wirds leider nicht :) war ja nur ein Beispiel für die
Formatierung.
m.n. schrieb:> Wieder verräts Du nicht Alles. Welchen Meßbereich bildet denn die> Widerstandänderung von 0 - 180 Ohm ab?
Sorry mein Fehler,
habe nochmal ins Datenblatt geschaut.
Der Sensor misst von 0-150°C und verwendet dabei eine Auflösung von 10 -
184 Ohm.
Wie gesagt wenn ich an die 0,1 komme wäre es schon gut.
Ich kann leider bauartbedingt nicht auf einen anderen Sensor ausweichen
sonst wäre ein PT100 oder PT1000 eher meine Wahl gewesen.
Karl schrieb:> Der Sensor misst von 0-150°C und verwendet dabei eine Auflösung von 10 -> 184 Ohm.> Wie gesagt wenn ich an die 0,1 komme wäre es schon gut.
Das ist doch schon einmal gut, da klar wird, daß der 10 Bit ADC eines
ATmega32 diesen Dynamikbereich (10,0 - 150,0) nicht bietet;-)
> Ich kann leider bauartbedingt nicht auf einen anderen Sensor ausweichen> sonst wäre ein PT100 oder PT1000 eher meine Wahl gewesen.
Aber auch da hättest Du das Problem der Eigenerwärmung, daß sich bei 0,1
K Auflösung schon deutlich bemerkbar macht.
Einige hier schwören auf einen hochauflösenden ADC (MCP3551), mit dem am
Sensor nur ein paar Millivolt Spannungsabfall gemessen werden und seine
Verlustleistung daher klein bleibt. Eine Signalverstärkung ist nicht
notwendig.
Eine andere Möglichkeit wäre, mit einem etwas höheren Spannungsabfall am
Sensor zu arbeiten, diesen zu verstärken und per schnellerem 12 Bit ADC
(MCP3201) auszulesen. Hierbei wird der Sensor nur mit einem
Tastverhältnis <= 1% gemessen, wodurch die Eigenerwärmung minimiert
wird. Sobald mehrere Kanäle gemessen werden sollen, ist dies die
kostengünstigere Variante. Hier ein Beispiel:
Beitrag "Temperatursensor KTY81 am ATmega328 (Arduino UNO), 1-6 Kanäle"
Wichtig: in beiden Fällen sollte ratiometrisch gemessen werden!
Eine Schaltung dazu, die entsprechend angepaßt werden muß und noch den
ADC braucht: Beitrag "Re: PT1000 Schaltung / Programmierung"