Forum: Mikrocontroller und Digitale Elektronik ATXMEGA384C3-AU ADC mist ungenau


von Thomas W. (thomas_w808)



Lesenswert?

Hallo,

ich versuche mit dem ATXMEGA384C3-AU eine Spannung am ADC PORT_A zu 
messen.
Als Referenzspannung ist "AREFA" ausgewählt, an diesem liegt einfach die 
Spannungsversorgung von 3,3V an. Die Spannungsversorgung AVCC und den 
die AREF Beschaltung habe ich wie in 
"Schematic-Checklist_Application-Note" ausgeführt.
Nun ist es aber so das ich einen ansteigenden Messfehler feststellen 
kann. Der ermittelte Wert weicht von dem erwarteten ab, und ist immer zu 
hoch. Ab ca. 2,6V ist der Wertebereich am Maximum angekommen. Spannungen 
zwischen 2,6V und 3,3V kann ich überhaupt nicht messen, das der Wert 
4095 beträgt. Ein Screenshot aus dem Excel ist anbei um dies anschaulich 
zu machen.
Es sind insgesamt 6 Analogeingänge beschaltet, 4x ein Poti und 2x eine 
Batteriespannungsmessung über einen 2:1 Spannungsteiler (9k76/3k24). Es 
werden alle nacheinander 15mal gemessen und danach wird ein Mittelwert 
in der Hauptschleife gebildet.

Ich kann den Fehler nicht finden, und bitte euch um Hilfestellung.
Vielen Dank schon mal vorab.

Die Inititialisierung des ADC ist wie folgt ausgeführt:
1
void ADCA_CH0_INI(void)
2
    {
3
      ADCA.CTRLB = ADC_RESOLUTION_12BIT_gc;                    //12 Bit Auflösung, rechts anschlag / convmode 0 unsigned
4
      ADCA.REFCTRL = ADC_REFSEL_AREFA_gc;                      //External reference on PORT A
5
      ADCA.PRESCALER = ADC_PRESCALER_DIV256_gc;                  //eine Messung aller 0,11ms (15x Mittelwert auf 6 Pins = 10ms Total) [ 1000ms / ((32.000.000Mhz/256PRESCALER)/14TakteProMessung) ]
6
      ADCA.CH0.CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc;              //Positiven Wertebereich
7
      ADCA.CH0.INTCTRL |= ADC_CH_INTMODE_COMPLETE_gc | ADC_CH_INTLVL_LO_gc;
8
9
      //Kalibriedaten laden
10
        NVM_CMD = NVM_CMD_READ_CALIB_ROW_gc;      
11
        ADCA.CALL = pgm_read_byte(offsetof(NVM_PROD_SIGNATURES_t, ADCACAL0));    
12
        ADCA.CALH = pgm_read_byte(offsetof(NVM_PROD_SIGNATURES_t, ADCACAL1));
13
        NVM_CMD = NVM_CMD_NO_OPERATION_gc;    
14
      //ende Kalibriedaten laden
15
16
      // erst nach allen Einstellungen
17
      ADCA.CTRLA = ADC_ENABLE_bm;
18
    
19
    }

Die Daten vom ADC werden in der ISR abgerufen:
1
  ISR(ADCA_CH0_vect)
