Forum: Mikrocontroller und Digitale Elektronik ADC interne Funktionsweise


von studentMax (Gast)


Angehängte Dateien:

Lesenswert?

Hallo

Ich habe eine Frage zu dem ADC Input Model, wie dieses abläuft.

Also ich gehe wie folgt :(alles aus dem Bild rausgelesen!)
1) über den ANx kommt meine zu messende Spannung rein. Kommt mehr als 
der erlaubte Referenzwert rein, fliesst dieses über den Dioden zu VDD 
wieder raus. quasi überspannungsschutz.

2) Die zu messende Spannung geht bei geschlossenem Sampling Switch und 
geöffnetem Discharge Switch in den Kondensator CHold. Da das ganze ja 
sukzessive Approximation ist, wird der Wert im CHold mit einem anderen 
Wert verglichen, aber welchem? Denn der Kondensator CHold wurde doch 
jetzt mit unserem Eingangswert "aufgeladen".
Ich weiss nur, dass durch den Discharge Switch das gleichgewicht 
hergestellt wird, wie bei einer Wage.
Oder wird der CHold mit der Referenzspannung aufgeladen, und mit der 
Eingangsspannung in CPin verglichen?



Gruss,
StudentMax

von Klaus (Gast)


Lesenswert?

Die Details darüber, was hier wie mit dem Eingangswert verglichen wird, 
ist in dieser Teilschaltung nicht zu erkennen. Das ist eben nur ein 
Input-Modell wie die Beschriftung auch sagt.

von Max H. (hartl192)


Lesenswert?

Lass mich raten, der µC ist ein PIC?

studentMax schrieb:
> 1) über den ANx kommt meine zu messende Spannung rein. Kommt mehr als
> der erlaubte Referenzwert rein, fliesst dieses über den Dioden zu VDD
> wieder raus. quasi überspannungsschutz.
Ja, die Dioden sind aber nicht an die Referenz, sondern an Vdd und Vss 
angeschlossen, die standard CMOS Eingangsschaltung.
> 2) Die zu messende Spannung geht bei geschlossenem Sampling Switch und
> geöffnetem Discharge Switch in den Kondensator CHold.
Ja
> Da das ganze ja sukzessive Approximation ist, wird der Wert im CHold
> mit einem anderen Wert verglichen, aber welchem?
Schau die mal an wie ein SAR ADC funktioniert: 
https://en.wikipedia.org/wiki/Successive_approximation_ADC
Die Referenzspannung für den DAC ist die die du in einem ADCON regiter 
eingestellt hast.
> Oder wird der CHold mit der Referenzspannung aufgeladen, und mit der
> Eingangsspannung in CPin verglichen?
CHold wird mit der Eingangsspannung geladen.
https://de.wikipedia.org/wiki/Sample-and-Hold-Schaltung

: Bearbeitet durch User
von studentMax (Gast)


Lesenswert?

Max H. schrieb:
> Lass mich raten, der µC ist ein PIC?
Richtig geraten, ein PIC18!

> studentMax schrieb:
>> 1) über den ANx kommt meine zu messende Spannung rein. Kommt mehr als
>> der erlaubte Referenzwert rein, fliesst dieses über den Dioden zu VDD
>> wieder raus. quasi überspannungsschutz.
> Ja, die Dioden sind aber nicht an die Referenz, sondern an Vdd und Vss
> angeschlossen, die standard CMOS Eingangsschaltung.
>> 2) Die zu messende Spannung geht bei geschlossenem Sampling Switch und
>> geöffnetem Discharge Switch in den Kondensator CHold.
> Ja
>> Da das ganze ja sukzessive Approximation ist, wird der Wert im CHold
>> mit einem anderen Wert verglichen, aber welchem?
> Schau die mal an wie ein SAR ADC funktioniert:
> https://en.wikipedia.org/wiki/Successive_approximation_ADC
> Die Referenzspannung für den DAC ist die die du in einem ADCON regiter
> eingestellt hast.

Achso, das mit der Referenzspannung sieht man auf meinem Bildchen gar 
nicht..
Naja bisschen komisch schon, denn im ADCON Register wird ja nicht die 
ReferenzSpannung selbst eingestellt, sondern eher die Quelle der 
ReferenzSpannung.(extern, intern)


