Autor |
|
|
|
BID = 78190
danyo Gerade angekommen
Beiträge: 5
|
|
Hallo!
Ich bin gerade dabei, eine Messwert-Erfassung mit einem µC-gesteuerten AD-Wandler zu programmieren. Der µC ist ein Mitsubishi M16C62 und der AD-Wandler ein 24bit Burr-Brown ADS1211.
Folgendes Problem habe ich: Der gemessene Wert vom ADC schwankt in konstanten Abständen (20mV) um 40mV.
Zur Erklärung: bei einer eingestellten Analog-Eingangsspannung von 1,000V misst der ADC bis 1,020V richtig, ab einer Spannung von 1,021V rutscht er jedoch auf 0,981V, also um 40mV nach unten. Dieses Verhalten besteht dann bis 1,040V. Ab 1,041V rutscht er dann wieder um 40mV hoch auf korrekte 1,041V, ab 1,061V dann wieder nach unten. So verhält er sich über den ganzen Messbereich hinweg bis Full-Scale 5V.
Hat jemand von euch schon einmal die gleiche Erfahrung gemacht oder eine Erklärung dafür?
Gruß Danyo |
|
BID = 78193
Benedikt Inventar
Beiträge: 6241
|
|
Erklärung: Du hast ein paar Bits vertauscht, das erklärt nämlich genau dieses Verhalten... |
|
BID = 78199
danyo Gerade angekommen
Beiträge: 5
|
Weisst du zufällig auch, wie so eine Bit-Vertauschung zustande kommen kann?
Ich mache eigentlich keine großen Umstände. Ich lese aus dem 24bit Daten-Register alle 3 Bytes binär aus, shifte das 2.Byte um 8Bit und das 3.Byte um 16Bit nach links. Multiplizere den Wert schließlich mit V_ref/2^23, um den Analogwert zu erhalten. (23Bit wegen einem Vorzeichen-Bit).
Mehr mache ich nicht..
|
BID = 78201
Benedikt Inventar
Beiträge: 6241
|
Keine Ahnung, ich kenne weder deine Software noch deine Hardware. Das war nur die erste Vermutung, die mir dazu eingefallen ist, und die würde genau das Problem erklären.
Bei was für Werten (nicht die Spannungswerte, sondern die gelesenen Zahlen aus dem ADC) springen die Messwerte ?
|
BID = 78209
danyo Gerade angekommen
Beiträge: 5
|
Ok... Dann mal los. :-)
Also meiner Meinung nach stimmt was mit dem Bit 16 nicht (wenn 1.Bit = Bit 0). Die letzten drei Byte hab ich ausgeblendet, da die erst mal keine Rolle spielen (µV-Bereich)
40mV zu wenig angezeigt:
bei 1,014V => 0001 1000 1111 .... .... ....
jetzt Sprung zur korrekten Anzeige:
bei 1,016V => 0001 1010 0000 .... .... .... usw.
bei 1,034V => 0001 1010 0111 .... .... ....
jetzt wieder Sprung zu 40mV zu wenig:
bei 1,036V => 0001 1001 1000 .... .... .... usw.
bei 1,054V => 0001 1001 1111 .... .... ....
jetzt wieder Sprung zur korrekten Anzeige:
bei 1,056V => 0001 1011 0000 .... .... ....
Wie man sieht, wird irgendwie immer ein Bit-Wert übersprungen...
|
BID = 78213
Benedikt Inventar
Beiträge: 6241
|
Kann es sein, dass du beim Lesen die Daten am falschen Zeitpunkt liest ? Warscheinlich stimmen dann auch bit 8 und bit 24 nicht...
|
BID = 78219
danyo Gerade angekommen
Beiträge: 5
|
Naja, das glaub ich eigentlich nicht. Bit 8 hab ich zwar nicht ausgelesen da es bei 5V auf 23 bit nur ca. 76µV entspricht und eh hin und her wackelt. Bit 24, also das Vorzeichen haut aber hin.
|
BID = 78287
perl Ehrenmitglied
Beiträge: 11110,1 Wohnort: Rheinbach
|
Bist du sicher, daß der ADC das macht ?
Evtl. hat deine Spannungsquelle ja eine Macke, oder es ist ein Softwarebug.
_________________
Haftungsausschluß:
Bei obigem Beitrag handelt es sich um meine private Meinung.
Rechtsansprüche dürfen aus deren Anwendung nicht abgeleitet werden.
Besonders VDE0100; VDE0550/0551; VDE0700; VDE0711; VDE0860 beachten !
|
BID = 78759
danyo Gerade angekommen
Beiträge: 5
|
Hat sich erledigt. War nur ein Fehler bei der Variablendeklaration der einzelnen Bytes, die zum 24bit-Wert zusammengefasst werden. Die mussten alle als 'long int' deklariert werden.
Trotzdem danke!
MfG Danyo
|