# Wie stellt ein A/D-Wandler die gemessenen Werte dar?



## oliver.tonn (2 September 2021)

Hallo,
leider ist es schon sehr lange her, dass ich mit solchen Komponenten zu tun hatte und eine Antwort auf meine Frage weiß ich leider nicht mehr und auch Datenblätter die ich via Tante Google gefunden habe brachten mich nicht weiter.
In analogen Eingangskarten werkelt ja ein A/D-Wandler mit einer bestimmten Bittiefe. Das Ergebnis wird dann ja meist hochskaliert z.B. auf 15 Bit, so das z.B. bei Beckhoff ein Bereich von -32768 - 32767 an die SPS ausgegeben wird, aber wie sieht das bei einem A/D-Wandler direkt aus? Angenommen dieser hat 12 Bit, gibt er dann entsprechend Zahlen von -2048 - 2047 und bei einer rein positiven Messung 0 - 4095 aus oder wie?


----------



## Heinileini (2 September 2021)

Moin Oliver,
ich behaupte mal - ohne es wirklich zu wissen - dass der analoge Wert *vor *der AD-Wandlung quasi "per Poti" so skaliert wird, dass die zur Verfügung stehenden Bits optimal genutzt werden.
Wie viele Bits der jeweilige AD-Wandler hat (ob z.B. 10 oder 13 oder 16) ist schnuppe, wenn diese Bits *linksbündig* in das ErgebnisWort gestellt werden. Unterschiedlich ist dann nur die Feinheit/Granularität.


----------



## oliver.tonn (2 September 2021)

Heinileini schrieb:


> Moin Oliver,
> ich behaupte mal - ohne es wirklich zu wissen - dass der analoge Wert *vor *der AD-Wandlung quasi "per Poti" so skaliert wird, dass die zur Verfügung stehenden Bits optimal genutzt werden.
> Wie viele Bits der jeweilige AD-Wandler hat (ob z.B. 10 oder 13 oder 16) ist schnuppe, wenn diese Bits *linksbündig* in das ErgebnisWort gestellt werden. Unterschiedlich ist dann nur die Feinheit/Granularität.


Danke, das ist mir schon klar, dass Beckhoff, Siemens und Co. das umrechnen, mir geht es aber tatsächlich darum, was ein A/D-Wandler selber ausgibt.


----------



## Heinileini (2 September 2021)

oliver.tonn schrieb:


> Danke, das ist mir schon klar, dass Beckhoff, Siemens und Co. das umrechnen, mir geht es aber tatsächlich darum, was ein A/D-Wandler selber ausgibt.


Der AD-Wandler gibt ein Konglomerat von n Bits aus, das eine BinärZahl darstellt.
Ob diese bereits im ZweierKomplement dargestellt ist, mag sein, mag nicht sein, spielt auch keine Rolle. Das rückt dann ggfs die ADU-Karte (das "Drumherum" des ADU) zurecht.


----------



## oliver.tonn (2 September 2021)

Heinileini schrieb:


> Der AD-Wandler gibt ein Konglomerat von n Bits aus, das eine BinärZahl darstellt.
> Ob diese bereits im ZweierKomplement dargestellt ist, mag sein, mag nicht sein, spielt auch keine Rolle. Das rückt dann ggfs die ADU-Karte (das "Drumherum" des ADU) zu recht.


Hallo Heinileini,
in meinem Fall ist dieses Detail aber leider wichtig, wäre es mir egal hätte ich mir meine Frage geschenkt. Wie gesagt ich habe schon nach Infos gegoogelt aber nocht nichts passendes gefunden.


----------



## Heinileini (2 September 2021)

oliver.tonn schrieb:


> in meinem Fall ist dieses Detail aber leider wichtig,


Warum eigentlich? Willst Du selbst so etwas basteln? Dann müsstest Du die Datenblätter der entsprechenden Chips studieren.


----------



## oliver.tonn (2 September 2021)