1) Also CHold wird mit eingangsspannung aufgeladen.
Die Zeit in der der Kondensator CHold aufgeladen wird, ist die 
Aquisition Time.
2) Jetzt wird der "Inhalt"des CHold mit dem Referenzwert verglichen, ist 
Inhalt zu gross, wird der Disscharge Switch betätigt und die Wage wird 
bisschen entlastet, und das immer so weiter. Daraus entsteht dann die 
Bitkombination.

Ist das so richtig ?

LG

von Max H. (hartl192)


Lesenswert?

studentMax schrieb:
> Achso, das mit der Referenzspannung sieht man auf meinem Bildchen gar
> nicht..
Weil das nur das Input-Modell ist, und nicht der gesamte ADC.

> Naja bisschen komisch schon, denn im ADCON Register wird ja nicht die
> ReferenzSpannung selbst eingestellt, sondern eher die Quelle der
> ReferenzSpannung.(extern, intern)
Das habe ich auch gemeint, nur vllt. etwas undeutich ausgedrückt.

> 1) Also CHold wird mit eingangsspannung aufgeladen.
> Die Zeit in der der Kondensator CHold aufgeladen wird, ist die
> Aquisition Time.
Genau
> 2) Jetzt wird der "Inhalt"des CHold mit dem Referenzwert verglichen, ist
> Inhalt zu gross, wird der Disscharge Switch betätigt und die Wage wird
> bisschen entlastet, und das immer so weiter. Daraus entsteht dann die
> Bitkombination.
Das wäre dann eher ein ADC nach dem Zählverfahren und würde 
wahrscheinlich nicht gut funktionieren. Lies besser den oben verlinkten 
Artikel...

P.S. Vergiss einmal das ANALOG INPUT MODEL, das zeig genau gar nicht von 
der AD-Wandlung, nur die Sample-and-Hold-Stufe.

: Bearbeitet durch User
von studentMax (Gast)


Lesenswert?

Ok hab mir jetzt das Kapitel Algorithm nochmal genauer durchgelesen.
ALSO:
CHold behält sein Wert, jedoch wird die Referenzspannung nur bei der 
ersten Messung genommen. Die vergleichsstelle(alte Referenz) nimmt ab 
bis Sie die gleiche Spannung hat wie der CHold.

Right?

von Max H. (hartl192)


Lesenswert?

studentMax schrieb:
> Die vergleichsstelle(alte Referenz) nimmt ab
> bis Sie die gleiche Spannung hat wie der CHold.
Sie muss nicht abnehmen, sie kann auch steigen. Der ADC tastet sich bit 
für bit an das Ergebnis ran. Als erstes würd überprüft ob das MSB 0 oder 
1 (Vin > Vref/2 oder <Vref/2), dann das nächste bis runter bis zum LSB.

von Peter D (Gast)


Lesenswert?

Max H. schrieb:
> studentMax schrieb:
>> Die vergleichsstelle(alte Referenz) nimmt ab
>> bis Sie die gleiche Spannung hat wie der CHold.
> Sie muss nicht abnehmen, sie kann auch steigen. Der ADC tastet sich bit
> für bit an das Ergebnis ran. Als erstes würd überprüft ob das MSB 0 oder
> 1 (Vin > Vref/2 oder <Vref/2), dann das nächste bis runter bis zum LSB.

Das ist pure Spekulation. Auf diesem Bild ist nicht zu erkennen welche 
ADC Topologie zum Einsatz kommt. Ob SAR, Flash, ... kann man nicht 
sagen. Das was an auf dem Bild sieht haben alle ADC Topologien 
gemeinsam.

von studentMax (Gast)


Lesenswert?

Okay, denke das müsste jetzt klar sein.
Das heisst jenachdem wird VRef mitgenommen oder halt weggelassen.

Vielen dank für deine Tolle Hilfe!

von Max H. (hartl192)


Lesenswert?

Peter D schrieb:
> Das ist pure Spekulation.
Kennst du einen PIC18 mit was anderem als einem successive approximation 
ADC? Und das vom sukzessive Approximation wurde auch im Anfangspost 
erwähnt.

: Bearbeitet durch User
von Axel S. (a-za-z0-9)


Lesenswert?

studentMax schrieb:

> 2) Die zu messende Spannung geht bei geschlossenem Sampling Switch und
> geöffnetem Discharge Switch in den Kondensator CHold. Da das ganze ja
> sukzessive Approximation ist, wird der Wert im CHold mit einem anderen
> Wert verglichen

