Forum: Mikrocontroller und Digitale Elektronik Wie funktioniert die "Gain"-Option beim ADC?


von Sebastian Wille (Gast)


Lesenswert?

Hallo,

ich wollte mal die "Gain"-Option beim Mega128 ausprobieren, habe aber
noch einige Fragen dazu:

1.:
Ich habe die MUX-Wahl 01001 getroffen und am ADC1 (Input
Positive Differential) meine Mess-Spannung und am ADC0 (Input
Negative Differential) GND angelegt. Anstatt eine 10fache Verstärkung
bekomme ich aber nur eine ca. 5fache Verstärkung. Warum?

2.:
Wie muß ich bei der MUX-Wahl 01000 meine Mess-Spannung anschließen?
ADC0 ist hierbei sowohl Input Positive Differential als auch Input
Negative Differential.

3.:
Was bringt denn eine 1fache Verstärkung?!?

Vielen Dank!

Sebastian

von Jörg Wunsch (Gast)


Lesenswert?

> Anstatt eine 10fache Verstärkung bekomme ich aber nur eine
> ca. 5fache Verstärkung. Warum?

Wie hoch ist denn Deine Spannung?  Ohne jetzt die Stelle im Datenblatt
zu suchen, wenn Du nach der Verstärkung die maximal mögliche
Eingangsspannung überschreitest, wird der Verstärker wohl sicher
irgendwo begrenzen.

Anderer Fall: stimmt denn Deine Referenz mit Deinen Erwartungen
überein?

> Wie muß ich bei der MUX-Wahl 01000 meine Mess-Spannung anschließen?

Gar nicht. :-)  Du mißt theoretisch 0 V, 10fach verstärkt.  Diese
Kombination wird einfach daraus resultieren, daß der Umschalter für
den negativen Eingang halt so arbeitet, daß bei dieser
Bitkonstellation sowohl positiver als auch negativer Eingang am
gleichen Pin liegen.

In der Praxis kann man diese Variante sicher benutzen, um eine
Offset-Kalibrierung des Meßverstärkers vorzunehmen.

> Was bringt denn eine 1fache Verstärkung?

Genau das, was der ADC auch ohne Vorverstärker schon konnte: die volle
Aussteuerbarkeit (GND bis Avref).

von Sebastian Wille (Gast)


Lesenswert?

Hi Jörg,

danke erstmal für die Antwort! :-)

Ich verwende 0,35V (+/- 1mV) als ADC-Eingang. Zehnfache Verstärkung
müßte also 3,5V bringen. Meine Betriebsspannung ist 3,7V also müßte
doch so 230-240 als 8Bit-Wert rauskommen und nicht 120!

Vielleicht erwartet der Atmel als Input Negative Differential eine
negative Spannung und nicht GND?!?

Du schreibst, daß die 1fache Verstärkung den "normalen" Zweck
erfüllt. Die MUX-Wahl 0 - 7 ist doch aber dafür zuständig. Die 1fache
Verstärkung (1x) wird im Datenblatt extra mehrfach später als MUX-Wahl
angegeben. Schau' mal im Datenblatt (S.243/244) nach, vielleicht wirst
Du da schlauer drauß als ich!

Sebastian

von HansHans (Gast)


Lesenswert?

Hallo,
So Sachen hatte ich auch schon ...

1. Seite 326 Tabel 136 im Datenblatt beachtet ?
Singel Ended Conversion 10 Bit
Gain 1 or 20x    8 Bit
Gain 200x 7 Bit

was soll man noch mit 7Bit ?

Hab´s es zwar schon verwendet aber der Echte Reißer ist es
nicht

2. Das habe ich auch schon mal gefragt und nie eine antwort
gefunden, für was das von Nöten ist .

3. 1 Fach ist halt der Differenzialunterschied mal 1
(aber nur noch 8 Bit !!)

Gruss HansHans

von Sebastian Wille (Gast)


Lesenswert?

Hi Hans,

komisches Datenblatt... Oben steht eine Verstärkung von 10x und in
Table 136 20x. Seltsam!

Aber selbst wenn's nur 8 Bit sind. ADLAR ist 1, damit das ADC-Ergebis
left shifted und das müstste doch trotzdem so 230-240 geben, oder?!?

Für 3.: Das klingt logisch, danke!

Sebastian

von Jörg Wunsch (Gast)


Lesenswert?

Eine typische Verwendung für die 200fache Verstärkung trotz nur 7 Bit
Auflösung (der Rest wird einfach mal in den Störsignalen untergehen)
dürfte ein Stromsensor sein.  Wenn man irgendwo über einem Shunt den
Spannungsabfall messen will, um einen Strom zu bestimmen (Stichwort:
Batterieladegerät), dann hat man ohnehin schon mal wenig
Spannungsdifferenz.  Wenn man in der positiven Leitung mißt, teilt man
dann beide Spannungen u. U. noch herunter, damit sie im Wertbereich
des ADC liegen, damit teilt man also die Spannungsdifferenz noch
weiter.  Mit der 200fachen Verstärkung bekommt man dann wenigstens
wieder was auswertbares daraus.  100 verschiedene Werte sind dabei
sicher gut genug, meist geht es ja nur um eine qualitative
Abschätzung, nicht um irgendeine Messung im Sinne von ,,Meßgerät''.

Naja, und die 1fache ,,Verstärkung'' braucht man eben überall dort,
wo
man zwar differenziell, aber ohne wirkliche Verstärkung arbeiten muß,
weil die Spannungsdifferenz eben den vollen Umfang annehmen kann.

Du hast auch dran gedacht, daß die Differenzwandlung positive und
negative Werte ergeben kann (also einen signed integer), während die
single-ended conversion immer positive Werte (einen unsigned int)
ergibt?  Damit sind effektiv für den Betrag bei der Differenzmethode
nur noch 9 bit übrig.

von Sebastian Wille (Gast)


Lesenswert?

Hi Jörg,

danke für die Erklärungen!

Hm, wenn das ganze signed ist, würde ja alles passen! Meine gemessenen
120 x2 = 240, genau meine Vermutung!

Aber kann das sein? Der ADC nimmt GND als - und meine 3,7V als +. Müßte
dann 1,85V nicht 0 ergeben? 3,7V dann 127? Und GND vor allem 255? Wegen
signed?

Ich bekomme aber von 0V bis 0,35V einen Anstieg von 0 auf 120 und nicht
von 255 auf 0 auf 127.

Sebastian

von Jörg Wunsch (Gast)


Lesenswert?

> Müßte dann 1,85V nicht 0 ergeben?

Nein, 0 wäre ja 0 V Spannungsdifferenz.  Da Du einen Eingang auf GND
hast, kannst Du nur den halben Wertebereich nutzen.  0 bekommst Du
dann, wenn der Meßeingang ebenfalls auf 0 liegt.  Negative Werte
bekämst Du für negative Spannungen am Meßeingang, aber die sind
wahrscheinlich (Datenblatt habe ich jetzt nicht verglichen) elektrisch
verboten.  Naja, -200 ... -100 mV gehen vielleicht gerade noch, weil
da zumindest die Schutzdioden nicht ansprechen, kann aber gut sein,
daß der Eingangsverstärker Spannungen negativer als GND einfach mal
nicht verarbeiten kann.

von Sebastian Wille (Gast)


Lesenswert?

Hi Jörg,

hm, Du hast recht, negative Spannungen mag er normal nicht. Was bringt
dann aber signed?!?

Naja, dann leb' ich halt damit, daß ich anstatt 10x nur 5x Verstärkung
bekomme.

Sebastian

von Axel Rühl (Gast)


Lesenswert?

<Zitat>
hm, Du hast recht, negative Spannungen mag er normal nicht. Was bringt
dann aber signed?!?
</Zitat>

Beim Strommessen z.B. Da ist es doch so: fliesst der Strom in eine
Richtung, ist der Spannungsabfall über dem Messwiderstand ,sagen wir,
positiv. Fliesst er in die andere Richtung, halt negativ.
Leigt dein negativer Anschluß bereits am maximal negativ erlaubtem
Potenzial (GND), dann ist klar, dass dann in negativer Richtung nichts
mehr geht. aber schliess doch mal über einen Spannungsteiler den Pin an
halbe Betriebsspannung, dann kommt beim messen der halben
Betriebsspannung 0 heraus, darüber und darunter entsprechende Werte
etweder bis 127 oder eben bis 255. signed, ich glaube, dafür ist das
gedacht.
Grüße ans Forum
AxelR.

von Sebastian Wille (Gast)


Lesenswert?

Hi Axel,

aja, ich werd's mal testen, danke schön!

Sebastian

von HansHans (Gast)


Angehängte Dateien:

Lesenswert?

Genau so ist es wie Axel es schreibt.
Für eine Strommessung in beide Richtungen ist es
zu gebrauchen .
Das habe ich auch schon erfolgreich am laufen ,
habe mal die Handskizze beigefügt .
Beachte R1bis R8
Ich Messe damit den Strom vom bzw in den Akku ,
und rechne im AVR mit, und weis somit wie viel noch
im Akku steckt .
Und habe gleichzeitig je nach Mux register
Akkuspannung,
Akkustrom mit + und – Richtung,
Solarmodulspannung,
oder auch Modulstrom (aber ungenau da Gain nur 1)

Es ist also schon ganz gut verwendbar wenn es nicht um
extreme Genauigkeit geht .

Gruss hanshans

von AxelR. (Gast)


Lesenswert?

Ich muss den Thread mal kurz aufrollen.
Da gebe ich tolle Erkärungen ab und stehe jetzt selber da, wie Max in
der Sonne!
In der Tat ist es so, dass ich eine eigentlich funktionierende
Batterieladeschaltung (MAX1811 an einer LiPo-Zelle) morgen (eigentlich
schon heute) in der Klimakammer untersuchen soll.
Es geht darum zu sehen, wie die Strom un Spanmnungslagen der Zelle
unter 0°C aussehen uws. Ich habe zwar ein USB-Multimeter zum Mitloggen,
aber eben nur mit einem Kanal.
Iss ja alles kein Problem, hab' ich gesagt, und schnell mitm Atmel 3
ADC-Kanäle fertig gemacht (Dank FastAVR ging das auch sehr einfach).
Die Akkuspannung stimmt sehr genau. Die Ladestrommessung hängt in der
5Volt-Leitung vor dem Ladeschaltkreis. Habe ich vor unf hinter dem
Schunt 2 zu 1 geteilt, damit ich ischön in der Mitte meiner
AVR-Betriebsspannung liege.
Kanal2 nehm ich zum Spannung messen, Kanal 0 und 1 fürn Strom.

Jetzt:
Kann mir bitte einer mal die Interpretation der Messwerte aus dem
Datenblatt erörtern (zwei,drei Sätze reichen)?

muss ich da nun 512 abziehen? 0x200 sei maximaler negativer Ausschlag
0x1FF maximaler positver Ausschlag. Wie schiebe ich das in den beiden
ADC Datenregistern hin und her? Leftjustfied oder nicht?

Es funktioniert ja schon, Hardware steht soweit, sendet alle Sekunde
auf dr seriellen Spannung und Strom. Strom aber irgentwie durch mich in
nicht zuordbaren Größen. wenn ich beide kanäle zusammenschalten (drähte
ab vom Shunt und zusammentüddeln) muss doch 0x00 angezeigt werden,
oder? Wird aber nicht. Na, wie gesagt, kurze Erleuchtung wäre nett (und
notwendig).

Nabend und Danke

AxelR.

von HansHans (Gast)


Lesenswert?

Hallo,
ich kann es jetzt auch nicht erklären wie ich es damals gemacht habe.
Habe aber noch mal in mein Programm nach gesehen und demnach muß
Bei I=0mA der Wert vom  ADC (Mux9) auch 0 sein
I = 1000mA (Laden ) liefert einen ADC Wert von 100
    (dann noch x10 per Software)
I = -1000mA (Endladen) liefert ADC 924
   (-1024  x10 per Software)
I = -1010mA liefert 923
 (-1024  x10 per Software)

demnach müßten ADC Werte über 512 also Negativer Strom sein
Ich hoffe ich konnte dir etwas helfen, mehr kann ich heute nicht mehr
nachsehen
Gruß HansHans

von AxelR. (Gast)


Lesenswert?

@HansHans

Ja danke erstmal. Genau wie ichs beobachtet hatte. gaanz kleine
negative Werte lieferten mir Ergebnisse um 1020-1023, größere negative
bis herunter zu 512 (0x200). Na ich rechne morgen früh als erstes
nochaml durch. Mit dem 2er Komplement lag ich ja schon richtig -
Kunststück, steht im Datenblatt. Aber die 512 machten mich stutzig. Ich
habe nun mal keinen VariablenTyp 9bit signed. Muss ich mir einen machen.
Ich werd' die ganze Leftjustified machen und dann das höchste Bit als
Vorzeichen verwenden. Gibts denn 8Bit signed als Typ? NAja die geben ja
auch ganz schön an im Datenblatt: auf der einen Seite sagen sie, dass
512 die Mitte darstellt, auf der anderen Seite setzen sie die
Genauigkeit bei GAIN=200x so weit herunter...
Da bin ich dann zum stehen gekommen. heisst ja, dass ich dann nur noch
Messwerte bekomme, durch 2 oder nur noch durch 4 teilbar sind?
Na mal sehen. Ich wills nachher nur fertig haben BEVOR meine Chef da
ist.
Danke erstmal, wem noch was einfällt (ich nehm ausnahmsweise auch mal
einen Codeschnipsel), der kann mir mal beistehen.

