Forum: Mikrocontroller und Digitale Elektronik ADC widerstand


von Christof (Gast)


Lesenswert?

Hallo,

Ich möchte nur fragen ob es funktioniert mit einem ADC den 
WiderstandsWert zu berechen? Und kann mir jemand das erklären wie und 
warum es funktioniert würde mich sehr interessieren :-)

Schaltung:

<----R--------|ADC|------NTC-----|gnd

Also wie es funktioniert den NTC widerstand zu berechnen.

Habe oft die Formel: Rntc = R*ADC/1024 gesehen.

Verstehe aber nicht wie man auf diese formel kommt :-(

Danke

von Joe F. (easylife)


Lesenswert?

Der NTC und R müssen einen Spannungsteiler von VCC oder V_ref zu GND 
bilden.
Diese Spannung kann dann vom ADC gemessen werden.

: Bearbeitet durch User
von W.A. (Gast)


Lesenswert?

Christof schrieb:
> Habe oft die Formel: Rntc = R*ADC/1024 gesehen.
>
> Verstehe aber nicht wie man auf diese formel kommt :-(

Die war wohl für eine andere Schaltung

von Christof (Gast)


Lesenswert?

Die Zeichnung soll diesen SpannungsTeiler auch zeigen. Aber warum kann 
widerstand und ADC wert in der Formel vorkommen, ADC wert ist ja eine 
digitale Spannung? Wie funktioniert die Formel?

von Crazy Harry (crazy_h)


Lesenswert?

Anstatt des R solltest du eine Konstantstromquelle nehmen. Damit wäre 
der Strom bekannt und du kannst mit NTCWiderstand=ADCSpannung/I den 
Widerstand berechnen. ADCSpannung=ADCReferenz/Bit*ADC. Bit entspricht 
der ADCAuflösung-1. Ein 10Bit ADC hat 1024, ein 12Bit 4096, ...

Das mit dem festen R kannst du machen, wenn du eine LookUp-Tabelle mit 
Vergleichswiderständen anlegen kannst.

: Bearbeitet durch User
von Der Andere (Gast)


Lesenswert?

Crazy H. schrieb:
> Anstatt des R solltest du eine Konstantstromquelle nehmen.

Mit einem genauen R und eine ratiometrischen Messung wirds genauer.

von Anja (Gast)


Lesenswert?

Christof schrieb:
> Also wie es funktioniert den NTC widerstand zu berechnen.

Wozu brauchst Du den Widerstand eines NTCs?

Durch den Spannungsteiler ist bei richtiger Dimensionierung der 
Spannungsverlauf am ADC-Eingang (in einem ca 30 Grad Temperaturbereich) 
linear.

Gruß Anja

von Joe F. (easylife)


Lesenswert?

Die Formel ist falsch.
1
-+- VCC
2
 |
3
+++
4
| | R
5
| |
6
+++
7
 |
8
 +----- ADC_IN
9
 |
10
+++
11
| | R_ntc
12
| |
13
+++
14
 |
15
-+- GND
16
17
18
Richtig ist:
19
20
(1) ADC-Wert / 1024 = U_ADC_IN / VCC
21
22
(2) U_ADC_IN = VCC * R_ntc / (R + R_ntc)
23
24
25
(2) in (1):
26
27
ADC-Wert / 1024 = (VCC * R_ntc / (R + R_ntc)) / VCC
28
29
-> ADC-Wert / 1024                  = R_ntc / (R + R_ntc)
30
-> ADC-Wert * (R + R_ntc)           = R_ntc * 1024
31
-> ADC-Wert * R + ADC-Wert * R_ntc  = R_ntc * 1024
32
-> ADC-Wert * R                     = R_ntc * 1024 - R_ntc * ADC-Wert
33
-> ADC-Wert * R                     = R_ntc * (1024 - ADC-Wert)
34
-> ADC-Wert * R / (1024 - ADC-Wert) = R_ntc
35
36
-> R_ntc = ADC-Wert * R / (1024 - ADC-Wert)

von Crazy Harry (crazy_h)


Lesenswert?

Jetzt die Preisfrage: Was ist richtig ? /1023 oder /1024 ? Es sind zwar 
1024 Werte aber einer davon ist 0.

von Joe F. (easylife)


Lesenswert?

1024 ist schon richtig.
Durch 0 sollte man ja besser nicht teilen... ;-)
Zusätzlich sollte man natürlich auch die richtige Formel nehmen.

: Bearbeitet durch User
von Robin R. (Gast)


Lesenswert?

Wenn ich 2 Werte habe: 0 und 1, und dann durch /2 teile,
weil ich 2 Werte habe. Dann bekomme ich nie 1 raus.
=> /1023

von Joe F. (easylife)


Lesenswert?

Du hast recht.
R_ntc = ADC-Wert * R / (1023 - ADC-Wert)

Man muss natürlich sicherstellen, dass ADC-Wert nicht 1023 ist.
Das würde aber ohnehin bedeuten, dass R_ntc unendlich, bzw. zu groß für 
eine sinnvolle Messung ist...

von Crazy Harry (crazy_h)


Lesenswert?

Was war daran falsch ? z.B. I=1mA, ADC=512, URef=5V

ADCSpannung=5V/1023*512=2.50244V
NTCWiderstand=2.50244V/0.001A=2502 Ohm

von Harald W. (wilhelms)


Lesenswert?

Crazy H. schrieb:

> Jetzt die Preisfrage: Was ist richtig ? /1023 oder /1024 ? Es sind zwar
> 1024 Werte aber einer davon ist 0.

Bei der recht begrenzten Genauigkeit von NTCs
ist dieser Unterschied nun wirklich unwichtig.

von Crazy Harry (crazy_h)


Lesenswert?

Harald W. schrieb:
> Crazy H. schrieb:
>
> Jetzt die Preisfrage: Was ist richtig ? /1023 oder /1024 ? Es sind zwar
> 1024 Werte aber einer davon ist 0.
>
> Bei der recht begrenzten Genauigkeit von NTCs
> ist dieser Unterschied nun wirklich unwichtig.

Bei der Frage ging es mir ums Prinzip ;o) Ich hab ja auch mal 16 oder 
18Bit ADCs und andere Anwendungen dafür.