Nein.

> Ich weiss nur, dass durch den Discharge Switch das gleichgewicht
> hergestellt wird, wie bei einer Wage.

Nein.

> Oder wird der CHold mit der Referenzspannung aufgeladen, und mit der
> Eingangsspannung in CPin verglichen?

Nein.

Während der "Sample" Phase der AD-Wandlung wird der Kondensator C_hold 
von seiner bisherigen Spannung (deren Wert unbekannt [1] ist) auf einen 
Wert nahe der Eingangsspannung VA auf- bzw. umgeladen. In Abhängigkeit 
von der Zeitkonstante des RC-Glieds aus C_hold und (R_s + R_ic + R_ss) 
wird sich dabei eine Abweichung ergeben. Man muß nun die Länge der 
Sample-Phase passend zu dieser Zeitkonstante und der tolerierbaren 
Abweichung wählen. Meist ist die Länge der Sample-Phase als Vielfaches 
der Periodendauer des ADC-Taktes vorgegeben, so daß die einzige Variable 
der ADC-Takt ist.

[1] i.d.R. ist das die Eingangsspannung bei der vorhergehenden Messung. 
Genau das ist die Stelle, wo die genaue Funktionswese des ADC ins 
Spiel kommt. Es kann auch genauso gut sein, daß im Laufe der Wandlung 
die Sample-Kapazität zwingend entladen wird, z.B. durch den 
eingezeichneten Discharge-Schalter. Details wird das Datenblatt 
enthalten.
Im Zweifelsfall sollte man einfach davon ausgehen, daß C_hold am anderen 
Ende des Meßbereichs ist. Dann braucht man nur noch ein bisschen 
elementare Mathematik und das Wissen um die e-Funktion, um Sample-Zeit 
und RC-Zeitkonstante in Relation zu setzen. Oder die Faustformel: "0.1% 
Abweichung entspricht 7 \tau"

: Bearbeitet durch User
von studentMax (Gast)


Lesenswert?

Hallo,

Noch eine Frage:

Nachdem ich das GO Bit setze, startet meine eingestellte Acquisition 
time in der der Kondensator aufgeladen wird.
ABER, laut Datenblatt : "When the GO bit is set, the A/D  module 
CONTINUES to sample the input for the selected acquisition time, then 
automatically begins a conversion".

Das heisst also, dass sobald ich mein Channel auswähle und bevor ich das 
Go bit setze, der Kondensator aufgeladen wird, und somit ist meine 
acquisition time meine minimalste Zeit damit überhaupt saft in den 
Kondensator rein kommt.

Scheint mir persönlich so richtig zu sein, ist es das auch? :P

Gruss!

von Max H. (hartl192)


Lesenswert?

studentMax schrieb:
> Das heisst also, dass sobald ich mein Channel auswähle und bevor ich das
> Go bit setze, der Kondensator aufgeladen wird, und somit ist meine
> acquisition time meine minimalste Zeit damit überhaupt saft in den
> Kondensator rein kommt.
Ja, der Ausgewählte Channel ist, außer währende der Wandlung, dauerhaft 
mit dem sample Kondensator verbunden. Die acquisition Time ist dazu da, 
dass der Kondensator auch eine Zeit lang geladen wird wenn ich z.B.
1
ADCON0.CHS = AN10
2
ADCON0.GO = 1
schreibe.
Der sample Kondensator wird nach der AD-Wandlung entladen, die 
eingestellte acquisition Time garantiert dann auch, dass der Kondensator 
Zeit hat um sich zu laden, wenn du z.B. im ADC-Interrupt sofort eine 
neue Messung startest.

von studentMax (Gast)


Lesenswert?

Aha okay, ist verständlich- danke!

Und beim Discharge wird der Kondensator ganz normal während 2 TAD 
entladen.
Im Datenblatt steht:
" The array is discharged after every sample. This feature helps to 
optimize the unity gain amplifier, as the circuit always needs to charge 
the capacitor array, rather than charge/discharge based on previous 
measure values".

Entweder kann ich kein Englisch, oder das widerspricht sich.

Kondensator wird doch entladen bevor ein neuer Sample gemacht wird, wo 
ist denn da die optimisation von der unity gain amplifier?

lG

von Max H. (hartl192)


Lesenswert?

