Wie genau ist die interne Referenzspannung von AVR-Microcontrollern?

Seitenübersicht



 www.schramm-software.de

Die meisten Mikrocontroller-Typen der AVR-Serie enthalten einen Analog-Digital-Wandler (analog to digital converter, ADC). Wie schon im ADC-Test beschrieben, ist der ADC sicherlich eine der interessantesten Komponenten eines Microcontrollers, da er es erlaubt, über die elektrische Spannung zumindest indirekt eine Vielzahl physikalischer Größen zu messen und der weiteren programmtechnischen Verarbeitung zugänglich zu machen.

Was hat es mit der Referenzspannung auf sich?

Die Messung ermittelt die an einen Chip-Pin angelegte (oder eventuell auch intern geschaltete) Spannung als relativen Anteil einer feststehenden (höheren) Spannung, der so genannten Referenzspannung. Je nach Controller-Typ lassen sich mehr oder weniger viele Quellen als Referenzspannung auswählen:

  1. Die Betriebsspannung. Diese Möglichkeit bieten alle AVR-Mikrocontroller mit ADC. Die Betriebsspannung wird intern auf den ADC geschaltet.
  2. Eine interne Referenzspannung. Auch das ist immer möglich. Durch Aktivierung eines Schalters (REFS0 oder REFS1) in einem der ADC-Kontrollregister wird ein "Spannungsgenerator" eingeschaltet, der aus der Betriebsspannung eine stabilisierte Spannung von 1,1 oder 2,56 Volt (je nach Controller-Typ) erzeugt und intern auf den ADC schaltet. Einige Controller, bspw. der ATtiny25, erlauben sogar, wahlweise einen dieser beiden Spannungswerte zu verwenden.
  3. Eine extern an einem Controller-Pin bereitgestellte Referenzspannung. Alle ADC-haltigen Controller bis auf einige ganz kleine, wie der ATtiny13, bieten die Option, dem ADC die Referenzspannung von außen zuzuführen. Hierzu dient entweder ein nur für diesen Zweck vorgesehener Chip-Pin AREF, etwa beim ATmega8. Oder bei kleineren AVRs wie dem ATtiny25 gibt es hierfür einen Mehrzweck-Pin, der bei Bedarf auch als normaler Port-Pin dienen kann. Die Referenzspannung darf die Betriebsspannung nicht überschreiten.

Die Möglichkeiten (1) und (3) lassen sich auch kombinieren, indem man die Betriebsspannung extern über einen Tiefpass aus Drossel und Kondensator auf AREF legt. Das bedeutet etwas mehr Schaltungsaufwand, sorgt aber für eine besonders stabile Referenzspannung, die weitgehend frei von hochfrequenten Störungen ist, die die hoch getakteten Komponenten des Controllers oder andere Bauteile einer komplexeren Schaltung verursachen. Auf diese Weise kann möglicherweise eine höhere Genauigkeit als bei Variante (1) erreicht werden. Dies trifft insbesondere dann zu, wenn die CPU des Controllers während des ADC-Messvorgangs aktiv bleiben muss, also nicht der noise reduction mode genutzt werden kann.

Welche Referenzspannung ist die richtige?

Das hängt von der jeweiligen Anwendung ab. Vielfach geht es eigentlich darum, einen Widerstand Rx zu ermitteln, z. B. den eines Sensors, etwa eines Lichtsensors (LDR) oder eines Kalt- oder Heißleiters zur Temperaturmessung. Dann ist es am einfachsten, Rx in Reihe zu einem konstanten Widerstand in die Betriebsspannung zu hängen und den Spannunsabfall an Rx zu messen. In dieser Anwendung interessiert gar nicht die absolute Spannung am veränderlichen Widerstand Rx, sondern der relative Anteil der Messspannung an der Gesamtspannung, sprich der Betriebsspannung. Sinnvollerweise wählt man also die Betriebsspannung als Referenzspannung.

In anderen Situationen besteht jedoch kein logischer Bezug zur Betriebsspannung, sondern ist die absolute Spannung von Bedeutung. Ein beinahe klassisches Beispiel hierfür ist die Temperaturmessung mit Sensor LM335 (oder einem ähnlichen IC) - auch wenn es inzwischen besser geeignete (digital arbeitende) Temperatursensoren für Microcontroller-Anwendungen gibt.

Ein anderes Beispiel wäre die Kontrolle der Betriebsspannung. Vielleicht sollen bestimmte Maßnahmen getroffen werden, wenn bei Batterie- oder Akkubetrieb gewisse Spannungsgrenzwerte aufgrund nachlassender Ladung unterschritten werden.

In diesen Fällen wird eine konstante Spannung benötigt, mit der die variable Spannung verglichen wird (in Form eines ADC-Messwerts). Möchte man den Aufwand vermeiden, die Vergleichsspannung extern bereitzustellen, greift man zweckmäßigerweise auf die interne konstante Referenzspannung des Mikrocontrollers zurück.

