mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Spannungsteiler am ADC nichtlinear?


Autor: udo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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???

Autor: Yalu X. (yalu) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich tippe auf das batteriesymbol am multimeter =)

Autor: udo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Be Stucki (bestucki)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Wie sieht denn die Initialisierung des ADC aus?

MfG Spess

Autor: udo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;
}

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: udo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: udo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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... :(

Autor: udo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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....!?!?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: udo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: udo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.