OK, ich wollte es eigentlich nicht an die große Glocke hängen, aber es lässt sich ja langsam nicht mehr verheimlichen. Ich habe den Auftrag angenommen und schreibe das Buch "SPS für Dummies" und da sollen solche Details, wenn auch nur am Rande, auch Erwähnung finden.


Heinileini schrieb:


> Dann müsstest Du die Datenblätter der entsprechenden Chips studieren.


Das hatte ich schon, bin aber leider nicht schlauer geworden.


----------



## Heinileini (2 September 2021)

oliver.tonn schrieb:


> Das hatte ich schon, bin aber leider nicht schlauer geworden.


Was fehlt Dir denn jetzt noch, Oliver?
Anscheinend habe ich Deine Frage bzw. das gesuchte Detail noch nicht richtig verstanden.


----------



## oliver.tonn (2 September 2021)

Heinileini schrieb:


> Was fehlt Dir denn jetzt noch, Oliver?
> Anscheinend habe ich Deine Frage bzw. das gesuchte Detail noch nicht richtig verstanden.


Die Analogkarten von Beckhoff (und anderen auch) wandeln intern mit z.B. 12 Bit und skalieren das Ganze dann auf 15 Bit hoch. Also bei 10V kommt in der SPS 32767 an. Ich möchte jetzt gerne wissen was der A/D-Wandler bei 12 Bit ausgibt. Bei nur positiv messenden Karten würde ich jetzt mal 4095 oder, falls das 12 Bit nur für ein (nicht genutztes) Vorzeichen verwendet wird, 2047 erwarten. Interessanter wird es bei Karten die negative und positive Spannungen messen können, hier gibt die Karte ja bei -10V 32768 und bei +10V 32767 aus, aber was macht der A/D-Wandler? Steht da dann bei 12 Bit -2048 und 2047 an oder sind die 12 Bit ohne Vorzeichen, dann wären es -4096 und 4095, oder kommt da was ganz anderes raus?
Was mir dabei einfällt, aufgrund des Zweierkompliments geht es bei 15 Bit in negative Richtung ja bis -32768 und in positive Richtung bis 32767. Würde das bedeuten, dass die Schrittweite bei negativen Spannungen 305,174 microV wäre, bei positiver Spannung aber 305,185 microV? Ja, ich weiß, das ist Erbsenzählerei, denn da spuckt einem ja noch die Messungenauigkeit in die Suppe.


----------



## oliver.tonn (2 September 2021)

So, ich habe Tante Google noch etwas gequält und bin etwas weiter. Soweit ich das jetzt richtig verstehe bedeuten die 12 Bit bei einem A/D-Wandler, das er inklusive Vorzeichen 12 Bit hat. Bei einer positiven Spannung gibt er beim Maximum 2047 aus. Bei einer negativen Spannung gibt er beim Maximum, oder besser Minimum dass -2047 aus und nicht -2048. Also zusammengefasst, er gibt Werte von -2047 - 2047 aus und die Kartenhersteller (z.B. Beckhoff) machen daraus dann z.B. -32768 - 32767 und nicht -32767 - 32767, warum auch immer.
Kann das einer bestätigen?


----------



## Heinileini (2 September 2021)

oliver.tonn schrieb:


> Würde das bedeuten, dass die Schrittweite bei negativen Spannungen 305,174 microV wäre, bei positiver Spannung aber 305,185 microV? Ja, ich weiß, das ist Erbsenzählerei, denn da spuckt einem ja noch die Messungenauigkeit in die Suppe.


Ich komme zwar auf -305,176 µV (bei der Aufteilung von -10 V auf den Bereich von 32768 Stufen), aber die 2 nV machen den Kohl nicht fett.
Du tummelst Dich wirklich im Bereich der ErbsenZählerei.
Es gibt keinen Grund im negativen Bereich mit einer anderen Abstufung zu rechnen, als im positiven Bereich.
Wenn die Karte -10 V .. 0 .. 10 V kann bzw. können soll, so wäre es ohnehin utopisch, die Grenzwerte -32768 und 32767 genau auf -10,000000 V und + 10,000000 V zu legen, weil man dann nie weiss, ob z.B. der gemessene Wert genau 10,000000 V beträgt oder mehr (Überlauf, den man aber dann nicht als solchen erkennt).
Die ZahlenBereiche werden z.T. an die Unterläufe/Überläufe "verschwendet" (insbesondere bei den Siemens-Gepflogenheiten).



