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) );
Der ADC vom XMega ist nicht wirklich gut, nich viele Macken. 8 LSB würde ich aber bei der internen Referenz tolerieren... Knut
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.