Forum: Mikrocontroller und Digitale Elektronik ADC - Ich checks nicht: Immer falsche Werte, aber konstant falsch!


von Häns (Gast)


Lesenswert?

Morgen!

Ich habe ien Problem mit meinem ADC. (MAX11206)
Ich lese zu Testzwecken verschiedene Spannungen ein.
1
Vref = 3.3V
2
20 Bit unipolare Messung gegen GND (1048576 Werte)
3
4
Rechnung: Spannung = ((3.3V * ADC-Wert) / 1048576)
Ich habe sogar schon die Referenz gepuffert - der Eingang hat eh nen 
Impedanzwandler.
1
U[mV] (eingestellt) | U[mV] (ausgegeben) | Diff. U [mV] | Delta U [mV]
2
----------------------------------------------------------------------
3
        63          |      42            |    21        |
4
       125          |      83            |    42        |   21
5
       250          |     167            |    83        |   41
6
       500          |     333            |   167        |   84
7
       750          |     500            |   250        |   83
8
      1000          |     667            |   333        |   83
9
      1500          |    1000            |   500        |  167
10
      2000          |    1334            |   666        |  166
11
      3000          |    2002            |   998        |  332
So...guckt man sich den Fehler an, um den der ADC stets daneben liegt, 
so ist dieser stets konstant. Eine Verdoppelung der Eingangsspannung 
bewirkt eine Verdoppelung des Fehlers.

Aber: WIESO????? Wokann ich den Fehler suchen?

Der ADC hat ein paar Register für Offset / Gain Calibration, aber diese 
benutze ich nicht. Wenn ich diese Register auslese, dann sind die Bits 
für die Korrektur auch nicht gesetzt - sonst hätte ich verstehen können, 
dass der ADC vielleicht immer einn Offset abzieht. Aber selbst wenn dem 
so wäre, dann müsste zusätzlich noch irgendwas im PGA-Register sein, um 
den Fehler weiter zu verstärken - aber auch dieses Register steht auf 
'0'.

Hat einer einen Tip für mich zur Fehlersuche?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Dein Problem ist ganz einfach, dass du nur 2/3 des Sollwerts 
berausbekommst...
Alles andere sind Folgefehler.

von gerd (Gast)


Lesenswert?

Schaltplan?

- gerd

von Häns (Gast)


Angehängte Dateien:

Lesenswert?

Lothar Miller schrieb:
> Dein Problem ist ganz einfach, dass du nur 2/3 des Sollwerts
> berausbekommst...

Ja, ist schon richtig.

gerd schrieb:
> Schaltplan?

Angehängt - Also...klar, Vref und Vsupply nicht an die selbe 
Versorgung...aber ist hier grad ja nur zum Test - so krass können die 
Werte nicht abweichen. Mit anderen Wandlern geht es so auch. Geht hier 
nicht um mV-genaue Ergebnisse, sondern erstmal nur um Funktion.

von Häns (Gast)


Lesenswert?

Nachtrag:

Also am OP liegt es auch nicht - wenn ich AINP direkt auf 3,3V lege, 
dann kommen nach der richtig erkannten 2/3-Regel die 2,2V heraus.

von U.R. Schmitt (Gast)


Lesenswert?

Es ist auf jeden Fall ein Faktor und kein Offset.
Eigentlich kann es jetzt nur 2 Dinge sein:
1. Du hast im Datenblatt etwas übersehen und musst einen 
Verstärkungsfaktor setzen, bzw. der default Verstärkungsfaktor ist 2/3.
2. Du hast einen Fehler in der Software beim Umrechnen. Die Formel bei 
20Bit sollte so ja korrekt sein (Überschlagsmäßig für 2^20)

Ein Zahlenüberlauf beim rechnen kanns eigentlich nicht sein, da der 
Fehler nicht kappt sondern einwandfrei proportional ist.

von ado (Gast)


Lesenswert?

Hat der ADC vielleicht die Möglichkeit eine interne Referenz zu 
verwenden und die externe Referenzspannung wird gar nicht verwendet da 
diese nicht aktiviert wurde ?

