Forum: Mikrocontroller und Digitale Elektronik atxmega32 ADC


von maik (Gast)


Lesenswert?

Hallo ich benutze einen atxmega32D4 und will den ADC nutzen. Leider 
kommt es zu extremen Schwingungen des ADC+s. von 155 auf 163 wenn man 
den Eingang auf GND legt. Dass sind fast 8 Einheiten.

Kann vielleicht jemand einen Fehler im Code entdecken. Wenn ich die 
Verstärkung hinzuschalte, so  steigt das Schwingen ebenfalls an.

Kann es sein, dass der interne 1V Quuelle schwingt ?

Habe auch die Komplette Schaltung mit diversen C ergänzt, aber keine 
Besserung. Wie geht das mitt dem Kalibrieren? Bringt das was? Hat das 
was mitm schwingen zu tun ?

Habe alle Prescaler werte ausprobiert. µC läuft mit 32 MHz.

  ADCA_PRESCALER = 0x05;// 5
  ADCA_REFCTRL = 0x02;
  ADCA_CTRLA = 0x05;
  ADCA_CTRLB = 0x08; // 18 = freerunning
  ADCA_EVCTRL = 0x00;


  ADCA.CH0.CTRL =    0b10010011;
  ADCA_CH0_MUXCTRL = 0b00101001;  // Strom

  while (1)
    {


      Strom_a = 0;
    for (unsigned long a = 0; a<Filter_Strom; ++a)

      {

        while(!ADCA.CH0.INTFLAGS);
        ADCA.CH0.INTFLAGS=ADC_CH_CHIF_bm;

          Strom_b = (unsigned long) ADCA.CH0RES ;
          Strom_a = Strom_a + Strom_b;

      }

      Strom = (Strom_a / (Filter_Strom) );

von Knut (Gast)


Lesenswert?

Der ADC vom XMega ist nicht wirklich gut, nich viele Macken. 8 LSB würde 
ich aber bei der internen Referenz tolerieren...


Knut

von Avr N. (balze)


Lesenswert?

Hallo maik,

maik schrieb:
> Hallo ich benutze einen atxmega32D4 und will den ADC nutzen. Leider
> kommt es zu extremen Schwingungen des ADC+s. von 155 auf 163 wenn man
> den Eingang auf GND legt. Dass sind fast 8 Einheiten.
>
> Kann vielleicht jemand einen Fehler im Code entdecken. Wenn ich die
> Verstärkung hinzuschalte, so  steigt das Schwingen ebenfalls an.
>
> Kann es sein, dass der interne 1V Quuelle schwingt ?
>

Lies doch mal das Errata im Datenblatt. (doc8135.pdf)
Da steht Dein Problem genau beschrieben.
Sogar Problem fix/Workaround ist angegeben. Allerdings: None  ;-)

Zitat Atmel Datenblatt doc8135.pdf
1
4. ADC has increased INL error for some operating conditions
2
Some ADC configurations or operating condition will result in increased INL error.
3
In signed mode INL is increased to:
4
– 6LSB for sample rates above 130ksps, and up to 8LSB for 200ksps sample rate.
5
– 6LSB for reference voltage below 1.1V when VCC is above 3.0V.
6
– 20LSB for ambient temperature below 0 degree C and reference voltage below 1.3V.
7
In unsigned mode, the INL error cannot be guaranteed, and this mode should not be used.
8
Problem fix/Workaround
9
None, avoid using the ADC in the above configurations in order to prevent increased INL
10
error. Use the ADC in signed mode also for single ended measurements.

Du solltest also bessere Ergebnisse bekommen koennen, wenn Du mit der 
Samplerate unter 130ksps (prescaler auf 256 -> 125ksps) und Du die 
internen Vcc/1.6 als Referenzspannung nimmst. (Bei Vcc. 3,3V -> 3,3V/1,6 
=> Vref = 2,0625  > 1,1 V aus Errata)
Solltest Du Messgroessen messen, die ebenfalls mit Vcc gespeist werden 
und von Vcc abhaengen (z.B. Widerstandsmessbruecke) ist Vcc als Referenz 
OK. (Stichwort: Ratiometrische Messung) Ansonsten externe 
Referenzspannung vorsehen (>1,1V).
EDIT: Das ganze dann noch im signed Mode und nicht wie von Dir 
vorgesehen im unsigned Mode. (Siehe oben im Errata)

Das Kalibrieren der ADCs wird Dir nicht helfen. Solltest Du aber 
zugunsten der Messergebnisse machen. Ist gut in der Appnote AVR1300 
beschrieben (Im ADC_driver.c file ist ein Beispiel)

MfG,

Balze aka AVR Noob

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.