Hallo Forum, ich würde gern mit einem uC unterscheiden, ob die Versorgung der Schaltung mit 48V, 50V oder 60V erfolgt. Dazu würde ich gern den Onboard-ADC des bereits vorhandenen ATMega328p verwenden. Da ich bisher noch nie mit einem ADC gearbeitet habe, habe ich mir anhand des Datenblattes und eines Online Tutorials die angehängte Schaltung erdacht. Als Referenzspannung würde ich die interne Referenz von 1.1V verwenden. Am Spannungsteiler entstehen nach meiner Rechnung folgende Teilspannungen: U1: 60 V ==> U2: 3.10 V U1: 50 V ==> U2: 2.59 V U1: 48 V ==> U2: 2.48 V Meine Fragen dazu wären: 1) Ist die Schaltung und die Rechnung so korrekt? 2) Kann ich die anderen Pins des ADC Ports weiterhin als digitale I/Os benutzen? Es sollen eine LED und ein Transistor geschaltet werden - allerdings nicht, während eine Messung gemacht wird... 3) Laut ADC Tutorial hier auf uC.net sollte zwischen AVCC und VCC noch eine Induktivität von 10uH gesetzt werden oder ersatzweise einfach 47R. Was wäre denn hier besser? Die Messung selbst würde ich anhand von Mittelwerten durchführen. Also mehrmals messen und das Ergebnis vermitteln. Würde mich über Ratschläge sehr freuen. Vielen Dank, Dietmar
Digilog schrieb: > 1) Ist die Schaltung und die Rechnung so korrekt? Vermutlich Digilog schrieb: > 2) Kann ich die anderen Pins des ADC Ports weiterhin als digitale I/Os > benutzen? Es sollen eine LED und ein Transistor geschaltet werden - > allerdings nicht, während eine Messung gemacht wird... Ja Digilog schrieb: > 3) Laut ADC Tutorial hier auf uC.net sollte zwischen AVCC und VCC noch > eine Induktivität von 10uH gesetzt werden oder ersatzweise einfach 47R. > Was wäre denn hier besser? Induktivität. Digilog schrieb: > Die Messung selbst würde ich anhand von Mittelwerten durchführen. Also > mehrmals messen und das Ergebnis vermitteln. Ja - geht auch anders (-> Artikel). Kannst Du bitte verraten, warum Du Digilog schrieb: > Als Referenzspannung würde ich die interne Referenz von 1.1V verwenden. zur Messung von Digilog schrieb: > Am Spannungsteiler entstehen nach meiner Rechnung folgende > Teilspannungen: > > U1: 60 V ==> U2: 3.10 V > U1: 50 V ==> U2: 2.59 V > U1: 48 V ==> U2: 2.48 V verwenden willst?
Also die Werte für U2 sind mir unklar, ich errechne andere; und wie, bitte, sollen größere Spannungen als Uref gemessen werden können?
Zu 1: Spannungsteiler überarbeiten. Zusätzlich: Stützkondensator vorsehen, da doch recht hochohmig, oder für hohe Abtastraten einen Impedanzwandler vorsehen. Zu 2: Grundsätzlich ja. Zu 3: Natürlich ein L! Welch eine Frage... (besser ein richtiger R als ein falsches L) ----------------- Tipp: Datenblatt aufmerksam lesen.
Digilog schrieb: > Hallo Forum, > > ich würde gern mit einem uC unterscheiden, ob die Versorgung der > Schaltung mit 48V, 50V oder 60V erfolgt. > > Dazu würde ich gern den Onboard-ADC des bereits vorhandenen ATMega328p > verwenden. > Da ich bisher noch nie mit einem ADC gearbeitet habe, habe ich mir > anhand des Datenblattes und eines Online Tutorials die angehängte > Schaltung erdacht. > > Als Referenzspannung würde ich die interne Referenz von 1.1V verwenden. > > Am Spannungsteiler entstehen nach meiner Rechnung folgende > Teilspannungen: > > U1: 60 V ==> U2: 3.10 V > U1: 50 V ==> U2: 2.59 V > U1: 48 V ==> U2: 2.48 V > > Meine Fragen dazu wären: > > 1) Ist die Schaltung und die Rechnung so korrekt? Grundsätzlich ja. Es empfiehlt sich VCC und AVCC mit einem kleinen R oder Drossel und C an AVCC zu entkoppeln. (Siehe diesbezügliche Datenblatt Empfehlungen) Am ADC0 Eingang parallel zum 20K nach Masse schließe in parallel einen 10n-0.1uF C an um dem ADC zum Samplen genug Ladestrom zu geben. Bei den inneren Umschaltvorgängen werde intern kleine Cs aufgeladen. Das muss schnell gehen. Da ist es immer günstig die Vin mit einem C zu puffern. > > 2) Kann ich die anderen Pins des ADC Ports weiterhin als digitale I/Os > benutzen? Es sollen eine LED und ein Transistor geschaltet werden - > allerdings nicht, während eine Messung gemacht wird... Dafür sind uC gemacht:-) Sollte kein Problem sein solange der Programmablauf und ISR Regime sinnvoll ist. > > 3) Laut ADC Tutorial hier auf uC.net sollte zwischen AVCC und VCC noch > eine Induktivität von 10uH gesetzt werden oder ersatzweise einfach 47R. > Was wäre denn hier besser? Siehe oben. Ich nehme meistens einen 10 Ohm her und 0.1-1uF nach Masse um Stoerungen von versauter Vcc zu abzuschwächen. Drossel ist oft Overkill. Die VDD vom uC sollte mindestens zwei MAl abgeblockt werden. 2x 0.1uF Keramik und 10uF TAntal oder guter Elko. Jedes VDD/VSS Pin-Pärchen sollte so nahe wie möglich den 0.1uF verpaßt kriegen. Der 10uF kann ein bißchen weiter weg sein. > > Die Messung selbst würde ich anhand von Mittelwerten durchführen. Also > mehrmals messen und das Ergebnis vermitteln. Ja. Man kann den ADC im Interrupt Betrieb laufen lassen und dann dort die Werte mitteln. Mache ich meistens so. Man muss nur bei den Einstellungen aufpassen, daß die ADC ISR Frequenz nicht die CPU Ressourcen zu sehr beansprucht. Es ist zweckmäßig die ADC Clock so einstellen, daß die ADC Umwandlungen etwas Zeit brauchen oder mit einem existierenden TIMER Interrupt durch setzen eines ADC CTL Bits den ADC zur Umwandlung triggern. Fuer viele Anwendungen reicht es aus, den ADC alle 1ms zu triggern und der CPU spuert das kaum. Natürlich darf kein zeitraubender Code in der ADC ISR sein - Also keine Float Berechnungen. Wenn man mit 16-Bit Int arbeitet kann man bequem bis zu 64 Messungen ohne Überlauf zusammenzählen und dann durch Rechtsschieben sehr schnell dividieren solange man sich auf 2er Potenzen beschränkt. Man soll dann zum Schluss die Hälfte des Mittelwert Divisors dem Resultat dazu rechnen um LSB 0/1 Bit Unsicherheiten zu minimieren. Z.B. 16 * ADC-Wert addieren, dann durch 16 dividieren und 8 dazu addieren. Manche Leute verwenden auch gerne Running Average oder Tiefpass Algorithm Kommt darauf an was man machen will. Fuer viele Anwendungen bei der DC Messung reicht aber die einfache Mittelwertbildung. Aufpassen, das man den so erfaßten ADC Wert atomisch abruft. Das heißt, Man soll bei 8-Bittern bevor man den Wert liest global die Interrupts abschalten und nach der Erfassung wieder einschalten. Sonst kann es passieren, daß im Zeitpunkt des Werte Lesens, ein Interrupt fröhlich daher kommt und ein falscher Wert gelesen wird weil im Hintergrund der Wert verändert werden könnte. Das steht alles in vielen Büchern und Webseiten und im Forum. Übrigens, nimm für die Beispiels Spannungen VREF=VCC her. Bei 1.1V darf die maximale ADC Eingangsspannung nicht mehr als VREF betragen. Eine höhere VREF ergibt ruhigere Meßwerte. Viele Leute ziehen manchmal eine externe Referenz wie 4.096V oder 2.5-3V vor. Es gibt günstige Spannungsreferenzen in allen möglichen Spannungen und Qualitäten. 4.096V ist insofern bequem weil es ein Vielfaches vom ADC MAX Wert ist. 1BIT ist dann genau 4mV wert; 1023 = 4092mV. Ist aber nicht zu wichtig. > > Würde mich über Ratschläge sehr freuen. > > Vielen Dank, Dietmar Gruss, Gerhard
Hi Robert, Danke für Deine Antworten. Tja - also, die Sache mit der Referenzspannung habe ich ehrlichgesagt noch nicht ganz verstanden. Aus dem Tuorial, dem Datenblatt und auch der im Tutorial verlinkten Analyse der typischen Toleranzen bei der der internen VREF habe ich entnommen, dass es sich grundsätzlich empfiehlt, die interne Referenz zu verwenden, die beim ATMega328p 1.1V beträgt. Was ich noch nicht verstanden habe ist, ob die zu messende Spannung am ADC Eingang kleiner sein muss, als VREF... also in diesem Fall kleiner als 1.1V. Im Datenblatt steht: "0 to VCC ADC input voltage range"... Wenn Du es bemängelst, tippe ich mal, dass die interne VREF nicht die richtige Wahl ist, oder? LG, Dietmar
Digilog schrieb: > Im Datenblatt steht: "0 to VCC ADC input voltage range"... Das bezieht sich nur elektrisch. Die ADC Eingangsspannung darf VREF nicht überschreiten sonst kriegt man nur 1023 Maximalwert. Bei VREF=1.1V darf die maximale Spannung rund 1.098V (1023) betragen.
Gerhard O. schrieb: > Gruss, > Gerhard Vielen Dank für die ausführliche Antwort, Gerhard. Damit wären auch die restlichen Unklarheiten geklärt. Ich werde mir das gleich mal so auf dem Steckbrett zurecht bauen. 1000 Dank!!!
Digilog schrieb: > Wenn Du es bemängelst, tippe ich mal, dass die interne VREF nicht die > richtige Wahl ist, oder? Welche Alternativen gibt es? Ohne zusätzliche Bauteile geht halt nur die Interne oder Vcc. Und dem Vcc ist eher nicht zu trauen.(?!?!?) Mantra: Ratiometrische Messungen, dann Ref = Vcc Absolute Messungen, dann interne oder externe Ref.
Digilog schrieb: > Wenn Du es bemängelst, tippe ich mal, dass die interne VREF nicht die > richtige Wahl ist, oder? Nö. Es sind nur die Widerstände für den Spannungsteiler nicht sinnvoll gewählt. Bei der höchsten zu messenden Spannung sich halt nur 1.1V ergeben, wenn man gegen eine 1.1V-Referenz messen möchte. Besser noch: 10% weniger, wegen der möglichen Abweichung der Referenz.
Hier ist ein Beispiel einer (billigen) Shunt Spannungsreferenz: https://www.digikey.ca/product-detail/en/texas-instruments/LM385Z-2.5-NOPB/LM385Z-2.5NS-NOPB-ND/148189 TL431C laesst sich auch verwenden. Gibt es in TO-92 Gehäuse.
Ich hab den Eindruck, dass der Spannungsteiler nicht richtig gerechnet ist. Dahinter vielleicht noch einen Tiefpass 10k/100n o.ä., damit nicht jeder Blödsinn durchkommt. Und ansonsten das Kapital ADC nochmal durchlesen, dann wird es schon klarer. Bei einer Ref von 1.1V sollte auch die Eingangsspannung dazu passen.
Vielleicht hätte es in der Anwendung Sinn den Meßbereich mit Nullpunktunterdrückung zu versehen. Mit einem RR-OPV ließe sich das schön machen. Wenn z.B. Batteriespannung gemessen wird, dann hat man so viel mehr Auflösung. Man könnte den Meßbereich somit von 40 auf 60V begrenzen. Mit einem als Differenzverstärker geschalteten Rail to Rail OPV der die Eingangsspannung am nicht invertierenden Eingang bekommt und am Invertierenden Eingang so wie hier mit 1.00V bekommt, liefert dann eine Ausgangsspannung von 0-1V. Ganz bis auf Null gehen nur die wenigsten OPVs. Aber fürs Prinzip reicht es. Die V1 kann man (hochohmig) aus der VREF gewinnen und auf 1V abgleichen. Vout = (R1/R2)(V2-V1) R1=R2=10K0. Um einen Meßbereich von 40-60V zu haben vergrößert man den R1 am Eingang um einen 40:1 Teiler zu erhalten. (Siehe ZeroSuppressionAmp.jpg) . Es fallen dann zwischen 40-60V dort 1-1.5V ab. R4/R6 skaliert um mit den gewählten Werten einen 0-1V Meßbereich zu erhalten der dann direkt dem ADC AIN0 Eingang zugeführt werden kann. Z.B. Meßbereich 40-60V Dann ergibt sich am Ausgang des OPV: 40V => 0V 50V => 0.5V 60V => 1.0V Die Auflösung wird mit 20mV/Bit also wesentlich besser sein.
Digilog schrieb: > Ist die Schaltung und die Rechnung so korrekt? Ungefähr ja. 60V / 350kΩ x 20kΩ = 3,428V Aber diese 3,428V kannst du mit der internen 1,1V Referenz nicht erfassen, da sie höher ist. Außerdem solltest du bedenken, dass die interne Referenz zwar einigermaßen stabil ist, aber durchaus um 10% vom Nennwert abweichen kann. > Kann ich die anderen Pins des ADC Ports weiterhin als > digitale I/Os benutzen? Ja > Laut ADC Tutorial hier auf uC.net sollte zwischen AVCC und VCC > noch eine Induktivität von 10uH gesetzt werden oder ersatzweise > einfach 47R. Was wäre denn hier besser? Ich denke, dass du bei deiner Anwendung einfach AVCC direkt mit VCC verbinden kannst. Geringfügiges Rauschen ist hier egal, gerade weil du per Software filtern wirst (Mittelwerte bilden). Arduino Fanboy D. schrieb: > Zusätzlich: Stützkondensator vorsehen, da doch recht hochohmig Guter Hinweis. Und der braucht zwischen den Messungen genug Zeit, sich wieder aufzuladen. Sonst wird jede aufeinander folgende Messung einen kleineren Wert liefern. Digilog schrieb: > Was ich noch nicht verstanden habe ist, ob die zu messende Spannung am > ADC Eingang kleiner sein muss, als VREF... also in diesem Fall kleiner > als 1.1V. Genau so ist es. Plane noch 10% Reserve ein, da die Referenz im ungünstigsten Fall auch 1V haben kann. Spannungen darüber (bis 5) sind zwar erlaubt, können aber nicht sinnvoll gemessen werden, denn schon bei Erreichen der Referenzspannung liefert der ADC den maximal möglichen Wert 1023. Höhere Spannungen liefern ebenfalls den Wert 1023.
Digilog schrieb: > Am Spannungsteiler entstehen nach meiner Rechnung > folgende Teilspannungen: Rechnen von Spannungsteilern musst Du noch lernen, die Werte passen nicht. Vergleiche mal den Rechengang Stefanus F. schrieb: > 60V / 350kΩ x 20kΩ = 3,428V mit Deinem. Arduino Fanboy D. schrieb: > Zu 3: > Natürlich ein L! > Welch eine Frage... Gerade der 'Fanboy' sollte Schaltbilder der Arduinos kennen und wissen, dass es dort keine Drossel in der AVCC gibt. Oh Wunder, aus unerklärlichen Gründen kann man damit trotzdem Spannungen messen. Gerhard O. schrieb: > Vielleicht hätte es in der Anwendung Sinn den Meßbereich mit > Nullpunktunterdrückung zu versehen. Mit einem RR-OPV ließe sich das > schön machen. Ich denke nicht, dass dieser Aufwand notwendig ist. Der AT328 löst 10 Bit auf, bei 60 Volt also rund 60mV. Das macht unten von 50 auf 48 Volt immer noch 30 Schritte, was ich für beherrschbar halte. Für die Überwachung einer Batterieversorgung ist die interne Bandgap der 328 stabil genug, da sehe ich auch den TL431 als unnötig. Meistens habe ich Zeit genug, Oversampling zu machen: Ich hole mir 20 Meßwerte mit jeweils 2ms Pause, werfe den kleinsten und größten weg und rechne den Mittelwert - das Ergebnis ist immer sehr stabil.
Manfred schrieb: > Arduino Fanboy D. schrieb: >> Zu 3: >> Natürlich ein L! >> Welch eine Frage... > > Gerade der 'Fanboy' sollte Schaltbilder der Arduinos kennen und wissen, > dass es dort keine Drossel in der AVCC gibt. Was ich alles weiß.... Und du mir alles unterstellen möchtest... Seltsam seltsam... Die Arduino Schaltbilder und Aufbauten halten sich nicht an die strengsten Vorgaben des Datenblattes. Da sind die Clone/Nachbauten teils besser aufgestellt, als die Originale. Das wissen wir doch beide! Oder? Manfred schrieb: > Oh Wunder, aus > unerklärlichen Gründen kann man damit trotzdem Spannungen messen. Mit verschenkter Genauigkeit. Was dann dazu führt, dass irgendwelche Leute, die es selber auch nicht besser machen wollen, mit eigentlich unnötigen Rechenspielchen usw. die Genauigkeit im Nachhinein wieder raus holen wollen. Z.B. Du: Manfred schrieb: > Meistens habe ich Zeit genug, Oversampling zu machen: Ich hole mir 20 > Meßwerte mit jeweils 2ms Pause, werfe den kleinsten und größten weg und > rechne den Mittelwert - das Ergebnis ist immer sehr stabil. Wenn für dich Arduino das Maß der Dinge, oder der Nabel der Welt, ist... Von mir aus. Aber für jemanden, welcher eigene Schaltungen entwickelt, so wie in diesem Thread, sollte es das nicht sein. (so lautet mein Vorschlag) Klar kann man da mal rüber schauen, und vergleichen. Aber das ist doch alles kein Grund, das eigene Hirn abzuschalten. Oder das Datenblatt zu ignorieren. ----- Bemerke! Die Frage lautete: Digilog schrieb: > 3) Laut ADC Tutorial hier auf uC.net sollte zwischen AVCC und VCC noch > eine Induktivität von 10uH gesetzt werden oder ersatzweise einfach 47R. > Was wäre denn hier besser? Und was ist besser? Deiner Meinung nach? Weg lassen, ist besser?
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.