Ansonsten, wie sieht es mit Kondensatoren an DVDD und AVDD aus.
Steht ja im Datenblatt was da ran soll. Habe ich jetzt nich nachgelesen.
Sieht für mein Empfinden nur so nackt aus.

von Häns (Gast)


Lesenswert?

U.R. Schmitt schrieb:
> Du hast im Datenblatt etwas übersehen und musst einen
> Verstärkungsfaktor setzen, bzw. der default Verstärkungsfaktor ist 2/3.

Das schaue ich auch gerade nochmal nach...

U.R. Schmitt schrieb:
> Du hast einen Fehler in der Software beim Umrechnen. Die Formel bei
> 20Bit sollte so ja korrekt sein (Überschlagsmäßig für 2^20)

Das stimmt schon - es sind auch float-Typen. Aber die Rechnung passt - 
mit anderen ADCs mit 20Bit ist sie auch korrekt. Dieser hier war nur 
interessant wegen seinem PGA...nur soweit bin ich noch garnicht.

von Häns (Gast)


Lesenswert?

ado schrieb:
> Hat der ADC vielleicht die Möglichkeit eine interne Referenz zu
> verwenden und die externe Referenzspannung wird gar nicht verwendet da
> diese nicht aktiviert wurde ?

Nein, gibt eine interne Referenz - nur nen REFBUF, aber macht kein 
Unterschied ob mit oder ohne.

ado schrieb:
> Sieht für mein Empfinden nur so nackt aus.

Isses auch. Aber habs auch mit allen erforderlichen Cs versucht, kein 
Unterschied. Ist hier halt nur grad vorerst auf nem Steckbrett. Zum 
Funktionstest reicht das aber.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Datenblatt lesen:
1
The devices power up with the internal calibration regis-
2
ters disabled, and therefore a full-scale input produces 
3
a result of 60% of the full-scale digital range.

von Karl H. (kbuchegg)


Lesenswert?

Zeig doch mal dein Programm.
2/3 (bzw 1/3 das fehlt) ist ein ungewöhnlicher Faktor.
Auf der anderen Seite: um 20 Bit zu speichern benötigt man mindestens 3 
Byte. Wenn dann das unterste Byte flöten geht .... hat man 1/3 verloren.

von Häns (Gast)


Angehängte Dateien:

Lesenswert?

OK Leute - da muss ich mich für meine Dummheit entschuldigen!!!!

U.R. Schmitt schrieb:
> 1. Du hast im Datenblatt etwas übersehen und musst einen
> Verstärkungsfaktor setzen, bzw. der default Verstärkungsfaktor ist 2/3.

Genau so ist es! Ich habe es GELESEN, mit TEXTMARKER MARKIERT und dann 
NICHT MEHR WEITER BEACHTET.


Sorry Leutz!

von Häns (Gast)


Lesenswert?

Lothar Miller schrieb:
> Datenblatt lesen:

Ja, jetzt hab ich es auch, danke Lothar!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Häns schrieb:
> Ich habe es GELESEN, mit TEXTMARKER MARKIERT
> und dann NICHT MEHR WEITER BEACHTET.
EXTREM... ;-)

von Häns (Gast)


Lesenswert?

Lothar Miller schrieb:
> EXTREM... ;-)

Ja, extrem dämlich!

von Häns (Gast)


Lesenswert?

So: Nachdem ich jetzt verzweifelt versucht habe, das entsprechende 
Register für die Kalibrierung zu beschreiben, der ADC sich aber 
geweigert hat, diesen Wert anzunehmen...habe ich nun noch 
überraschenderweise feststellen müssen, dass:

1100 0110 hexadezimal 0x06 und NICHT 0x07 sind ;-)

Und siehe da: Alles geht.

Also danke nochmal für die Mühe!

von Häns (Gast)


Lesenswert?

Äh...C6 und C7

LOL, aber im Programm war's jetzt richtig :)

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.