studentMax schrieb:
> " The array is discharged after every sample. This feature helps to
> optimize the unity gain amplifier, as the circuit always needs to charge
> the capacitor array, rather than charge/discharge based on previous
> measure values".
>
> Entweder kann ich kein Englisch, oder das widerspricht sich.
Der Kondensator wird nach dem Sample auf 0V entladen. 0V ist kleiner 
gleich jeder Spannung die man mit dem ADC messen kann, also muss der 
unity gain Amplifier den Kondensator bei jeder Eingangsspannung nur 
laden. Das hilft anscheinen beim Optimieren des unity gain Amplifiers.

: Bearbeitet durch User
von spess53 (Gast)


Lesenswert?

Hi

Sieh dir mal die AppNotes von Microchip zum ADC an. Dort findest du auch 
etwas zum

>capacitor array,

Es gibt nämlich noch mehr als das nur das Dateblatt.

MfG Spess

von studentMax (Gast)


Angehängte Dateien:

Lesenswert?

Achso okay, das leuchtet mir ein. Sonst müsste er den Kondensator bei 
nem neuen Sample erst entladen-das ist dann wohl mit unity gain 
gemeint..

Zur der Bestimmung der Acquisition time, gibts nur diese Formel(Anhang) 
Oder auch ne andere Methode wie man die bestimmt?

von Max H. (hartl192)


Lesenswert?

studentMax schrieb:
> Zur der Bestimmung der Acquisition time, gibts nur diese Formel(Anhang)
> Oder auch ne andere Methode wie man die bestimmt?
Was passt dir daran nicht, über die Kondensator-Ladeformel ist mMn der 
einzig logische Ansatz.

von studentMax (Gast)


Lesenswert?

Hm joa stimmt auch wieder. Dachte da würde was einfacheres geben, als 
mit der Temeperatur zu arbeiten.

Ne andere Frage, im Datenblatt steht: "The GO bit should not be set in 
the same instruction that turns on the ADC."
Wieso?
zwischen dem Einschalten und dem Setzen des GO bits gehe ich ja net noch 
Kaffee trinken.....Desswegen hab ich ja meine Acquisition Time damit der 
Kondensator da wenigstens seinen Saft bekommt.

lG

von Max H. (hartl192)


Lesenswert?

studentMax schrieb:
> "The GO bit should not be set in
> the same instruction that turns on the ADC."
> Wieso?
Damit der ADC Zeit zum Einschalten hat. Erst durch das Setzen des ADON 
bits wird der ADC überhaupt mit Strom versorgt.
> zwischen dem Einschalten und dem Setzen des GO bits gehe ich ja net noch
> Kaffee trinken....
Wird auch nicht verlangt, nur nicht in gleichen Befehl, im Datenblatt 
wird
1
MOVLW B'00000001' ;AN0, ADC on
2
MOVWF ADCON0 ;
3
BSF ADCON0,GO ;Start conversion
empfohlen.

: Bearbeitet durch User
von studentMax (Gast)


Lesenswert?

Vielen dank für deine Hilfe - hat mir echt viel gebracht!!

gruss!

von studentMax (Gast)


Lesenswert?

Hey, hab noch eine Frage:

Ist es normal, dass wenn ich mein Eingangspin auf masse lege, dass mein 
Lower Register, also ADRESL eine 1 ausspuckt? ADRESH zeigt ne 0 an. Lege 
ich ihn auf seine maximale Referenzspannung dann zeigt er mir 255 an, 
genau wie ADRESH.

Sonst:
    ADCON2bits.ADCS=0b110;
    ADCON1bits.PVCFG=0b00; // internal + Reference
    ADCON1bits.NVCFG=0b00; // internal - Reference
    ADCON0bits.CHS=0b00000; // AN0 channel
    ADCON2bits.ADFM=0b1; // Right Justified
    ADCON2bits.ACQT=0b101; //  10us
    ADCON0bits.ADON=0b1; // ADC ON

        ADCON0bits.GO=1;
        while(ADCON0bits.GO==1); //warten bis Messung fertig ist.

Ja und wenn ich mir dann den Inhalt von ADRESL anzeige, steht da ne 1 
wenn das ganze auf GND angeschlossen ist.

Ist das normal?
SOnst habe ich keine Probleme mit meinen Messungen

Gruss

von studentMax (Gast)


Lesenswert?

Einer eine Idee?

lG!

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.