2
  {
3
    ADCA.CH0.INTFLAGS = ADC_CH_CHIF_bm;                    //flag löschen
4
  
5
      if (ADC_Mittelwert_CNT < ADC_MitWt_Anz)                        //Nur 15x pro Pin messen, danach Mittelwert in Hauptschleife auswerten
6
      {
7
        if (ADCA.CH0.RES > ADCA_CH0_Offset)                          //nur wenn größer Offsetwert um echten O Wert bekommen zu können
8
        {  ADC_Mittelwert[ADC_CH0_PIN-1] += ADCA.CH0.RES;                  //Messwert aufsummieren [speichern in Array beginnend mit 0]            
9
        }
10
      
11
          ADC_CH0_PIN++;                                      //nächster Pin
12
    
13
            if (ADC_CH0_PIN >= (ADCA_CH_PIN_Anzahl + 1))                      //wenn letzter Pin gemessen dann wieder den ersten Pin messen (PIN0 ist AREF)
14
            {  ADC_CH0_PIN = 1;                                  //Pin 1 wird für MUX ausgewählt, da PIN0 AREF ist.
15
            
16
              ADC_Mittelwert_CNT ++;                                //Nach Messung aller Pins (1-6) Zähler für Mittelwert hochzählen
17
            }
18
19
              ADCA.CH0.MUXCTRL = (ADC_CH0_PIN & 0x0F) << 3;                      //im Mux den nächsten PIN einstellen (im MUXCTRL sind Bit 3-6 für den Pin zuständig)
20
      }
21
        
22
  }

von Rainer W. (rawi)


Lesenswert?

Thomas W. schrieb:
> Nun ist es aber so das ich einen ansteigenden Messfehler feststellen
> kann. Der ermittelte Wert weicht von dem erwarteten ab, und ist immer zu
> hoch.

Deine Referenzspannung besitzt einen anderen Wert, als du angenommen 
hast. Dein "ansteigender Messfehler" ist ganz wesentlich ein 
Skalierungsfaktor und beim letzten Wert (3V) wohl eine Übersteuerung.

Deine Messdaten in Form einer Pixelmatrix laden jetzt allerdings nicht 
dazu ein, nachzurechnen.
Hast du die Referenzspannung und die Eingangsspannungen direkt am µC 
gemessen oder woher kommen die Werte?

: Bearbeitet durch User
von Thomas W. (thomas_w808)


Lesenswert?

Vielen Dank für deine schnelle Antwort.
Mit dem DMM kann ich 3,29V messen.
Meist du ich sollte diese Spannung mit dem Oszi überprüfen?

Die Kritik mit der Pixelmatrix kann ich nicht ganz verstehen, bei mir am 
Handy lädt das Bild ganz sauber. Eine Tabelle mit dem Messwerten ist 
auch dabei. Oder meinst du etwas anderes?

Die Kuve in der Steilheit mathematisch anzupassen konnte realisieren, 
aber Messwerte über 2,6V kann ich damit auch nicht erfassen.

von S. L. (sldt)


Angehängte Dateien:

Lesenswert?

> aber Messwerte über 2,6V kann ich damit auch nicht erfassen

Liegt es vielleicht an dem "Max. AVcc-0.6"?
  Nur eine Laienmeinung.

von Norbert (der_norbert)


Lesenswert?

Schon mal über einen Fehler in der Software sinniert?
Im (fast) oberen Bereich sieht das mehrfach nach 25% zuviel aus

Thomas W. schrieb:
> Es
> werden alle nacheinander 15mal gemessen und danach wird ein Mittelwert
> in der Hauptschleife gebildet.

Mal ganz unabhängig davon, dass 15× nun wirklich nicht der wahre Sack 
der Zwerge ist.

(sum(16×) + 2¹¹) >> 4 wohl schon eher.

von Thomas W. (thomas_w808)


Lesenswert?

S. L. schrieb:
>> aber Messwerte über 2,6V kann ich damit auch nicht erfassen
>
> Liegt es vielleicht an dem "Max. AVcc-0.6"?
>   Nur eine Laienmeinung.

Danke. 3,3V - 0,6V = 2,7V das ist so ungefähr der Messwert ab wann der 
Überlauf auftritt.

von Wastl (hartundweichware)


Lesenswert?

Ich finde es immer wieder toll wie "man" schon im Thread-
Titel - ohne einmal zu überlegen - der Hardware die Schuld
gibt an den Ergebnissen die einem nicht passen.

Toll finde ich es auch immer wieder, wie "man" es nicht
schafft, wenigstens im Thread-Titel keine Fehler stehen
zu lassen.

von Rainer W. (rawi)


Lesenswert?