Gruß
Axel

PS. Ja, die AVR450 habe ich mir gerade angesehen, allerdingens nur den
ASM-Teil für den Tiny15. Dort scheren sich die Herren garnicht ein
bisschen über die Grenzen und Genauigkeiten. Hmm, hatte mich nur noch
mehr verwirrt

von HansHans (Gast)


Lesenswert?

Hallo,
was hast du erreicht ?
Ich habe mir damals beim Programmieren darüber keine Gedanken gemacht,
da das gleich so funktioniert hat wie ich es gebraucht habe .
Wenn ich aber jetzt noch mal ins Datenblatt schaue verstehe ich es
eigentlich auch nicht .
In dem Diagram „Differential Measurement Range „ ist doch zu sehen
das die Werte vom ADC für Positiv von 0 – 1FF Hex gehen und für
negativ von 3FF- 200 Hex ....(9bit nach jeder Seite).
Aber wenn  der AVR doch bei 10 fach Gain nur 8 Bit hat
wieso gehen die Werte nicht nur bis FF bzw. 300?
Deine Vermutung das nur  Messwerte bekomme die nur durch 2  oder
 4 teilbar sind kann ich nicht bestätigen das geht bei mir schon
Bit für Bit hoch bzw. runter .

Was für Werte kommen bei Gain x200 das sollen ja dann nur
7 Bit sein oder?

Wehre also schon schön wenn mal einer hierzu was schreiben könnte,
das etwas Licht ins Dunkel kommt .
Gruss HansHans

von crazy horse (Gast)


Lesenswert?

Genaues kann ich auch nicht dazu sagen - wenn Atmel aber von 6,7 oder
8bit spricht, heisst das nicht, dass der ADC nur eine entsprechende
Zahl von Bits liefert, sondern nur, dass entsprechend der Angabe nur
soundsoviel Bits effektiv nutzbar sind (das gleiche Spiel gibts auch
bei der Abtastrate/ADC-Frequenz), trotzdem werden 12bit geliefert.
Die Sachen mit gain-Option hatte ich mal kurz angetestet und gleich
verworfen, kaum sinnvoll nutzbar, ebenso die interne Referenz, mit den
Streuungen für Serienproduktion kaum verwendbar.  Von Analogtechnik
verstehen sie wohl nicht allzuviel (oder es lässt sich in dem
Preissegment eben einfach nicht besser lösen, ein besserer nackter ADC
oder auch nur eine Referenz kosten mehr, als ein Mega8).

von HansHans (Gast)


Lesenswert?

Das heißt also dann bei Gain x10 (8bit)
liefert der ADC trotzdem 9bit (+Vorzeichen = 10bit ).
Verwenden darf man aber nur die 8 höchsten Bit
(Bit 1-8) und das Bit 0 ist zu verwerfen ?

Bit 0 kann, also einen gültigen Wert enthalten, muss das aber nicht,
oder wird zumindest nicht garantiert ?

Das wäre zumindest eine Erklärung.

von AxelR. (Gast)


Lesenswert?

So ich konnte am Nachmittag dann endlich glänzen.
Läuft alles super. Nur mein Chef war schon garnicht mehr im Haus :-((
Mussten sich eben alle anderen Kollegen ansehen, was der Axel wieder
gebastelt hatte.

Ich habe einfach festgelegt, wenn der Messwert größer als 512 ist, dann
sollen 1024 vom Messwert abgezogen werden, sonst alles so lassen. Die
Werte springen um 3Bit! Ich habe dann gemittelt und gemacht. Habe mich
sogar hinreissen lassen, die Offset Kalkulation mit einzubeziehen, was
eigentlich ganz ordentlich funktioniert.

Leftjustified (Bit5 im ADMUX) habe mir eben erst angesehen, habe jetzt
aber keine Lust mehr, läuft ja nun so auch.
Ich stell' mal den Quelltext am Montag in den Anhang(iss nicht viel,
aber auf Arbeit)

Danke nochmal, schönes WE
AxelR.

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.