Forum: Mikrocontroller und Digitale Elektronik MAX1416 misst nur die hälfte der angelegten Spannung


von Paul (Gast)


Lesenswert?

Hi folks,

Ich nutze den MAX1416 16 bit ADC um einen DMS Kraftsensor auszulesen.
Der Sensor wird mit 10V versorgt und gibt 2mV/V aus, also bei voller 
Belastung (in dem Fall 2kN) = 20mV. Genutzt wird beim ADC : channel 
AIN1+, AIN1-, bipolar, gain= 128, unbuffered, interner takt 2.4576MHz, 
500Hz data output rate, externe 2.5 Vref.
Soweit so gut, die Kommunikation mit dem ADC über SPI läuft einwandfrei 
und ich nutze DRDY über nen externen INT um die Daten auszulesen.
Wie gesagt so weit so gut, aber ich erhalte nur die Hälfte der 
eigentlichen anliegenden Spannung als Daten zurück.
Das was an Daten rauskommt entspricht also eher, oder sogar ziehmlich 
genau, einer Verstärung von 64 und nicht 128!
Z.B. der ADC liefert mir als nullwert ca. 32768, wenn ich nun den Sensor 
mit ca. 85Kg belaste bekomme ich einen Wert von ca. 39768 also eine 
Änderung von ca. 7000 bei dem 2kN Sensor macht das ein aufgelegtes 
Gewicht von 7000 / (32768 / 2000) = 427.246N ~ 42.7Kg also ziehmlich die 
Hälfte von dem was er eigentlich anzeigen müsste.
Ich hab zur Konfiguration des ADC das configuration tool auf der Maxim 
webseite benutzt : 
http://www.maxim-ic.com/tools/calculators/index.cfm/calc_id/ac40tool

mein setup sieht wie folgt aus :
// write to com register, select chan AN1+, AN1- and select next write 
to clock register
SPI_send_byte(0x20);
// select internal clock, 2.4576MHz, CLKDIV = 1, CLKOUT = disabled, 
500HZ data output rate
SPI_send_byte(0xb7);
// write to com register, select chan AN1+, AN1- and select next write 
to setup register
SPI_send_byte(0x10);
// select selfcalibration, gain = 128, bipolar, no internal buffer, 
FSYNC = run
SPI_send_byte(0x78);
_delay_ms(50);
// etwas zeit für die selfcalibration lassen....

das sollte eigentlich ausreichen und der ADC beginnt nach der 
selfcalibration mit der Wandlung und signalisiert das über DRDY

in meinem ext int handler siehts so aus:
// write to com register, select chan AN1+, AN1-, next read from data 
register
SPI_send_byte(0x38);
// read from data register
AD_value0 = (uint16_t)(SPI_send_byte(0)<<8); // ist es eigentlich egal 
was ich dem adc an dieser Stelle schicke???
AD_value0 += SPI_send_byte(0);

eigentlich kein Hexenwerk...

die Ausgänge des Sensors sind natürlich mit AIN1+ und AIN1- verbunden, 
(zwischen ADC und den AIN pins liegt noch wie im Datenblatt empfohlen 
ein 100nF C nach Masse.
Die Versorgungsspannung 5V ist stabil, die Spannungsreferenz 2.5V ist 
stabil, die Sensorspannunsgversorgung 10V ist stabil. Es kann eigentlich 
nur noch an der Software bzw. am setup des ADC liegen.

...hat vielleicht von euch schonmal jemand mit dem MAX1416 zu tun gehabt 
oder kennt vielleicht ähnliche Probleme mit dem Teil oder hat 
möglicherweise sogar eine Lösung parat?

MfG
Paul

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Paul schrieb:
> genutzt wird beim ADC : channel
> AIN1+, AIN1-, bipolar

Und der Sensor liefert auch ein bipolares Signal? Wenn er das nicht 
tut, dürfte das das von Dir wahrgenommene Phänomen erklären.

von Paul (Gast)


Lesenswert?

der Sensor liefert definitiv ein bipolares signal, ist für Zug und Druck 
ausgelegt

von Paul (Gast)


Lesenswert?

...hmm... nachdem ich mir das Datenblatt nochmal durchgelesen habe ist 
mir da ein Diagramm über maximum external resistance vs maximum external 
capacity aufgefallen (Seite 20 rechts unten). Könnte es sein das die 
Kombination aus DMS Brücke (Eingangswiderstand 350 oder 380 Ohm, weiss 
nicht mehr so genau) und die 100nF nach GND vor dem AIN1+ und AIN1- 
Input des ADC einen Verstärkungsfehler erzeugen, der für das Problem 
verantwortlich ist?
... nachdem ich nun zum 100sten male alles andere durchgecheckt habe und 
es zu dem ollen ADC auch nirgends irgendwo im Netz irgendwelche wirklich 
brauchbaren Beispiele oder tutorials oder was auch immerzu geben 
scheint, gehen mir die Ideen aus...


MfG
Paul

von Arc N. (arc)


Lesenswert?

Noch mal kurz nachgerechnet:
2 kN ~ 20 mV also 10uV/N
1 LSB = 2 * 2.5V / (128 * 65536) ~ 596 nV
85 kg ~ 833 N mit 10uV/N * 833 = 8.3 mV
7000 * 596 nV ~ 4.17 mV ~ 417 N
passt (mehr oder weniger).

Schonmal mit Buffer gemessen oder mit einer anderen Verstärkung 
gemessen?
Sicher das der DMS mit 10V betrieben wird? Falls der in einer 
Wheatstone-Brücke sitzt wäre die Spannung an den Abgriffen 5V +- x was 
zwar noch innerhalb der Maximum Ratings wäre, aber nicht zu also genauen 
Ergebnissen führen kann...

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.