: Bearbeitet durch User
von Tom E. (Gast)


Lesenswert?

Harald W. schrieb:
> Crazy H. schrieb:
>
>> Jetzt die Preisfrage: Was ist richtig ? /1023 oder /1024 ? Es sind zwar
>> 1024 Werte aber einer davon ist 0.
>
> Bei der recht begrenzten Genauigkeit von NTCs
> ist dieser Unterschied nun wirklich unwichtig.

Bei einem 3 Bit ADC sähe das schon anders aus. Da ergäbt sich ein 
Unterschied von gut 12%, was i.A. dann gar nicht mehr so unwichtig wäre.

von Planlos (Gast)


Lesenswert?

Oh Mann... schon wieder eine neue Generation, die den selben Mist wieder 
und wieder Abschreiben wird.

1023 ist falsch.
1024 ist richtig.

Genau Erklärung z.B. hier: AVR-Tutorial: ADC: Ein paar ADC-Grundlagen


Kurzform:

Der ADC unterscheidet 1024 verschiedene Stufen/"Spannungsbereiche".

Ein ADC-Wert von X gibt an, dass die gemessene Spannung zwischen

X/1024*Referenz
und
(X+1)/1024*Referenz
liegt.

d.H. Bei Aref=5V und Input=0V
ADC=0 ==> Messwert zwischen 0V und 0.005V.

Bei Input=Aref=5V:
ADC=1023 ==> Messwert zwischen 4.995V und 5V.




d.H. der Wert aus dem ADC-Register ist immer die Untere Schranke.

Wenn du "genauer" arbeiten willst, kannst du den Bereichs-Mittelwert, 
also

 (ADC+0.5)*Vref/1024.0

verwenden.
(Vorsicht, float)

von Crazy Harry (crazy_h)


Lesenswert?

Und wer sagt das das Tutorial richtig ist ?

