ATMEGA328P: Messung VBG per ADC

Gast #6645316
Lesenswert?

Hallo zusammen,

ich brauche eine Info von euch: An einem ATMEGA328P nutze ich den ADC 
(AVCC = 5V, AREF über Kondensator mit Masse verbunden). Das Ganze 
funktioniert auch wie gewünscht. Jetzt habe ich im Datenblatt die 
Möglichkeit gesehen, über den ADC-Kanal 14 auch die interne VBG (1.1V) 
zu messen. Den ADC habe ich jetzt auch entsprechend konfiguriert, 
bekomme aber für diesen Kanal keinen stabilen Messwert heraus, sondern 
ein Rauschen von ca. 0,2-0,5V.
Im Datenblatt habe ich keinen Hinweis darauf gefunden, dass der Kanal im 
Betrieb mit externer AVCC nicht verfügbar wäre. Könnt ihr mir sagen, ob 
das grundsätzlich möglich ist?

Grüße
Harald
1
ADMUX  = (1 << ADLAR);    // Left adjust result
2
ADMUX  |= 0x0E;            // Select channel VBG
3
ADMUX  |= (1 << REFS0);   // AVCC with external capacitor at AREF pin
4
ADCSRA |= (1 << ADSC);    // Start Conversion
Gast #6645332
Lesenswert?

Du musst nach dem Einschalten des ADC 70µs warten, bis die Bandgap 
Referenz stabilisiert ist.

Du hast AREF als externe Referenzquelle gewählt. Da musst du dann auch 
eine Spannung >1.1V anlegen, sonst kann das nicht funktionieren.
#6645365
Lesenswert?

Harald schrieb:
> Den ADC habe ich jetzt auch entsprechend konfiguriert,
> bekomme aber für diesen Kanal keinen stabilen Messwert heraus, sondern
> ein Rauschen von ca. 0,2-0,5V.

Wenn du über REFS die Spannungsreferenz des ADC änderst dann wird der 
Kondensator an AREF auf die neue Spannungsreferenz umgeladen. Das kann 
je nach Größe des AREF-Kondensators und Innenwiderstand der 
Spannungsreferenz ein wenig dauern.

Stefan ⛄ F. schrieb:
> Du hast AREF als externe Referenzquelle gewählt. Da musst du dann auch
> eine Spannung >1.1V anlegen, sonst kann das nicht funktionieren.

Stefan, REFS0 wird gesetzt, die gewählte Referenz ist also AVCC, nicht 
AREF.

LG, Sebastian
Gast #6645410
Lesenswert?

Hi,

der ADC läuft zyklisch über mehreren Kanäle. Die Initialisierung 
passiert natürlich im Programm, das hatte ich euch nur im Eingangspost 
unterschlagen.
1
  ADCSRA = (1 << ADEN)   // ADC Enable
2
         | (1 << ADSC)   // Start Conversion
3
     | (0 << ADATE)  // Free running mode
4
     | (1 << ADIE)   // Enable Interrupt
5
     | (1 << ADPS2) 
6
     | (1 << ADPS1) 
7
     | (0 << ADPS0); // Prescaler 64 (ADC-Freq 125kHz)

Stefan ⛄ F. schrieb:
> Du musst nach dem Einschalten des ADC 70µs warten, bis die Bandgap
> Referenz stabilisiert ist.

Die 70us muss ich nur nach dem initialen Einschalten abwarten, danach 
sollte die VGB doch eingeschwungen sein. Oder?

Peter D. schrieb:
> Die internen 1,1V sind sehr hochohmig beim Messen.
> Du mußt den MUX setzen und dann erst 16 Dummy-Messungen machen oder die
> gleiche Zeit abwarten.
>
> https://www.avrfreaks.net/forum/avrs-measure-their-own-vcc-do-it-badly

Ah, vielen Dank für den Link. Das was Steve hier beschreibt trifft auch 
meine Anwendung: Die grobe Kontrolle der 5V AVCC durch die interne 
Referenz. Ich teste morgen mal, ob ich mit den Dummy-Messungen ins Ziel 
komme. Ist irgendwie eine Frickelei, aber wenn's am Ende hilft... :)

Grüße
Harald
#6645666
Lesenswert?

Ich habe auch gerade mit Vref=Vcc die Bandgab-Messung bei Tiny 85 
gemacht, um Vcc zu messen. Ich bekomme sehr stabile Messwerte, aber nur 
wenn ich mich an das Datenblatt halte und beim Umschalten der Kanäle ein 
paar ms warte. Im Datenblatt steht in der MUX-Tabelle als Fußnote, dass 
eine Wartezeit von 1ms erforderlich ist.
also: Mux setzen, warten, dann erst Messung und zurück das gleiche.
Ich habe allerdings im M328-Datenblatt in der MUX-Tabelle diesen Hinweis 
nicht gefunden. Vielleicht steht es wo anders. Ich würde zum Test diese 
Wartezeit probieren.
#6645741
Lesenswert?

Noch ein Hinweis: man darf keine hohe Auflösung für die Vcc-Messung 
erwarten. Hier mal die Abschätzung der Auflösung mit Daumenwerten: 
Vcc=5V ergibt eine Auflösung von ca. 5mV/Roh. Ein Rohwert der 
Vbg-Messung muß man ca. mit 5 multiplizieren, um die Vcc-Auflösung zu 
erhalten. Das ergibt eine Vcc-Auflösung von 20mV. Oder genau nach der 
Formel Vcc/1024=Vbg/Roh --> Vcc=Vbg*1024/Roh. Und dann kommt hinzu, dass 
Vbg von Vcc abhängt. Ich kalibriere immer bei der Vcc, bei der ich genau 
sein will. Bei LiIon-Akku-Versorgung mache ich 2 Kalibrierungen: für 
4,2V und 3V.
#6671791
Lesenswert?

Ich habe jetzt mal die Vbg-Messung auch beim M328 durchgeführt. Die 
erforderliche Wartezeit war noch viel höher.
Der Test für stabile Messung:
- von Vref=1,1V auf Vref=Vcc umgeschaltet
- Dummy-Messung mit Mux=8
- Wartezeit 8ms!! (bei <7ms starke Schwankungen)
- richtige Messung mit Mux=8
Beim Rückweg Vref von 1,1V auf Vcc war die Wartezeit nicht notwendig, es 
reichte die Dummy-Messung. Das liegt wohl daran, dass Vbg sehr hochohmig 
ist und Vcc natürlich nicht.
Seltsamerweise unterscheiden sich die Prozessoren erheblich:
Eine Nachmessung mit gleichem Testverfahren ergab bei T861, T84 und T85, 
dass eine Dummy-Messung ohne Wartezeit in beiden Richtungen reicht. 
Alles ist nur jeweils mit einem Exemplar gemessen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren