Forum: Mikrocontroller und Digitale Elektronik Spannungsteiler am ADC nichtlinear?


von udo (Gast)


Lesenswert?

hallo,

ein AD595 liefert mir eine Spannung von 0-12,5 Volt.

Diese habe ich über einen Spannungsteiler (R1 u. R2) dem ADC eines 
ATMega328 zugeführt und lese diese ein. R1=3,3kOhm und R2=2,2kOhm.

Soweit so gut.

kurios:

messe ich die Spannungen mit dem Multimeter am Ausgang des AD595(U1) und 
am Eingang des ADC(U2) stelle ich fest das der Spannunsteiler nicht 
linear ist:

In fast dem ganzen bereich ist das Verhältnis von U1/U2 ca. 0,4.
Ist allerdings U1 relativ klein(so ab 0,6V) ist das Verhältnis nur noch 
ca 0,35.

????

Woran könnte das bloß liegen???

von Yalu X. (yalu) (Moderator)


Lesenswert?

Misst du die Ein- und Ausgangsspannung am Spannungsteiler direkt an den
Widerständen? Wenn du woanders misst, könnten noch irgendwelche
Übergangswiderstände in Leitungen und Steckverbindern die Messung
verfälschen.

Hat dein Multimeter vielleicht einen Offset? Wenn du die Messleitungen
aneinander hältst, sollte es exakt 0V anzeigen.

Vielleicht ist dem gemessenen Signal ein Wechselanteil (woher auch
immer) überlagert, mit dem dein Multimeter nicht umgehen kann.

von Michael M. (Gast)


Lesenswert?

ich tippe auf das batteriesymbol am multimeter =)

von udo (Gast)


Lesenswert?

am multimeter fehlt nix... ich messe die spannung ja auch am adc. und 
die ist ebenfalls zu niedrig.

hmmmm....das mit dem wechselanteil könnte möglich sein...

du meinst quasi dass ein kleiner Hochpaß realisiert sein könnte?

von B. S. (bestucki)


Lesenswert?

udo schrieb:
> In fast dem ganzen bereich ist das Verhältnis von U1/U2 ca. 0,4.
> Ist allerdings U1 relativ klein(so ab 0,6V) ist das Verhältnis nur noch
> ca 0,35.

Das Verhältnis der Spannungen sollte gleich sein wie das Verhältnis der 
Widerstände -> 0.666
Dieser Fehler entsteht, da der ADC einen Eingangswiderstand im 
kOhm-Bereich hat.

Dein Multimeter kann wahrscheinlich niedrige Spannungen nicht mehr so 
genau messen. Hast du ein Datenblatt von deinem Multimeter? Da sollte 
der Fehler angegeben sein.

Gruss

von Michael M. (Gast)


Lesenswert?

Heinz B. schrieb:
> Dieser Fehler entsteht, da der ADC einen Eingangswiderstand im
> kOhm-Bereich hat.
nein. das ist beim ref-eingang so. nicht bei den kanälen.

> Dein Multimeter kann wahrscheinlich niedrige Spannungen nicht mehr so
> genau messen. Hast du ein Datenblatt von deinem Multimeter? Da sollte
nein. der fehler ist viel zu groß für die geläufigen fehlerklassen.

von spess53 (Gast)


Lesenswert?

Hi

Wie sieht denn die Initialisierung des ADC aus?

MfG Spess

von udo (Gast)


Lesenswert?

Nachher werde ich wohl mal den ADC abklemmen und schauen ob das 
Verhältnis dann gleicht bleibt...sprich ob der ADC das Verhältniss 
beeinträchtigt.

Initiert wird der ADC wie folgt:

uint16_t ReadChannel(uint8_t mux)
{
  uint8_t i;
  uint16_t result;

  ADMUX = mux;                      // Kanal waehlen
  ADMUX |= (1<<REFS1) | (1<<REFS0); // interne Referenzspannung nutzen

  ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0);    // Frequenzvorteiler
                               // setzen auf 8 (1) und ADC aktivieren 
(1)

  /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man 
liest
     also einen Wert und verwirft diesen, um den ADC "warmlaufen zu 
lassen" */
  ADCSRA |= (1<<ADSC);              // eine ADC-Wandlung
  while ( ADCSRA & (1<<ADSC) ) {
     ;     // auf Abschluss der Konvertierung warten
  }
  result = ADCW;  // ADCW muss einmal gelesen werden,
                  // sonst wird Ergebnis der nächsten Wandlung
                  // nicht übernommen.

  /* Eigentliche Messung - Mittelwert aus 4 aufeinanderfolgenden 
Wandlungen */
  result = 0;
  for( i=0; i<4; i++ )
  {
    ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
    while ( ADCSRA & (1<<ADSC) ) {
      ;   // auf Abschluss der Konvertierung warten
    }
    result += ADCW;        // Wandlungsergebnisse aufaddieren
  }
  ADCSRA &= ~(1<<ADEN);             // ADC deaktivieren (2)

  result /= 4;                     // Summe durch vier teilen = arithm. 
Mittelwert

  return result;
}

von spess53 (Gast)


Lesenswert?

Hi

>ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0);

