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
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
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
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?
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
Crazy H. schrieb: > Anstatt des R solltest du eine Konstantstromquelle nehmen. Mit einem genauen R und eine ratiometrischen Messung wirds genauer.
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
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) |
Jetzt die Preisfrage: Was ist richtig ? /1023 oder /1024 ? Es sind zwar 1024 Werte aber einer davon ist 0.
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
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
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...
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
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.
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
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.
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)
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
> 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.
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.
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
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
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...
> 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.
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
@Lothar: Thanks! Man lernt immer wieder dazu. In solchen Details wird gerne geschlampt, Hauptsache "läuft"...
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
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
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.
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.