oliver.tonn schrieb:


> Also zusammengefasst, er gibt Werte von -2047 - 2047 aus und die Kartenhersteller (z.B. Beckhoff) machen daraus dann z.B. -32768 - 32767 und nicht -32767 - 32767, warum auch immer.
> Kann das einer bestätigen?


Kann ich so nicht bestätigen. Der KartenHersteller schiebt einfach den Wert des ADU um die fehlende Anzahl BitPositionen nach links, zumindest wenn der Hersteller mitgedacht hat und ADUs bzw. ADU-Karten mit unterschiedlichen Bitzahlen im Angebot hat.

Was mich an den Angaben der Hersteller stört, ist, wenn von n Bit plus VorzeichenBit die Rede ist. Das hat schon so manchen irritiert ...


----------



## oliver.tonn (2 September 2021)

Heinileini schrieb:


> Ich komme zwar auf -305,176 µV (bei der Aufteilung von -10 V auf den Bereich von 32768 Stufen), aber die 2 nV machen den Kohl nicht fett.


OK, Du hast recht, da waren wieder die dicken Finger am Werk.


Heinileini schrieb:


> Kann ich so nicht bestätigen. Der KartenHersteller schiebt einfach den Wert des ADU um die fehlende Anzahl BitPositionen nach links, zumindest wenn der Hersteller mitgedacht hat und ADUs bzw. ADU-Karten mit unterschiedlichen Bitzahlen im Angebot hat.


Da muss ich leider widersprechen, hier mal ein Auszug aus der Anleitung von Beckhoff.


Allerdings weiß ich nicht wie bei 12 Bit die 0x7FFF und 0x8000 Zustandekommen.  Aber das bei Beckhoff bei +10V 32767 anliegen kann ich eigener Erfahrung bestätigen, da wird tatsächlich hochskaliert und nicht einfach geschoben.


Heinileini schrieb:


> Was mich an den Angaben der Hersteller stört, ist, wenn von n Bit plus VorzeichenBit die Rede ist. Das hat schon so manchen irritiert ...


Das stimmt


----------



## hucki (2 September 2021)

oliver.tonn schrieb:


> ... da wird tatsächlich hochskaliert und nicht einfach geschoben.


🤔 
Kommt doch auf's Gleiche raus, oder?
Schieben ist wie Skalieren/Multiplizieren mit entsprechendem Faktor.


----------



## Heinileini (2 September 2021)

oliver.tonn schrieb:


> Da muss ich leider widersprechen, hier mal ein Auszug aus der Anleitung von Beckhoff.


Das nehme ich ganz gelassen hin und berufe mich darauf, das viele bis alle Wege ins ROM führen.  


oliver.tonn schrieb:


> Allerdings weiß ich nicht wie bei 12 Bit die 0x7FFF und 0x8000 Zustandekommen.  Aber das bei Beckhoff bei +10V 32767 anliegen kann ich eigener Erfahrung bestätigen, da wird tatsächlich hochskaliert und nicht einfach geschoben.


Woraus erkennst Du, dass nicht einfach geschoben wird? "Geschoben" kann im einfachsten Fall bedeuten, dass das höchstwertige Bit des 12-Bit-Chips auf das höchstwertige Bit des 16-Bit ErgebnisRegisters verdrahtet ist u.s.w.. Dafür ist nicht unbedingt ein SchiebeRegister oder eine CPU nötig.


----------



## oliver.tonn (2 September 2021)

Heinileini schrieb:


> Das nehme ich ganz gelassen hin und berufe mich darauf, das viele bis alle Wege ins ROM führen.
> 
> Woraus erkennst Du, dass nicht einfach geschoben wird? "Geschoben" kann im einfachsten Fall bedeuten, dass das höchstwertige Bit des 12-Bit-Chips auf das höchstwertige Bit des 16-Bit ErgebnisRegisters verdrahtet ist u.s.w.. Dafür ist nicht unbedingt ein SchiebeRegister oder eine CPU nötig.


Beim schieben können die untersten Bits nie 1 werden, dass ist bei Beckhoff aber der Fall. Wenn eine 12 Bit Zahl um vier Bits nach links geschoben wird sind die untersten vier Bits immer 0.


----------



## Heinileini (2 September 2021)

oliver.tonn schrieb:


> Beim schieben können die untersten Bits nie 1 werden, dass ist bei Beckhoff aber der Fall. Wenn eine 12 Bit Zahl um vier Bits nach links geschoben wird sind die untersten vier Bits immer 0.


Dafür muss sich aber Beckhoff rechtfertigen, dass sie einfach irgendwelche Einsen dazuzaubern!

Andererseits, in Deinem BeckhoffSchema steht etwas von "Filter". Das kann natürlich ZwischenWerte dazuzaubern.



hucki schrieb:


> 🤔
> Kommt doch auf's Gleiche raus, oder?
> Schieben ist wie Skalieren/Multiplizieren mit entsprechendem Faktor.


Im Prinzip ja, hucki,
aber wenn man für seine beim Skalieren verwendeten Zahlen nur eine sparsame Anzahl Bits hat, dann sollte man auf eine derbe Verschlechterung der Genauigkeit gefasst sein.


----------



## PN/DP (2 September 2021)

oliver.tonn schrieb:


> Allerdings weiß ich nicht wie bei 12 Bit die 0x7FFF und 0x8000 Zustandekommen.  Aber das bei Beckhoff bei +10V 32767 anliegen kann ich eigener Erfahrung bestätigen


Gibt es bei Beckhoff bei 12 Bit ADU ungerade Werte < +32767?

Harald


----------



## PN/DP (2 September 2021)

Ich könnte mir vorstellen, daß bei Beckhoff ein 12 Bit ADU -10V..+10V in Wahrheit etwa so wandelt:
-10,0V .. 0 .. +9,995V ---> 12 Bit: 16#0800 .. 0 .. 16#07FF ---> Shift zu 16 Bit: 16#8000 .. 0 .. 16#7FF0 (also 4 0-Bits anhängen)
und erst wenn vom ADU auch noch positiver Überlauf signalisiert wird, dann wird das Ergebnis auf 16#7FFF = +32767 gesetzt.

Harald


----------



## oliver.tonn (3 September 2021)

PN/DP schrieb:


> Gibt es bei Beckhoff bei 12 Bit ADU ungerade Werte < +32767?


Hallo Harald,
gerade mal getestet, ja gibt es. Ich denke mal es ist, wie @Heinileini schrieb. Durch die Nachbehandlung kommen die unteren 1en zustande. Warum die bei den negativen Zahlen aber unbedingt bis 32768 gehen wollen ist ein Rätsel.
Wie sieht das übrigens bei Siemens aus? Ist da der Wert geschoben, oder skaliert?


----------



## PN/DP (3 September 2021)

oliver.tonn schrieb:


> gerade mal getestet, ja gibt es. Ich denke mal es ist, wie @Heinileini schrieb. Durch die Nachbehandlung kommen die unteren 1en zustande.


Diesen "Zauber" sollte Beckhoff mal genauer erklären. Durch Skalieren mit krummen Werten und dann Wandlung zu Ganzzahl könnte sich die Genauigkeit des Ergebnisses geringfügig verschlechtern.
Oder Du testest mal an einer Beckhof-Analogkarte, genau welche Eingangswerte da (bei einer Signal-Rampe) geliefert werden, welche Sprünge die Werte da machen. PS: könnte es sein, daß die 1-Bits durch Statistik/Mittelwertbildung entstehen?



oliver.tonn schrieb:


> Warum die bei den negativen Zahlen aber unbedingt bis 32768 gehen wollen ist ein Rätsel.


Kleinster Wert = -32768 wiederum ist eigentlich kein Rätsel, sondern "natürliche" Folge, wenn man möglichst wenig den ADU-Wert manipuliert. -32768 = 16#8000 entspricht "alle Bits 0" verschoben zu Zweierkomplement.



oliver.tonn schrieb:


> Wie sieht das übrigens bei Siemens aus? Ist da der Wert geschoben, oder skaliert?


Bei Siemens gibt es zwischendurch keine ungeraden Werte, da "springen" die Werte in 16er Schritten (0 - 16 - 32 - 48 - 64 - ...) ---> es werden also 0-Bits angehängt/aufgefüllt. Entweder durch feste Verdrahtung oder durch Schieben.

Harald


----------



## Heinileini (3 September 2021)

oliver.tonn schrieb:


> Warum die bei den negativen Zahlen aber unbedingt bis 32768 gehen wollen ist ein Rätsel.


Hätten sie den Bereich auf -32767 .. +32767 eingeschränkt, so würden sicherlich viele "auf die Barrikaden gehen".
Zumindest diejenigen, die sich an die ZweierKomplementDarstellung gewöhnt UND ihre Vorteile zu schätzen gelernt haben.
Wenn ich höre/lese, dass Beckhoff nicht daran herumgefummelt hat, beruhigt mich das. Vor allem vor dem Hintergrund, dass Beckhoff andererseits scheinbar (nicht anscheinend!) die Genauigkeit zu erhöhen versucht.



PN/DP schrieb:


> PS: könnte es sein, daß die 1-Bits durch Statistik/Mittelwertbildung entstehen?


Sicher doch, Harald!
Ich vermute mal, dass sich genau das hinter dem Begriff 'Filter' verbirgt. Ist ja nicht gesagt, dass sie "nur" z.B. 50 Hz wegfiltern wollen.


----------



## oliver.tonn (3 September 2021)

PN/DP schrieb:


> Kleinster Wert = -32768 wiederum ist eigentlich kein Rätsel, sondern "natürliche" Folge, wenn man möglichst wenig den ADU-Wert manipuliert. -32768 = 16#8000 entspricht "alle Bits 0" verschoben zu Zweierkomplement.


Wenn ich die diversen Artikel über A/D-Wandler richtig verstehe arbeiten die eigentlich immer symmetrisch, also z.B. -2047 - +2047 bei 12 Bit.


PN/DP schrieb:


> Bei Siemens gibt es zwischendurch keine ungeraden Werte, da "springen" die Werte in 16er Schritten (0 - 16 - 32 - 48 - 64 - ...) ---> es werden also 0-Bits angehängt/aufgefüllt. Entweder durch feste Verdrahtung oder durch Schieben.


Super, danke für die Info, damit kann ich arbeiten.


----------



## ducati (3 September 2021)

macht Beckhoff wirklich bei 10V 32767???

Bei Siemens ist jedenfalls 0...10V -> 0...27648

Die größeren/kleineren INT-Werte sind dann für "Sonderfunktionen" wie Übersteuerungsbereich, Überlauf, Untersteuerungsbereich, Unterlauf usw.

d.h. der AD-Wandler macht auch noch etwas mehr als nur 0...10V


----------



## Heinileini (3 September 2021)

ducati schrieb:


> Bei Siemens ist jedenfalls 0...10V -> 0...27648
> Die größeren/kleineren INT-Werte sind dann für "Sonderfunktionen" wie Übersteuerungsbereich, Überlauf, Untersteuerungsbereich, Unterlauf usw.
> d.h. der AD-Wandler macht auch noch etwas mehr als nur 0...10V


Die "Sonderfunktionen" kann man aber auch in eigenen StatusBits ausserhalb des ErgebnisWorts unterbringen.


----------



## Thruser (3 September 2021)

