Hi, ich versuche die Temperatur mit Hilfe von LM335-Baustein am ADC zu messen aber bekomme ganz falsche Ergebnisse. mit einem Timer messe ich alle 20 us den Wert am ADC und speichere es in einem Array. Wenn ich mir die Werte anschaue: 48780 48784 48791 46747 ... Das Problem ist, es ergibt eine Temperatur von ca. 39 °C ( Vref: 3,3 V; ADC: 12 Bit -> 48780 *3,3 V / 2^12 ~ 39) und das kann einfach nicht sein. Im zimmer kann es nicht wärmer als 25°C sein. Wenn ich die Gleichung ansehe, dann fällt mir auf dass die Einheit Volt rauskommt. Wie ist die Umrechnung in °C? letzte Frage: interne Vref ist 3,3 V. Wie/wo kann ich sehen, dass wirklich Vref=3,3V genommen wird? Gruß Cimbomgs
>Wenn ich die Gleichung ansehe, dann fällt mir auf dass die Einheit Volt >rauskommt. Wie ist die Umrechnung in °C? umrechnung ist 10mV/K also bei 25Grad Raumtemperatur 2.98V (273+25) * 10mV = 2.98V Gruss Helmi
Ein 12bit ADC liefert Werte von 0..4096. Zumindest wenn das Ergebnis rechtsbündig im Register liegt. Der LM335 liefert 10mV pro K, das sind 2,73V bei 0°C. Und ca. 3,3V bei 30°C. Wenn er kann. Wenn du also nicht grad am Nordpol lebst, sind 3,3V am obere Ende des Widerstands am LM335 zu wenig. Und wie schon richtig feststellst, kommt bei Volt/N immer noch Volt raus, nicht Temperatur. Bei 2,73V sollte der ADC 2,73V/3,30V * 4096 = 3388 anzeigen.
hmmm.. ADC dürfte doch garnicht mehr anzeigen als die Referenzspannung. Warum bekomme ich einen Wert von 39 V :-( ?
Fang mal vorne an und finde raus, wie du den ADC dazu bringst, Werte im
Bereich 0-4095 zu liefern. Oder alternativ eine saubere Begründung,
warum nicht. Vorher ist Herumraterei witzlos.
> Warum bekomme ich einen Wert von 39 V :-( ?
Hast du dir selber schon beantwortet.
Eben, wie sieht denn z.b. die Routine aus um den Wert einzulesen. Hast du evtl ne Schleife um nen Mittelwert zu bilden? Oder kommen die Werte unmittelbar vom ADC?
> Oder kommen die Werte unmittelbar vom ADC?
die Werte kommen vom ADC.
ich benutze einen Freescale Microkontroller und die Entwicklungssoftware ist CodeWarrior. Unter CodeWarrior gibt es die Eigenschaft "Processor Expert", was mir den Code für Pins,Timer,ADC usw. selber erzeugen kann. Dann brauche ich nur in meinem Hauptprogramm die gewünschte Funktion zu aktivieren/deaktivieren. Temperatur-Sensor ist am GPIOC5/ANB1 angeschlossen. Ich aktiere den ADC-Kanal und hole den Wert. Wenn ich mir den Wert in Binär ansehe, dann sind die untersten 4 Bits immer 0. Also gehe ich davon aus, dass die Bits linksbündig in das Register gespeichert werden. Ich finde nirgends die Auswahlmöglichkeit zwischen links-/rechtsbündig :-(
Hmm ich glaube du bist auf dem richtigen Weg. Hab gerade mal nen Wert von dir genommen, die untersten 4 Stellen weggelassen und nach deiner Rechnung umgewandelt. Kam damit auf etwa 24-25°C
Achja, ich hab bei mir beim CodeWarrior nur die Wahl zwischen 8-oder 10-Bit rechtsbündig.
wie bist du auf 24-25°C gekommen? Wenn die unteren 4 Bit weggelassen werden, bleibt die Zahl 3048 3048 *3,3 V / 2^12 = 2,45 V 2,45 V / 10 mV = 245 K -> -28 °C http://img89.imageshack.us/img89/5637/adctg3.jpg Auf dem sind die Pin-Einstellungen zu sehen. Ps.: Wie kann man hier Bilder einfügen?
hmmm.. ich habe den Sensor mit Heisluftpistole erhitz aber es zeigt immer den selben Wert an. Irgendetwas ist hier faul aber ich komme nicht drauf :-( Ps.: ich vermute die Bilder kann man nur als "Dateianhang" einfügen
eine Frage zu Referenzspannung: wird die Referenzspannung Low/High vom Mikrocontroller eingestellt, dh. ist V_ref_LOW intern auf 0 Volt eingestellt und V_ref_High entsprechend auf 3,3 V? Oder muss ich 2 Ports nehmen und das eine mit GRND und das andere mit einer Referenzspannung von 3,3 V verbinden und die Ports konfigurieren damit der Mikrocontroller die Referenzspannung hat?
Cimbom Bom wrote: > wie bist du auf 24-25°C gekommen? Hmm, ja stimmt..hab mich wohl beim abtippen vertan. >wird die Referenzspannung Low/High vom Mikrocontroller eingestellt, dh. >ist V_ref_LOW intern auf 0 Volt eingestellt und V_ref_High entsprechend >auf 3,3 V? Laut Block Diagram meines Datenblattes wird VrefL und VrefH direkt von Vss und Vdd abgezweigt.
hmm.. laut Datenblatt ist bei mir anders: ---- 2.6.1.1 Single-Ended Samples The ADC module performs a ratio metric conversion. For single ended measurements, the digital result is proportional to the ratio of the analog input to the reference voltage in the following diagram. Single Ended Value = round ((VIN – VREFLO)/(VREFH – VREFLO) × 4096 × 8) VIN = Applied voltage at the input pin VREFH and VREFLO = Voltage at the external reference pins on the device (typically VREFH = VSS and VREFLO = VDD) NOTE: The 12-bit result is rounded to the nearest LSB. The ADC is a 12-bit function with 4096 possible states. However, the 12 bits have been left shifted three bits on the 16-bit data bus so its magnitude, as read from the data bus, is now 32760. ---- hab auch die Port so eingestellt, dass VrefLO auf GRND und VrefH auf Vss liegt. Vernünftigen Wert bekomme ich trotzdem nicht. So langsam drehe ich durch :-$
>VREFH and VREFLO = Voltage at the external reference pins on the device
Hast du denn da irgendeine externe Beschaltung an den entsprechenden
Pins?
ja habe ich.. habe auch die Spannung am T-Sensor gemessen, funktioniert alles. Wenn ich erhitze, steigt die Spannung. Wie ist es eigentlich, wieviel Zeit braucht der ADC für die Abtastung? Wo kann ich abfragen, wann die Messung fertig ist?
@ Cimbom Bom (cimbomgs) >Wie ist es eigentlich, wieviel Zeit braucht der ADC für die Abtastung? Steht im Datenblatt und hängt von deiner Einstellung des ADC ab. >Wo kann ich abfragen, wann die Messung fertig ist? Sicher, da gibt es Statusbits in den ADC Registern. Die MUSST du sogar abfragen. MFG Falk
Laut deinem Bild von oben benötigt die Abtastung 0.531µs...bischen kurz wie ich finde..wären ja knapp 2MHz?!? Also ich kann bei ir für den ADC ne Interrupt Routine festlegen.
Achso und ja, es gibt in nem Statusregister auch ein entsprechendes bit.
Daniel Dyla wrote: > Laut deinem Bild von oben benötigt die Abtastung 0.531µs...bischen kurz > wie ich finde..wären ja knapp 2MHz?!? wenn die ADC-AbtastFrequenz 5,33 MHz ist, ist 2 MHz ja kein Problem.
Ok ich habe die Conversion-Time erhöht UND JETZT GEHT'S. Verstehe ich nicht, bei 5,33 MHz dürfte es doch kein Problem sein oder sehe ich das falsch?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.