Man könnte auch argumentieren: von 0-1023 sind 1024 Werte also 1023 
Bereiche/Abschnitte, also /1023. Einfacher von 0-2 sind es 3 Werte, aber 
nur 2 Teile: der von 0-1 und der von 1-2.

[Edit]Ich habe jetzt sehr viele Beiträge über dieses Thema gelesen und 
viele Meinungen zu 1023 und 1024. Selbst in Datenblättern von 
Herstellern ist beides zu lesen. Ich denke ich werde das so mach, wie 
ich will und einfach das letzte Bit ignorieren :oD

: Bearbeitet durch User
von Noch einer (Gast)


Lesenswert?

> Man könnte auch argumentieren...

Das Argument: mit (ADC+0.5)*Vref/1024.0 bekommst du überall die gleiche 
Abweichung.

Der Unterschied zwischen ADC*Vref/1024.0 und ADC*Vref/1023.0 hat keinen 
Einfluss auf kleine ADC Werte. Und du kannst nicht wissen, ob bei großen 
ADC Werten 1024 oder 1023 weniger Rundungsfehler ergeben. Du kannst 
nicht wissen, ob bei 1023 eine Spannung von 4.995V oder 5V anliegt. 
Nimmst du 1024, hast du bei der umgestellten Gleichung keine Probleme 
mit Division durch 0.

von Noch einer (Gast)


Lesenswert?

Die Gleichung von Planlos liefert 0,003...4,997
1024 ergibt 0,000...4,995
1023 ergibt 0,000...5,000

Welcher Wert kommt der analogen Spannung am nächsten? Entweder Würfeln 
oder das letzte Bit ignorieren.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Crazy H. schrieb:
> Was ist richtig ? /1023 oder /1024 ?
Keines, denn beide Male wurde geplenkt.
Richtig wäre
> Was ist richtig? /1023 oder /1024?
Und die Antwort darauf ist natürlich 1024.

Crazy H. schrieb:
> Man könnte auch argumentieren: von 0-1023 sind 1024 Werte also 1023
> Bereiche/Abschnitte, also /1023.
Das wäre aber schlicht und simpel falsch. Mit 1023 kommt zwar auch die 
Uref raus (falls das eine braucht), aber da ist dann die Steigung der 
Übertragung einfach 1/1024 zu steil. Klar kann man sagen: das ist doch 
nicht viel. Aber dann kann ich auch fragen: wenn das sowieso nichts 
ausmacht, warum diskutieren wir dann um /1023, wenngleich die /1024 viel 
einfacher zu implementieren und zudem mathematisch korrekt sind?

> [Edit]Ich habe jetzt sehr viele Beiträge über dieses Thema gelesen und
> viele Meinungen zu 1023 und 1024.
Du solltest die Korrektheit einer Formel nicht nach der Verbreitung 
beurteilen. Sonst musst du sie evtl. jeden Tag umstellen...

> Selbst in Datenblättern von Herstellern ist beides zu lesen.
Zeig mal, in welchem Zusammenhang dort die 1023 vorkommen.

> Und wer sagt das das Tutorial richtig ist ?
Und wer sagt, dass sich die Erde um die Sonne dreht?
Wenn einer lieber /1023 rechnet, um auch mal Vref für seine Anzeige 
herauszubekommen, dann kann er das von mir aus gerne machen. Es ist aber 
trotzdem falsch.

Geh doch einfach mal her und denk dir deine Formel für einen 2 Bit ADC 
mit 10V Vref durch:
1
 3                     ------
2
                      |
3
 2              ------
4
               |
5
 1       ------
6
        |
7
 0 -----       
8
  0    2,5V   5V    7,5V    10V
Bei der Spannung 0V ist der ADC tatsächlich 0. Bei 2,5V hüpft er hoch 
auf 1, bei 5V auf 2, bei 7,5V auf 3. Und das ist dann auch schon der 
Endausschlag. Der ADC kann nicht feststellen und unterschieden, ob 7,8V 
oder 9,8V anliegen. Das ist für ihn das selbe.