@Oliver
denk auch mal an Deine FAQ. Die Leute haben so schon Probleme mit der Umrechnung der Werte auf die Meßgröße. Wie man an den diversen Nachfragen sieht.

Wenn man jetzt die Werte als 8, 10, 12 oder 16 Bit Werte angeben würden müßte man entsprechend viele Skalierungsbausteine haben. Durch das Verschieben nach links wird alles auf 16 Bit abgebildet und es wird nur noch ein Baustein benötigt. 

Problem ist dabei aber, daß bei 16 Bit der größte pos. Wert 32767 (15^2-1) ist, während es bei 12 Bit 4095 (2^12-1). Verschiebt man jetzt nur um 3 Stellen wären der größte Werte aber nur 32760, so daß man mit dem Skalierungsbaustein den oberen Grenzwert nicht erreicht. Daher wird da wohl mit entsprechenden Bits aufgefüllt.

@Alle 
ich verstehe auch nicht warum 16 Bit Karten im allgemeinen inklusive Vorzeichen sind, 12 Bit Karten aber exklusive

Zum Glück verwendet Wago bei neueren Karten auch Unter- und Übersteuerungsbereiche bzw. lassen sich verschiedene Analogwertdarstellungen einstellen.

Dieses konsequente Abschneiden, z.B. bei 4 mA -> 0 bzw. 20 mA -> 32767, an den Grenzen stört gewaltig. Besonders wenn man die Grenzen auch benötigt und der eigene Eingang nicht mit der Gegenstelle übereinstimmt was denn nun 4 oder 20 mA sind.

Gruß


----------



## PN/DP (3 September 2021)

oliver.tonn schrieb:


> Wenn ich die diversen Artikel über A/D-Wandler richtig verstehe arbeiten die eigentlich immer symmetrisch, also z.B. -2047 - +2047 bei 12 Bit.


Ein so symmetrisch angegebener Wandler-Teilbereich sieht "schöner" aus, das ist aber nicht der gesamte ADU-Wandlerbereich, weil da fehlt noch eine Stufe. Da würde das Signal auf ungerade 4095 Stufen umgesetzt - das macht ein normaler 12-Bit-ADU aber nicht, sondern erzeugt 4096 Stufen zwischen einem unteren und einem oberen Grenzwert (Full Scale). Dabei ist auch unerheblich, ob das nun ein bipolarer Eingangsspannungsbereich -10V..+10V oder ein unipolarer Eingangsspannungsbereich 0..+20V ist, der ADU wandelt sowieso nur die Spannungsdifferenz zu einer Bezugsspannung um.

Ich vermute mal, ein ADU -10V..+10V zu -2047..+2047 ist in Wirklichkeit ein ADU -10,00488V..+10V zu -2048..+2047. Oder ist da garantiert, daß der Wert 16#800 = -2048 oder +2048 (oder auf 16 Bit hochgezogen 16#8000 = -32768) als Ergebnis nie vorkommt?

Im Rahmen der Messgenauigkeit macht es praktisch wohl auch keinen bemerkbaren Unterschied, ob das nun ein ADU
* -10V..+10V zu -2047..+2047 oder
* -10V..+10V zu -2048..+2047 oder
* -10,00488V..+10V zu -2048..+2047
ist.

Bei dem systembedingten Quantisierungsfehler von 1/2 LSB kann man auch noch unmerklich einen Nullpunktfehler von 1/2 LSB verstecken.

Harald


----------



## roger34 (6 September 2021)

Weiss nicht ob es schon geschrieben worden. 
Im Prinzip wird ja in der Produktion der Messwert abgeglichen. Also offset und gain. Somit ergeben sich auch in den unteren Stellen sinnvolle Zahlen welche nicht zwingend Null sein müssen.

Gute Beschreibung findet man hier. Bei TI musst du dich aber registrieren
TI Circuit cookbooks Dataconverters


			https://www.ti.com/design-resources/design-tools-simulation/analog-circuits/overview.html
		






						Analog Learning Materials
					






					university.ti.com


----------

