Hallo Ich bastel immer noch an meinem UV-Messgerät und verwende einen Atmega328 und den ML8511 UV Sensor. Der Sensor gibt am OUT eine DC Spannung linear zur UV Bestrahlungsstärke. OUT des UV Sensors hängt direkt an ADC1. VCC ist 3.3V. Im totalen Schatten liefert der Sensor exakt 1V an OUT, genauso wie im Datenblatt. Das habe ich auch am Multimter gemessen wenn ich den Sensor Standalone betreibe. Wenn ich OUT nun aber über ADC1 messe bekomme ich den Wert 396, was ja entschpricht 3.3V/1023 * 396 = 1,27V , also 0,27V mehr als direkt gemessen. Ist das ganze nun ein Problem des "impedance-matching" zwischen Sensor und ADC? Im Datenblatt des Sensors steht: "Load resistance of OUT port is recommended more than 100k" Der Atmega ADC soll ja so um 1M haben (hab ich gelsesen), allerdings nicht wenn er gerade sampled und den internen Kondensator auflädt... (tschuldigung, alles halbwissen). Im Datenblatt des Atmega steht außerdem das es sinnvoll ist das man nur Zeug mit <10k an den ADC hängt. Was der Sensor für eine Ausgangsimpedanz hat steht leider nicht im Datenblatt... Mein Gedanke wäre nun direkt "Opamp Impedanzwandler"... Aber muss ich das unbedingt? Kann ich nicht einfach die 0,27V in meinen weiteren Rechnungen rausrechnen? Der Sensor arbeitet ja linear...
Paul G. schrieb: > Wenn ich OUT nun aber über ADC1 messe bekomme ich den Wert 396 Gegen welche Referenzspannung misst du das? > Ist das ganze nun ein Problem des "impedance-matching" zwischen Sensor > und ADC? Vermutlich eher nicht. Ein Problem damit kommt nur zum Tragen, wenn du zwischen den Messungen den ADC-Kanal wechselst und eine andere Spannung misst. Welche Spannung misst du denn mit dem Multimeter während der ADC-Messung am ADC-Pin? > Mein Gedanke wäre nun direkt "Opamp Impedanzwandler"... Aber muss ich > das unbedingt? Häng einfach einen 10nF Kondensator zwischen ADC-Pin und GND. Dann ist der Eingang niederimpedant... > Kann ich nicht einfach die 0,27V in meinen weiteren Rechnungen > rausrechnen? Ja, so macht man das heutzutage... Ich würde aber einfach mal die Ursache suchen und finden. Das wird dir sonst noch öfter passieren. > Wenn ich OUT nun aber über ADC1 messe bekomme ich den Wert 396, was > ja entschpricht 3.3V/1023 * 396 = 1,27V , also 0,27V mehr als direkt > gemessen. Man könnte glatt meinen, dass alles passen würde, wenn da 2,56V statt 3,3V stünden. Übrigens gehört da 1024 in die Rechung rein. Aber das ist weniger als 1 Promille Fehler... :-/
:
Bearbeitet durch Moderator
Die Zahnspangenfraktion mal wieder, hehe. Jeder ADC hat auch Nichtlinearitäten und Offset, den Du bei Deinen Messungen überprüfen musst. Die Impedanzen spielen hier keine große Rolle in dem Bereich. Du brauchst keine Leistungsanpassung. Tip->>Leg noch zwei weitere Kanäle an, mess zwei fest definierte Widerstände mit und linearisiere so Deine Messkurve des ADC. So kriegst Du DNL/INL und Offset einigermaßen in den Griff. Und sorge für eine vernünftige Referenzspannung.
Paul G. schrieb: > Wenn ich OUT nun aber über ADC1 messe bekomme ich den Wert 396, was > ja entschpricht 3.3V/1023 * 396 = 1,27V , also 0,27V mehr als direkt > gemessen. Pullup am ADC Pin eingeschaltet?
Lothar M. schrieb: > Gegen welche Referenzspannung misst du das? Also ich "programmiere" den Atmega über ISP mit Arduino IDE und dort mache ich einfach nur einen analogRead(A1), damit sollte die Referenz ja VCC, also 3.3 Volt aus dem LDO sein. Der liefert auch ziemlich genau 3.3(27)V... > Welche Spannung misst du denn während der Messung am ADC-Pin? Mit dem Multimeter exakt 1.000V > Häng einfach einen 10nF Kondensator zwischen ADC-Pin und GND. Dann ist > der Eingang niederimpedant... HAbe im Moment nur 100nF, damit ändert sich leider nix. >> Kann ich nicht einfach die 0,27V in meinen weiteren Rechnungen >> rausrechnen? > Ja, so macht man das heutzutage... Mach ich dann wohl auch > Ich würde aber einfach mal die Ursache suchen und finden. Das wird dir > sonst noch öfter passieren. Ich schau nochmal Stück für Stück auf dem Steckbrett ob ich irgendwo was falsch habe oder irgendwelche Leckströme...
soso schrieb: > Jeder ADC hat auch Nichtlinearitäten und Offset, den Du bei Deinen > Messungen überprüfen musst. Ich habe übrigens auch schon den ADC1 direkt auf VCC hinter dem LDO gelegt und dort bekomme ich exact 3.3V (1023)...
Paul G. schrieb: > Reiner Gast schrieb: >> Pullup am ADC Pin eingeschaltet? > > Muss ich das wenn ich anaologRead() mache? Nun, mache es direkt, schaue in's Datenblatt welche Register und Werte (Bits) dafür gesetzt, resp. gelöscht werden müssen.
Paul G. schrieb: > Lothar M. schrieb: >> Gegen welche Referenzspannung misst du das? > Also ich "programmiere" den Atmega über ISP mit Arduino IDE > und dort mache ich einfach nur einen analogRead(A1), damit sollte > die Referenz ja VCC, also 3.3 Volt aus dem LDO sein. Der liefert auch > ziemlich genau 3.3(27)V... VORSICHT! Da bin ich schon mal reingefallen! Mein AVR-Dragon hat irgendwelche Pull-Up-Widerstände! Wenn die Programmierung beendet ist, sind die ISP-Pins NICHT total hochohmig! Da liegen ein paar kOhm gegen VCC! Das hat mir eine Analogmessung verfälscht! >> Häng einfach einen 10nF Kondensator zwischen ADC-Pin und GND. Dann ist >> der Eingang niederimpedant... > HAbe im Moment nur 100nF, damit ändert sich leider nix. Zieh den ISP-Stecker ab. >>> Kann ich nicht einfach die 0,27V in meinen weiteren Rechnungen >>> rausrechnen? >> Ja, so macht man das heutzutage... > Mach ich dann wohl auch NEIN! Finde das Problem und löse es!
Paul G. schrieb: > Reiner Gast schrieb: >> Pullup am ADC Pin eingeschaltet? > > Muss ich das wenn ich anaologRead() mache? NEIN! Du DARFST es nicht, wenn dein Sensor einen hochohmigen, sprich schwachen Ausgang hat! Normalerweise schaltet die der Arduino NICHT ein, es sei denn, du hast das irgendwo aus Versehen getan.
Paul G. schrieb: > HAbe im Moment nur 100nF, damit ändert sich leider nix. Dann ist wie erwartet nicht die Impedanz dein Problem. Paul G. schrieb: > Muss ich das wenn ich anaologRead() mache? Nein. Das darfst du auch nicht. Hast du aber auch nicht, denn du misst ja mit dem Multimeter während der ADC Messung tatsächlich 1V. Und dieses 1V muss jetzt deine ADC-Wandlung auch bringen. Was passiert denn, wenn du eine niederimpedante Quelle wie z.B. eine 1,5V Batterie oder einen 1,2V Akku an den ADC-Pin anschließt? Welche Spannung misst du dann mit dem Multimeter und welche mit dem ADC? Am Rande: welche Spannung hat dein uC am Vref-Pin?
:
Bearbeitet durch Moderator
Lothar M. schrieb: > Paul G. schrieb: >> HAbe im Moment nur 100nF, damit ändert sich leider nix. > Dann ist wie erwartet nicht die Impedanz dein Problem. Doch, wenn gleich eher der Gleichstromwiderstand, nicht die HF-Impedanz.
Lothar M. schrieb: > Am Rande: welche Spannung hat dein uC am Vref-Pin? Wenn du mit VREF AREF am Atmega328 meinst, den habe ich unbeschaltet weil mir hier: Beitrag "Re: Power Taster und Menü Taster vereinen?" jemand davon abgeraten hat AREF auf VCC zu legen. Ich dachte dass als Referenz dann VCC am Atmega genommen wird wenn ich nichts anderes angebe. Ich habe gerade mal spasseshalber doch AREV auf VCC direkt hinter den LDO gehangen und ab da bekomme ich am ADC1 auch "308" = ~1V... Ich habe das mit der Referenz anscheinend noch nicht so ganz kappiert..
:
Bearbeitet durch User
Paul G. schrieb: > Ich habe übrigens auch schon den ADC1 direkt auf VCC hinter dem LDO > gelegt und dort bekomme ich exact 3.3V (1023)... Sind es bei 3,2V auch noch 1023?
Paul G. schrieb: > Lothar M. schrieb: >> Am Rande: welche Spannung hat dein uC am Vref-Pin? > > Wenn du mit VREF AREF am Atmega328 meinst, den habe ich unbeschaltet > weil mir hier: > Beitrag "Re: Power Taster und Menü Taster vereinen?" > jemand davon abgeraten hat AREF auf VCC zu legen. Macht man auch nicht. Dort gehören 100nF gegen GND dran. Den Rest macht der AVR intern. Was hast du denn überhaupt für einen Aufbau? Ich dachte du hast einen Arduino? > Ich dachte dass als Referenz dann VCC am Atmega genommen wird wenn ich > nichts anderes angebe. Wo denn? Welcher Quelltext? > Ich habe gerade mal spasseshalber doch AREV auf VCC direkt hinter den > LDO gehangen und ab da bekomme ich am ADC1 auch "308" = ~1V... Aha! Also stimmt was mit deiner ADC-Beschaltung oder Konfiguration nicht. > Ich habe das mit der Referenz anscheinend noch nicht so ganz kappiert.. Sieht so aus. Zeig uns deinen Schaltplan und Quelltext.
Falk B. schrieb: > Lothar M. schrieb: >> Paul G. schrieb: >>> HAbe im Moment nur 100nF, damit ändert sich leider nix. >> Dann ist wie erwartet nicht die Impedanz dein Problem. > Doch, wenn gleich eher der Gleichstromwiderstand, nicht die HF-Impedanz. Mit einem 100nF Kondensator am ADC-Pin (und zudem ohne ADC-Kanalwechsel) ist der Gleichstromwiderstand/Innenwiderstand des Sensors irrelevant. Denn der Kondensator puffert ja während der Sample-Phese. Bestenfalls die Reaktionsgeschwindigkeit wird dann eingeschränkt, weil der Sensor über seinen hohen Innenwiderstand erstmal den Pufferkondensator aufladen muss. Paul G. schrieb: > Ich habe gerade mal spasseshalber doch AREV auf VCC direkt hinter den > LDO gehangen und ab da bekomme ich am ADC1 auch "308" = ~1V... Und welche Spannung hast du dort, wenn du diesen (unerlaubten) Kurzschluss nicht machst? Gerade die von mir vermuteten 2,6V? Einhart P. schrieb: > Wie hast du AVCC angeschlossen? Vermutlich gar nicht, das würde das Verhalten erklären... ;-)
:
Bearbeitet durch Moderator
Einhart P. schrieb: > Wie hast du AVCC angeschlossen? Okay ich glaube das ist der Fehler... Ich hatte AVCC in meinem Schaltplan an VCC. Auf dem Steckbrett aber garnicht angeschlossen. Jetzt mit AVCC an VCC bekomme ich "308" 0.99V am ADC1. Ich denke das war das Problem... Schusselfehler. >Was hast du denn überhaupt für einen Aufbau? Ich dachte >du hast einen Arduino? Mjain :). Ich habe einem Arduino Nano sein Herz rausgerissen und verwende nur den rohen Atmega328P-AU auf meinem selbst geätztem Dev-PCB. Wie gesagt verwende ich nur noch die Arduino-IDE, exportiere die hex Dateien und flashe die mit avrdude über Pegelwandler->ISP. Sieht im Moment schlimm verkabelt aus aber geht soweit... bis auf die dummen Fehler.
Lothar M. schrieb: > Einhart P. schrieb: >> Wie hast du AVCC angeschlossen? > Vermutlich gar nicht, das würde das Verhalten erklären... ;-) Sie haben gewonnen :)
Paul G. schrieb: > Einhart P. schrieb: >> Wie hast du AVCC angeschlossen? > Okay ich glaube das ist der Fehler... Zur abschließenden Erklärung des Effekts: durch die fehlenden 3,3V an der ADC-Versorgung wurde der ADC nur parasitär durch interne Schutzdioden oder sonstige Siliziumstrukturen versorgt. Auf diese Art hattest du nur 2,6V am Vref-Pin und gegen diese 2,6V wurde dann der Wert vom ADC-Pin um 27% zu hoch gemessen. Zur schnellen Fehlerfindung hätte dann die Messung der an der AD-Wandlung beteiligten Spannungen Avcc, Vref und der Spannung am ADC-Pin beigetragen... ;-)
:
Bearbeitet durch Moderator
Lothar M. schrieb: > Paul G. schrieb: >> Wenn ich OUT nun aber über ADC1 messe bekomme ich den Wert 396, was >> ja entschpricht 3.3V/1023 * 396 = 1,27V , also 0,27V mehr als direkt >> gemessen. > Man könnte glatt meinen, dass alles passen würde, wenn da 2,56V statt > 3,3V stünden. Ja, das würde wunderbar passen :) Wäre allerdings bei einem ATMega328 seltsam, der hat eine interne Referenz von 1,1V. Also direkt am Controller nachmessen: VCC, AVCC und AREF. Ich gehe davon aus, dass du AGND angeschlossen hast? Und wenn nur an der Spannung am AREF-Pin etwas komisch ist, ggf. noch analogReference() aufrufen: https://www.arduino.cc/reference/en/language/functions/analog-io/analogreference/ MfG, Arno
Lothar M. schrieb: > Mit einem 100nF Kondensator am ADC-Pin (und zudem ohne > ADC-Kanalwechsel) ist der Gleichstromwiderstand/Innenwiderstand des > Sensors irrelevant. Aber nicht, wenn irgendwo ein Pull-Up oder ähnliche Fehler sind!
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.