Das ist ein Vorteiler von 4! Recht flott. Da bist du schon bei 1MHz 
Prozessortakt ausserhalb der 50..200kHz ADC-Takt.

MfG Spess

von udo (Gast)


Lesenswert?

Heinz B. schrieb:
> Das Verhältnis der Spannungen sollte gleich sein wie das Verhältnis der
> Widerstände -> 0.666

Bei einem Spannungsteiler sieht das Ganze doch so aus:

U1 / U = R1 / (R1 + R2)

-> U1 = U * ( 220O/(3300+2200) )
   U1 = U * 0,4

Ist nun U = 2,5V:

    -> U1 = 2,5V * 0,4 = 1V

Das messe ich auch!

Wird jedoch U kleiner...zb U = 0,3V:

    -> U1 = 0,3V * 0,4 = 0,12V

Diese 0,12V kann ich allerdings nicht messen....sondern stelle ca 0,105V 
fest!

Mein Multimeter hat weitaus geringere Toleranzen!
Außerdem müsste ich am ADC bei 0,12V 24/1024 digit bekommen (Ref-spg: 
5,12V).
Ich bekomme aber nur 21/1024.

Das deckt sich mit den Messungen des Multimeters.

von Karl H. (kbuchegg)


Lesenswert?

> Außerdem müsste ich am ADC bei 0,12V 24/1024 digit
> Ich bekomme aber nur 21/1024.

3 Digit Abweichung.
Das kann dann aber auch schon am generellen elektronischen Aufbau 
liegen. Was kriegst du, wenn du mehr als 4 Samples für den Mittelwert 
benutzt?

von udo (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> 3 Digit Abweichung.
> Das kann dann aber auch schon am generellen elektronischen Aufbau
> liegen. Was kriegst du, wenn du mehr als 4 Samples für den Mittelwert
> benutzt?

Hallo,

ich habe jetzt 16 Samples drin. Genau dasselbe... :(

von udo (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> 3 Digit Abweichung.
> Das kann dann aber auch schon am generellen elektronischen Aufbau
> liegen. Was kriegst du, wenn du mehr als 4 Samples für den Mittelwert
> benutzt?

Hallo,

ich habe jetzt 16 Samples drin. Genau dasselbe... :(

spess53 schrieb:
> Hi
>
>>ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0);
>
> Das ist ein Vorteiler von 4! Recht flott. Da bist du schon bei 1MHz
> Prozessortakt ausserhalb der 50..200kHz ADC-Takt.
>
> MfG Spess


Oh....ich benutze einen 8MHz Quarz... ich dürfte wohl einen Vorteiler 
von 64 einstellen...leider bin ich grad nicht am Gerät....des werd ich 
gleich mal probieren...Vielleicht wird der ADC durch den schnellen Takt 
bei niedrigen Spannungen etwas niederohmig....!?!?

von spess53 (Gast)


Lesenswert?

Hi

>ich habe jetzt 16 Samples drin. Genau dasselbe... :(

Bei welchem Prozessortakt? Bei deinem Vorteiler sollte der kleiner als 
0,8MHz sein.

MfG Spess

von udo (Gast)


Lesenswert?

spess53 schrieb:
> Hi
>
>>ich habe jetzt 16 Samples drin. Genau dasselbe... :(
>
> Bei welchem Prozessortakt? Bei deinem Vorteiler sollte der kleiner als
> 0,8MHz sein.
>
> MfG Spess

16 Samples beim einlesen des ADC...daraus wird der Mittelwert gebildet. 
;)

und den Vorteiler setze ich heut abend auf 64. Dann bin ich gespannt ob 
sich was ändert.

von udo (Gast)


Lesenswert?

so....

gestern habe ich als erstes den Vorteiler auf 64 gesetzt. Somit komme 
ich auf eine ADC-Frequenz von 125kHz. Das hat aber den Effekt nicht 
beeinträchtigt.

Danach habe ich den Spannungsteiler vom ADC befreit. Das heißt die 
Beschaltung war jetzt nur noch: AD595 Output über 2 Widerstände nach 0V.

Brachte immer noch keine Änderung. :(

Dann habe ich durch Zufall herausgefunden dass das Potential 0V  nicht 
immer 0V ist sondern zwischen 0V und ca. 0,12V schwankt. Aber nicht an 
allen Stellen: An anderer Stelle (direkt an einem 2,2µF 
Keramikkondensator) hatte ich konstant 0,0V.

Die ganze Schaltung wird von einem Schaltnetzteil versorgt, das ich für 
1,95€  bei Pollin erstanden habe. Am Ausgang des Schaltnetzteils war es 
am Schlimmsten. Je näher ich an verschiedenen Kondensatoren gemessen 
habe desto besser waren die 0V.

Der Spannungsteiler wurde direkt auf 0V am Ausgang des Schaltnetzteils 
gelegt. Dann habe ich ihn gestern verlegt:

UND SIEHE DA:
Der Spannugsteiler funktioniert astrein! Verhältniss der Spannungen 
stets 0,4.   :) :) :)

Darauf hätte ich auch eher kommen können.

Ganz schön beunruhigend zu wissen wie schlecht das Netzeil arbeitet.

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.