Natürlich kannst du jetzt deine /3 Formel anbringen, damit hättest du 
dann auf der Anzeige 0V - 3,3V - 6,6V und 10V. Passt das zur 
Übertragungskurve der oben skizzierten Hardware und sehen diese Werte 
irgendwie "richtig" aus?

Noch einer schrieb:
> Die Gleichung von Planlos liefert 0,003...4,997
> 1024 ergibt 0,000...4,995
> 1023 ergibt 0,000...5,000
>
> Welcher Wert kommt der analogen Spannung am nächsten? Entweder Würfeln
> oder das letzte Bit ignorieren.
Man muss einfach wissen, was dahintersteckt. Technisch korrekt ist die 
Division durch die Zweierpotenz.
Für die visuelle Anzeige kann man dann auch mal tricksen und den 
Anzeigewert schön hinbiegen. Man muss also die Sache bewerten und 
sagen: wenn ich bei einem 12Bit ADC wirklich mal 5,00V sehen will, 
dann zappelt die letzte Stelle sowieso, und ich muss mir irgendeine 
"Begradigung" ausdenken. Aber man muss dann auch wissen, dass das nicht 
dem echten gemessenen Rohwert des ADC entspricht.

: Bearbeitet durch Moderator
von Anja (Gast)


Lesenswert?

Planlos schrieb:
> d.H. der Wert aus dem ADC-Register ist immer die Untere Schranke.

Genau das ist nicht immer der Fall.
Es gibt auch (wenige) ADCs die "runden" also die erste Stufe bei 0.5 
counts haben.
Ist in meinen Augen "logisch" da ansonsten in einer Meßkette ADC -> DAC 
-> ADC eine Mittelwertverschiebung auftreten würde. Wird allerdings nur 
selten gemacht da dies erhöhten Hardwareaufwand bedeutet.
Siehe auch:
http://www.atmel.com/Images/doc6022.pdf

Genaueres siehe Transferkurve im jeweiligen Datenblatt.

Gruß Anja

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Anja schrieb:
> Genaueres siehe Transferkurve im jeweiligen Datenblatt.
Denn dort steht die Übertragungskurve des ADC, die sich der Entwickler 
ausgedacht, umgesetzt und verifiziert hat. Und nicht in irgenwelchen 
zurechtgebogenen Tutorials...

von Noch einer (Gast)


Lesenswert?

> damit hättest du dann auf der Anzeige 0V - 3,3V - 6,6V und 10V

Wenn im Datenblatt eines Messgerätes "Bereich 0 bis 10 Volt" steht, kann 
es nur 0 bis 9,999 Volt anzeigen.

Da sind sich Techniker und BWLer endlich mal einig! Der eine will durch 
1024 teilen. Der andere will die Kosten für eine zusätzliche Ziffer auf 
dem Display einsparen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Crazy H. schrieb:
> Selbst in Datenblättern von Herstellern ist beides zu lesen.
Noch ein Wort dazu: man muss auch manchmal Sachen in Datenblättern und 
AppNotes hinterfragen. Siehe z.B. dort das Bild "Fig. 10" unten:
http://www.lothar-miller.de/s9y/archives/17-Quarz.html

von Tcf K. (tcfkao)


Lesenswert?

@Lothar: Thanks! Man lernt immer wieder dazu. In solchen Details wird 
gerne geschlampt, Hauptsache "läuft"...

von Rolf M. (rmagnus)


Lesenswert?

Crazy H. schrieb:
> Man könnte auch argumentieren: von 0-1023 sind 1024 Werte also 1023
> Bereiche/Abschnitte, also /1023.

Könnte man, wäre aber falsch. Denn jeder Wert, den der ADC ausgeben 
kann, entspricht bereits einem Spannungsbereich, also einem Abschnitt. 
Also hat man mit 1024 möglichen Werten auch 1024 Spannungsbereiche. Das 
ist die Stelle, wo die meisten den Denkfehler haben. Der ADC-Wert 0 
bedeutet nicht, daß die Spannung 0V ist, sondern daß sie irgenndwo im 
Bereich 0V <= U < Vcc/1024 ist.