Die Genauigkeit der internen Referenzspannung

Eine solche Messschaltung führt uns zu der eigentlichen Frage, der hier nachgegangen werden soll: Wie genau ist die interne Referenzspannung von AVR-Microcontrollern? Ein Blick in die Datenblätter der AVR-Mikrocontroller ist ernüchternd - es sind Abweichungen in der Größenordnung von +/- 10% möglich! Entsprechend ungenau würden dann natürlich auch die Messungen. Sicherlich gibt der Hersteller Atmel einen großen Toleranzbereich an, der garantiert bei der Produktion einzuhalten ist. Um einen Eindruck von den tatsächlichen Daten einzelner Controller zu erhalten, hilft nur eine Überprüfung weiter. Wir haben solche Messungen bei einigen AVR-Mikrocontrollern durchgeführt und geben im Folgenden die Ergebnisse wieder.

Methodik zur Ermittlung der internen Referenzspannung

Bei einigen Mikrocontrollern, bspw. dem ATmega8, liegt die jeweils aktive Referenzspannung am Chip-Pin AREF an, auch wenn sie intern geschaltet wird. Sie kann mit einem hochohmigen Voltmeter unmittelbar gemessen werden. Diese Möglichkeit entfällt bei Controllern ohne einen solchen Pin. In jedem Fall lässt sich die verwendete Referenzspannung URef rückrechnen, wenn man den ADC-Messwert Ax zu einer Messspannung Ux kennt. Bei 10-Bit-ADC-Auflösung gilt die Beziehung URef = Ux * 1024 / Ax. Die Messspannung sollte möglichst hoch innerhalb des Messbereichs gewählt werden (also knapp unterhalb der Referenzspannung), damit der absolute Messfehler bei der Bestimmung von Ux (mit einem Voltmeter) sich möglichst wenig verfälschend auswirkt.

Das im Tipp zur Temperaturmessung mit Heißleiter vorgestellte Programm kann verwendet werden, um die interne Referenzspannung eines ATtiny13 zu ermitteln (PB2 auf GND legen). Das Programm wurde für die Tests, deren Ergebnisse der unten stehenden Tabelle zu entnehmen sind, an verschiedene AVR-Microcontroller angepasst:

Die Pin-Belegung ist in der jeweiligen ASM-Datei beschrieben, die in jedem ZIP-Archiv steckt.

Ergebnisse

Die folgende Tabelle zeigt die Messwerte der intern erzeugten Referenzspannung in Volt für mehrere AVR-Microcontroller bei unterschiedlichen Betriebsspannungen.


Betr.spg.\
Controller
1,6 V2,5 V3,0 V3,8 V5,0 V
ATtiny13A1,101,081,07
ATtiny13A1,101,091,09
ATtiny13V1,071,081,081,08
ATtiny44V1,141,101,101,101,10

Die Messwerte für 1,6 Volt Betriebsspannung laufen gewissermaßen außer Konkurrenz, denn diese Betriebsbedingung liegt außerhalb der Spezifikation der AVR-Controller (mindestens 1,8 Volt). Bei allen getesteten Mikrocontrollern weicht die Referenzspannung allenfalls um etwa 3 % vom Sollwert 1,1 Volt ab; der Fehler bleibt also deutlich unter der 10-%-Spanne laut Datenblatt. Bei den Tiny13-Controllern zeigt sich eine leichte Abhängigkeit der Referenzspannung von der Versorgungsspannung; bei 3 Volt Betriebsspannung wird die beste Übereinstimmung mit der Sollspannung erreicht. Allerdings sind die Messwerte bei höherer Betriebsspannung 'stabiler', zeigen eine geringere Variation. Die beiden V-Controller liefern unter allen Bedingungen stabile Messwerte - V wie 'verlässlich'!

Nicht geprüft wurde der Einfluss weiterer Faktoren, wie Temperatur oder Chip-Alterung.

Die obige Tabelle wird von Zeit zu Zeit um weitere Controllertypen ergänzt werden.

Fazit

Die interne Referenzspannung ist erfreulich verlässlich. Sofern Messwertfehler von einigen Prozent unkritisch sind (z. B. bei der Messung der Batteriespannung), ist keine Controller-individuelle Kalibrierung erforderlich. Bei höheren Anforderungen an die Genauigkeit des Messwertes sollte der Messfehler einmalig ermittelt und aus den späteren Messwerten herausgerechnet werden, also eine Kalibrierung durchgeführt werden. Dies kann bspw. dadurch geschehen, dass ein Korrekturfaktor im EEPROM des Controllers abgelegt wird, den das Programm nach jeder ADC-Messung berücksichtigen muss. Die Kalibrierung gilt unter Umständen nur für eine bestimmte Betriebsspannung, die daher eingehalten werden sollte. Nach Möglichkeit sollten bei Einsatz der internen Referenzspannung mehrere Messungen durchgeführt und die Ergebnisse gemittelt werden, insbesondere bei geringerer Versorgungsspannung.


Zurück zur Übersicht