Messen Sie die Innentemperatur des ATmega168PA, während Sie andere ADC-Kanäle bei einer 5-V-Referenz verwenden

Ich habe ein Gerät, das kontinuierlich den Wert von 3 Sensoren misst, die an 3 ADC-Pins angeschlossen sind und mit einer 5-V-Referenz arbeiten, daher habe ich zwei Optionen für die Auswahl der Spannungsreferenz:

  1. Anschließen des AREF-Pins an die 5-V-Versorgung (REFS = 00)
  2. Verbinden Sie AREF mit einem 100-nF-Kondensator und wählen Sie AVcc als Referenz (REFS=01)

Bis hier funktioniert alles einwandfrei. Ich möchte auch die Chiptemperatur mit dem internen Temperatursensor (ADC8) messen, und wie im Datenblatt angegeben, muss ich die interne Spannungsreferenz von 1,1 V auswählen, sodass die ersten oben genannten Optionen nicht verwendet werden können. Wenn ich die zweite Option wähle und 1,1 auswähle Die V-Referenz, während der Kondensator mit 5 V geladen ist (aufgrund anderer Pin-Messungen), und die erneute Auswahl der AVcc-Referenz verursacht keinen Fehler bei der ADC-Messung? Ich beschloss, den internen Temperatursensor zu lesen, ohne die Referenzspannung auf 1,1 V zu ändern. Also habe ich 50 Proben gelesen und die Summe auf 11 geteilt (weil ich eine 5-V-Referenz anstelle von 1,1 V verwendet habe), aber das Ergebnis ist ungefähr 0x170 (~ 76 ° C), was falsch ist.
Wer kann mein Problem lösen?

Antworten (2)

Ja, das Umschalten der Referenz auf intern führt zu einem Fehler, da der externe Kondensator immer noch auf AVcc geladen ist und auf die Entladung auf die interne Referenz gewartet werden muss.

Das Datenblatt besagt jedoch, dass Sie nach dem Ändern der Referenz nur die erste Probe entladen müssen. Daher ist es genauer und schneller, nur die Referenz zu ändern und möglicherweise einige Proben zu verwerfen, als 50 Mal die Probentemperatur mit der falschen Referenz zu versuchen.

Wie das Datenblatt des Mikrocontrollers sagt, muss der interne Temperatursensor kalibriert werden. Ich dachte, der von einem unkalibrierten Sensor gemessene Wert weicht nur um wenige Grad vom realen Wert ab. Als ich im Internet recherchierte, stellte ich fest, dass dieser Unterschied fast 60 Grad betragen kann ( https://www.avrfreaks.net/forum/atmega328-temperature-sensor ). Damit ist das Problem der großen Differenz zwischen gemessenem und tatsächlichem Wert gelöst.
Wie ich in der Frage beschrieben habe, kann das Ändern der ADC-Referenzspannung andere Probleme verursachen. Ist es wirklich notwendig, es zu ändern? Was passiert, wenn ich den internen Temperatursensor mit einer 5-V-Referenz anstelle von 1,1 V lese? Ich habe es getestet, indem ich 50 Proben bei einer Referenz von 1,1 V genommen und in Millivolt umgewandelt habe (SamplesSum * 1100 / 50 / 1023) einmal und 50 Abtastungen bei 5 V Referenz nehmen, um sie SamplesSum * 5000 / 50 / 1023ein anderes Mal in Millivolt ( ) umzuwandeln. Das Ergebnis ist das gleiche und es ist nur ein kleiner Fehler aufgetreten, da die Messung mit einer 1,1-V-Referenz genauer ist als eine 5-V-Referenz, die leicht durch den Kalibrierwert korrigiert werden kann.
Und schließlich, um den Code einfacher zu machen und nur eine 16-Bit-Ganzzahl zum Speichern von Werten zu verwenden, habe ich 44 Samples genommen und die Summe aller Samples durch 9 ( SamplesSum * 5000 / 44 / 1023 = SamplesSum / 9) geteilt. Das Ergebnis für meine MCU ist die Temperatur in Grad Celsius + 380 (Mein MCU-Kalibrierungswert ist 380 - 273 = 107). Ich habe 44 Proben genommen, weil die erwähnten Berechnungen den kleinsten ganzzahligen Rundungsfehler haben.