Beim 2-Bit-ADC an 4V bedeutet ein Wert von 0 also 0 <= U < 1V. Und der 
Wert 3 bedeutet nicht U = 3V, sondern 3V <= U < 4V. Man müßte also, wenn 
man korrekt runden will, für eine Ausgabe beim Wert 0 nicht 0V, sondern 
0,5V anzeigen, beim Wert 3 nicht 3V, sondern 3,5V, mit einer Abweichung 
von jeweils +/- 0,5V. Und ja, dann würde man auf dem Multimeter weder 
0V, noch 4V sehen, aber es wäre mathematisch die korrekte Lösung. Damit 
das Voltmeter trotzdem 0V und 4V anzeigt, muß man mit entsprechenden - 
eigentlich verfälschenden Tricks arbeiten, die bei >> 2 Bits aber nicht 
mehr so sehr ins Gewicht fallen.

: Bearbeitet durch User
von Joe F. (easylife)


Lesenswert?

Wer es ganz, ganz genau wissen möchte:
http://www.atmel.com/Images/Atmel-8456-8-and-32-bit-AVR-Microcontrollers-AVR127-Understanding-ADC-Parameters_Application-Note.pdf

Wirklich gut erklärt, mit vielen anschaulichen Grafiken.

: Bearbeitet durch User
von Joachim B. (jar)


Lesenswert?

Lothar M. schrieb:
> Richtig wäre
>> Was ist richtig? /1023 oder /1024?
> Und die Antwort darauf ist natürlich 1024.

wie kommst du darauf?

der höchste ADC wäre 1023 und das zum Bezug aus 1023 (im Wertebreich 
0-1023)

also würde ein Teiler ADC/1023 bei ADC = 1023 genau 1 liefern, also 1 * 
Vref, mehr geht nicht.

Warum also sollte man den max. ADC Wert von 1023 auf 1024 beziehen?
Da käme doch nie 1 heraus.

von Crazy Harry (crazy_h)


Lesenswert?

Rolf M. schrieb:
> Crazy H. schrieb:
> Man könnte auch argumentieren: von 0-1023 sind 1024 Werte also 1023
> Bereiche/Abschnitte, also /1023.
>
> Könnte man, wäre aber falsch. Denn jeder Wert, den der ADC ausgeben
> kann, entspricht bereits einem Spannungsbereich, also einem Abschnitt.
Dann wäre aber der Abschnitt 0 und 1023 jeweils nur halb so groß, wie 
die anderen, denn kleiner als 0 gibt es genau so wenig, wie größer als 
1023.

von Wolfgang (Gast)


Lesenswert?

Joachim B. schrieb:
> Warum also sollte man den max. ADC Wert von 1023 auf 1024 beziehen?
> Da käme doch nie 1 heraus.

Weil der ADC Wert sagt, in welchem Intervall das Eingangssignal liegt. 
Und von den Intervallen gibt es genau 1024. Lies mal weiter oben im 
Thread. Da steht die Begründung.

von Joachim B. (jar)


Lesenswert?

Wolfgang schrieb:
> Joachim B. schrieb:
>> Warum also sollte man den max. ADC Wert von 1023 auf 1024 beziehen?
>> Da käme doch nie 1 heraus.
>
> Weil der ADC Wert sagt, in welchem Intervall das Eingangssignal liegt.
> Und von den Intervallen gibt es genau 1024. Lies mal weiter oben im
> Thread. Da steht die Begründung.

ist ja klar, aber trotzdem beziehe ich mich auf min= 0 oder max = 1023, 
auch wenn das 1024 Werte umfasst, ich glaub ich bin zu doof für diese 
1024 Erklärung.

von Wolfgang (Gast)


Lesenswert?

Joachim B. schrieb:
> ich glaub ich bin zu doof für diese 1024 Erklärung.

Dann nimm, wie von Lothar vorgeschlagen, statt eines 10 Bit Wandlers 
einen mit 2 Bit, also mit den Ausgangswerten 0, 1, 2 und 3. Das sind 
deutlich 4 Intervalle und nicht 3.

Lothar M. schrieb:
> Geh doch einfach mal her und denk dir deine Formel für einen 2 Bit ADC
> mit 10V Vref durch:

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.