Guten Abend,
ich habe bis jetzt meist an Kommunikationen programmiert.(Can Modbus
Devicenet usw)
Nun möchte ich mich mal an den Adc wagen. Ich habe jedoch noch nicht
ganz verstanden wie das mit den Differenzial Eingängen eines Adc ist.
Ich habe bis jetzt Atmel STM32 und Pic programmiert.
Konkret würde ich jetzt den StmF3 nehmen.
Wenn ich nun zB an den negativen Eingang des Adc eine Spannung von 1,65V
anlege und am Positiven Eingang eine Spannung von 825mV anlege bekomme
ich dann als Ergebnis 0 oder ist dann das Ergebnis 1023?
Danke für Eure Hilfe
extra schrieb:> Wenn ich nun zB an den negativen Eingang des Adc eine Spannung von 1,65V> anlege und am Positiven Eingang eine Spannung von 825mV anlege bekomme> ich dann als Ergebnis 0 oder ist dann das Ergebnis 1023?
Im Prinzip "Weder noch".
Abgesehen davon, dass der Ausgang natürlich abhängig von der Auflösung
und der Referenzspannung ist, beherrschen diff. ADCs negative
Differenzen, die dann entweder vorzeichenbehaftet sind oder von der
Mitte nach 0 gehen.
Bei 10bit (also 0...1023) könnte der Wandler also bei einer Differenz
von 0V am Eingang ~512 ausgeben. Bei positiver Differenz geht es
Richtung 1023, bei negativer Differenz Richtung 0.
Wenn das Ergebnis ein Vorzeichen hat, dann hast du bei 0V eine 0 als
Ausgang, bei voller positiver Differenz ein Wert von 511, bei voller
negativer Differenz einen Wert von -512.
extra schrieb:> als Ergebnis 0 oder ist dann das Ergebnis 1023?
Differenziell schaltbare ADCs können gerne auch mal Zweierkomplement
ausgeben, d.h. da könnte (je nach Referenz) so um -500 raus kommen.
Differenziell heisst, dass der ADC die Differenz mißt.
Beispiel:
Uneg = 2V
Upos = 1V
Upos - Uneg = -0.5V (Bzw. der Binärwert der -0.5V entspricht)
Fallstricke:
- Der Adc muss für dieses Beispiel natürlich negative Werte wandeln
können
- Die Spannungen Uneg, Upos müssen *jeweils* innerhalb des zulässigen
Bereiches bleiben (meist die Versorungsspannung des Chips) also
Uneg=10V , Upos=11V; Upos-Uneg=1V geht nicht! obwohl 1V durchaus im
Messbereich liegt.
oops da waren andere schon schneller
Also ich bin von 12 Bit Auflösung ausgegangen.
Also bekomme ich bei 0 Differenz (einen Eingang von 1,65V)einen Ergebnis
von 2046?
Habe ich das richtig verstanden?
extra schrieb:> Also bekomme ich bei 0 Differenz (einen Eingang von 1,65V)einen Ergebnis> von 2046?
2048. Entweder das oder eben 0 (mit der Möglichkeit, dann von ~2000 bis
-2000 messen zu können), je nach Wandler.
Die Differenz ist aber auch Null, wenn beide Eingänge auf 0V, auf 1V
oder auf 3V sind. Solange eben die Differenz der beiden Eingänge 0V
beträgt.
Hallo,
danke für die Rückmeldung.
Ich habe den Differenzial Adc nun auf einem ST32F334K8T ausprobiert.
Leider verstehe ich das Ergebnis der Wandlung überhaupt nicht.
Ich habe folgendes probiert.
ADC1 IN1 als Differential
ADC1 In3 als single ended
Folgende Konditionen brachten folgende Wandler Ergebnisse:
PA0 1V PA1 1,65V das Ergebnis der Wandlung war 1570
PA0 1V PA1 3,3V das Ergebnis der Wandlung war 1570
PA0 0V PA1 3,3V das Ergebnis der Wandlung war 1570
PA0 3,3V PA1 3,3V das Ergebnis der Wandlung war 1570
PA0 3,3V PA1 0V das Ergebnis der Wandlung war 1570
PA2 0V Ergebnis der Wandlung war 0
PA2 3,3V Ergebnis der Wandlung war 4060
Die Single Ended Messung sieht ok aus.
Aber bei der Differential Messung kann ich mir keinen Reim drauf machen.
Kann mir jemand etwas auf die Sprünge helfen?
Danke
Mir ist gerade aufgefallen das ich in meinen Beitrag
Beitrag "Re: differential Adc Input etwas unklar"
Einen peinlichen Copy Paste Fehler gemacht habe.
Hier noch mal die richtigen
Werte.PA0 1V PA1 1,65V das Ergebnis der Wandlung war 1570
PA0 1V PA1 3,3V das Ergebnis der Wandlung war 550
PA0 0V PA1 3,3V das Ergebnis der Wandlung war 0
PA0 3,3V PA1 3,3V das Ergebnis der Wandlung war 1980
PA0 3,3V PA1 0V das Ergebnis der Wandlung war 4080
PA2 0V Ergebnis der Wandlung war 0
PA2 3,3V Ergebnis der Wandlung war 4060
Ich bitte viel mals um Entschuldigung.
Danke für die Hilfe
Timo W. schrieb:> Umgerechnet auf 3.3V Referenz:> -478 = -.768V> -1498 = -2.412V> -2048 = -3.3V> -68 = -.108V> 2032 = 3.273V>> Ist zwar etwas ungenau (ADC kalibriert?, Referenzspannung genau?, oder> meine Umrechnung stimmt nicht ganz), aber die Größenordnung stimmt.
Vielen Dank für die Hilfe!
So ganz ist der Groschen noch nicht gefallen:( Kannst du mir bitte den
Rechenweg aufzeigen?
Ich habe den Adc nicht kalibriert. Und die Referenzspannung ist einfach
ein 3V3 Regler wo alles dran hängt.
Mir geht es jetzt aber im ersten Moment um das Verstehen und dann um
das optimieren und genau Messen.
Vielen Vielen Dank für die Hilfe.
extra schrieb:> So ganz ist der Groschen noch nicht gefallen:( Kannst du mir bitte den> Rechenweg aufzeigen?
Du nimmst den ADC-Wert
du subtrahierst davon 2048 (weil dein ADC wohl einen Code liefert, bei
dem 2048 dem Spannungswert 0 entspricht)
du multiplizierst mit V_ref/2048
Welcher Teil ist denn nicht klar?
1. Was wird gemessen?
-> Die Differenz zwischen P(PA0) und N (PA1)
Beispiel: PA0=1V PA1=1,65V
Gemessen wird PA0-PA1 = 1V-1.65V = -0.65V
2. Wertebereich:
Da die Differenz negativ sein kann, ist der Wert um einen
Offset(12Bit/2 = 2048) verschoben. Der gemessene Wert kann von -Vref bis
+Verf, also bei dir -3.3V bis 3.3V, gehen. 0V liegt bei der Hälfte also
bei 12Bit der Wert 2048.
-Vref, -3.3V ergibt den Wert 0
0V ergibt den Wert 2048
+Vref, 3.3V ergibt den Wert 4095
3. Umrechnung, Behandlung von Offset und negativen werten:
Es gibt verschieden Möglichkeiten die Werte weiter zu verarbeiten. Z.B.
die Werte als Spannung zwischen 0 und 6.6V mit Offset 3.3V betrachten
und mit Unsigned weiter rechnen, negative zahlen verwerfen und nur mit
positiven weiter arbeiten, umwandeln in signed, oder auch das vorzeichen
getrennt behandeln.
Ich hab das exemplarisch als Umwandlung in signed vorgerechnet. Dafür
einfach den Offset (2048) vom ADC Wert abziehen. Dabei wird der
Wertebereich von 0 bis 4096 auf -2048 bis +2047 verschoben.
Vorher:
-3.3V = Wert 0
0V = Wert 2048
3.3V = Wert 4095
Nach Subtraktion des Offset:
-3.3V = Wert -2048
0V = Wert 0
3.3V = Wert 2047
Beispiel von oben: 1570-2048 = -478
4. Umrechnung des ADC Wertes in Spannung:
Der Wertebereich des ADC umfasst 2^12 Bit, und entspricht einem
gemessenen Spannungsbereich von 2*Vref. Der Rest ist simpler Dreisatz.
Vielen Dank für die Hilfe!
Danke für die sehr ausführliche Antwort!
So ist es jetzt ziemlich klar:)
Timo W. schrieb:> Der STM32F334x kann übrigens den Offset auch direkt abziehen, dann> liefert der ADC direkt 16Bit signed Werte.
Den Adc direkt in 16Bit signed klingt super!
Kannst Du mir dazu einen Hinweis geben wie ich das einstellen kann?
Echt nochmal ein Mega Danke:)
extra schrieb:> Hält der STM32 in diesem Fall wirklich eine Negative Spannung Aus?
An den Eingängen: NEIN An den Eingängen PA0, PA1 ... muss die Spannung
zwischen 0 und VDDa liegen.
Aber die Differenz zwischen diesen beiden positiven Spannung kann
negativ werden.
Eben maximal -3.3V wie im Beispiel wenn PA0=VinpP=0V und PA1=VinN=3.3V