Thomas W. schrieb:
> Die Kritik mit der Pixelmatrix kann ich nicht ganz verstehen, bei mir am
> Handy lädt das Bild ganz sauber.

Eben - ein Bild.
Um mit den Daten rechnen zu können, ist ein PNG-Bild ein relativ 
ungünstiges Format. OCR tue ich mir jetzt nicht an und abtippen mag ich 
die Werte auch nicht ;-)

> Mit dem DMM kann ich 3,29V messen.
> Meist du ich sollte diese Spannung mit dem Oszi überprüfen?

Wer von den beiden (DMM oder Oszi) besser misst, kannst du den 
technischen Daten im Handbuch entnehmen. Das Oszi verrät dir, ob es sich 
um eine saubere Gleichspannung handelt.

von Thomas W. (thomas_w808)


Lesenswert?

Wastl schrieb:
> Ich finde es immer wieder toll wie "man" schon im Thread-
> Titel - ohne einmal zu überlegen - der Hardware die Schuld
> gibt an den Ergebnissen die einem nicht passen.

O.k. konstruktiv, aber spekulativ und ein wenig vorwurfsvoll

>
> Toll finde ich es auch immer wieder, wie "man" es nicht
> schafft, wenigstens im Thread-Titel keine Fehler stehen
> zu lassen.

... Und wenn man nichts beizutragen hat und trotzdem was sagen muss...

von Wastl (hartundweichware)


Lesenswert?

Thomas W. schrieb:
> Und wenn man nichts beizutragen hat

Hätte "man" schon wenn der Thread nicht so voreingenommen
beginnen würde.

von Thomas W. (thomas_w808)


Lesenswert?

Rainer W. schrieb:
> Thomas W. schrieb:
> Eben - ein Bild.
> Um mit den Daten rechnen zu können, ist ein PNG-Bild ein relativ
> ungünstiges Format. OCR tue ich mir jetzt nicht an und abtippen mag ich
> die Werte auch nicht ;-)
>
Und ich dachte mir das Niemand eine fremde Excelsheet öffnen möchte, und 
wollte der verbale Prügel aus dem Weg gehen.


> Wer von den beiden (DMM oder Oszi) besser misst, kannst du den
> technischen Daten im Handbuch entnehmen. Das Oszi verrät dir, ob es sich
> um eine saubere Gleichspannung handelt.

Ich dachte jetzt an einen Spannungsabfall während der Wandlung. Aber 
scheinbar hat es sich erledigt, mit dem Hinnweis Aref MAX = AVCC-0,6V.
Das werde ich als nächstes prüfen.

von Thomas W. (thomas_w808)


Lesenswert?

Wastl schrieb:
> Thomas W. schrieb:
>> Und wenn man nichts beizutragen hat
>
> Hätte "man" schon wenn der Thread nicht so voreingenommen
> beginnen würde.

Ich kann meine Fragen so stellen wie ich das möchte. Niemand, speziell 
ich nicht, erwarten von dir das du eine Antwort gibst.
Wenn es dir nicht passt wir die Frage gestellt ist, dann ließ doch bitte 
auf der nächsten Zeile weiter.

von Harald K. (kirnbichler)


Lesenswert?

Thomas W. schrieb:
> Und ich dachte mir das Niemand eine fremde Excelsheet öffnen möchte, und
> wollte der verbale Prügel aus dem Weg gehen.

Es gibt auch andere Formate, in denen man numerische Werte 
transportieren kann als ausgerechnet als Bild.

CSV wäre so ein Kandidat.

von Wastl (hartundweichware)


Lesenswert?

Thomas W. schrieb:
> Ich kann meine Fragen so stellen wie ich das möchte.

Thomas W. schrieb:
> Wenn es dir nicht passt wir die Frage gestellt ist, dann ließ doch bitte
> auf der nächsten Zeile weiter.

Auch nach längerer Suche konnte ich keinerlei Frage im Eingang finden.

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
Noch kein Account? Hier anmelden.