Kleine Spannung messen mit Arduino

Der chaotische Hauptfaden

Moderatoren: Heaterman, Finger, Sven, TDI, Marsupilami72, duese

Antworten
becks
Beiträge: 150
Registriert: Mo 12. Aug 2013, 22:12

Kleine Spannung messen mit Arduino

Beitrag von becks »

Hallo,

ich möchte mit einem Arduino den Strom meines Labornetzteils messen. Am Amperemeter messe ich ca. 18 mV bei Vollast (ca. 3 A). Das reicht dem Arduino aber nicht für eine vernünftige Auswertung aus, selbst wenn ich die interne Referenzspannung (1,1 V) verwende. Die angezeigten Werte schwanken dann stark. Daher wäre wohl ein Operationsverstärker fällig. Was nimmt man da am besten? Die Anforderungen an die Genauigkeit sind eher gering (es würde reichen, wenn ich am Ausgang eine Änderung der Eingangsspannung von 1 mV abbilden könnte). Alle Eingangsspannungen unter 6 mV (ca. 1 A) sind für meine Anwendung uninteressant, da ich nur aufgrund zu kleiner Kühlkörper ab einer gewissen Verlustleistung den Ausgang abschalten möchte. An Versorgungsspannungen habe ich 5 V und 12 V zur Verfügung. Da bereits andere Analogpins belegt sind, möchte ich weiterhin die 5 V Referenz verwenden. Die Verstärkung müsste also etwa 100 bis 250 betragen. In der Bastelkiste sind noch massig LM358. Würde das ausreichen? Ansonsten habe ich bisher nur den OPA340 im Sinn. Was wäre hier angebracht?

MfG

becks
Benutzeravatar
xoexlepox
Beiträge: 4814
Registriert: So 11. Aug 2013, 19:28
Wohnort: So etwa in der Mitte

Re: Kleine Spannung messen mit Arduino

Beitrag von xoexlepox »

Der Knackpunkt dabei ist der Umstand, daß deine zu messende Spannung sehr nahe an 0V liegt, womit "normale" OpAmps meist überfordert sind. Du benötigst auf jeden Fall einen "Rail to Rail"-OpAmp. Die Datenblätter vom LM358 und OPA340 habe ich jetzt nicht gerade parat :( Ich habe für solche Zwecke meist den OPA343 verwendet.
TDI
Beiträge: 2608
Registriert: Fr 28. Jun 2013, 09:43
Wohnort: plattdeutsches Nordland

Re: Kleine Spannung messen mit Arduino

Beitrag von TDI »

Moin,
ein blinkender Portpin des Arduino ließe sich bestimmt für eine Ladungspumpe mißbrauchen mit der die nötige, negative Spannung für dem OpAmp erzeugt wird. Ganz viel Strom braucht man da ja nicht...
Benutzeravatar
Bastelbruder
Beiträge: 11481
Registriert: Mi 14. Aug 2013, 18:28

Re: Kleine Spannung messen mit Arduino

Beitrag von Bastelbruder »

Der 358 kann mit null Volt am Eingang umgehen, sogar mit 0,5 V unter der Masse. Und mit einem Lastwiderstand gegen Masse auch am Ausgang fast null Volt ausgeben.

Ein Problem wenn man einigermaßen genau messen will, sind Störspannungen wie Rauschen und so, die werden an der Nullinie dann einseitig abgeschnitten und "gleichgerichtet". Mit der Folge daß der "Zeiger" bei 2, 5, 10, 20 mV exakt stimmt aber nie den Nullpunkt erreicht.
Weil ein Professor hintendran hängt, läßt sich das elegant reparieren indem ein vorsätzlicher Offset erzeugt wird den die Software wieder abzieht, dazu sind bloß zwei zusätzliche Widerstände notwendig. Mit genauem Abgleich läßt sich sogar das bei Profis beliebte "Vorzeichenblinken" erzeugen, das den wahren Nullpunkt bestätigt. Und der Offset des 358 von maximal 2 mV interessiert auch nicht so lange der Fehler stabil bleibt.

Ich gehe davon aus, daß die Spannung direkt am Shunt des Zeigeramperemeters gemessen wird, der Quellwiderstand ist im Milliohmbereich. Die Schaltung erzeugt mit R1 R2 einen Offset von 2,2 mV der auf jeden Fall ausreicht um auch den möglichen Offset des Verstärkers zu kompensieren. Die maximal mögliche Eingangsspannung inclusive beider Offsetquellen ist 22,2 mV. Die wird 210fach (R3 R4) verstärkt, damit bleibt auch noch etwas Reserve nach oben. Hiermit dürften effektiv 10 mA meßbar sein.
Ampereverstärker.png
Ampereverstärker.png (2.3 KiB) 3249 mal betrachtet
Reinlöten, einmal Offset und Faktor justieren und freuen.

edith Luminanzki meint dazu: Der ADC hat natürlich eine Abtastrate jenseits von Gut und Böse, da wird eventuell viiel Rauschen und Prozessorgeschrei gemessen. Wenn die Abtastung beispielsweise alle 20 ms erfolgt, könnte ein Kondensator mit 470 nF parallel zu R1 ziemlich alle rappeligen Ströme soweit beruhigen daß eine stabile Messung erfolgt.
Benutzeravatar
ferdimh
Beiträge: 9379
Registriert: Fr 16. Aug 2013, 15:19

Re: Kleine Spannung messen mit Arduino

Beitrag von ferdimh »

Man kann diesen verhau noch optimieren, wenn man noch einen 2N7002 o.Ä. einfügt, der die zu messende Spannung periodisch kurzschließt. Dann kann man die "Nullspannung" messen und dann noch mal "Nullspannung+Spannung aus dem Strom". Der Rest ist Mathe...
E_Tobi
Beiträge: 640
Registriert: Mo 12. Aug 2013, 22:26

Re: Kleine Spannung messen mit Arduino

Beitrag von E_Tobi »

Hi,

ich weiß nicht welchen Arduino du verwendest, und welche Beschaltung die Analogpins da schon auf dem Board haben, aber die auch in den Atmega verwendeten SAR-ADCs sind empfindlich bezüglich der Impedanz am Pin. Ein Kondensator der einige male größer ist als die S&H-Kapazität im Chip ist direkt am Pin nötig wenn das gescheit messen soll. Andernfalls kommt viel Rauschen und auf den ersten Blick zufälliger Mist raus.

Der LM358 muss dementsprechend davon isoliert werden, mit einem Reihenwiderstand...aber auch hier mit keinem zu großem Widerstand, weil der ADC durch das umladen der S&H-Kapazität einen nicht zu vernachlässigenden Eingangsstrom zieht.

Das solltest du dir vielleicht nochmal genau ansehen, es hängt vom verwendeten ADC und der Samplefrequenz ab.
becks
Beiträge: 150
Registriert: Mo 12. Aug 2013, 22:12

Re: Kleine Spannung messen mit Arduino

Beitrag von becks »

Schon mal vielen Dank für den Input!

Ich habe einen Arduino Nano mit Atmega328P (billiges China Teil mit komischen USB-IC). Ich habe jetzt einfach mal 0,47 µ zwischen Analogpin und Masse geschaltet: keine Änderung.

@Bastelbruder
Werde die Tage mal die Sache mit dem LM358 testen. Hört sich ja erstmal super an. Wenn es nur halb so gut klappt, dann ist gut ;)
Ich messe genau wie in deinem Schaltplan am Amperemeter. Das Voltmeter greife ich noch über einen Spannungsteiler ab. Dass der Shunt im Amperemeter so klein ist, habe ich irgendwie im Vorfeld unter den Tisch fallen lassen... Ursprünglich sollte der Arduino eh nur einen NTC auslesen und einen Lüfter steuern. Jetzt kommt noch ein Relais und die Messung der Verlustleistung dazu. Aber auch nur, weil ich nicht den Temperaturanstieg auswerten wollte. Zumal die Transistorgehäuse (2x2N3055 parallel) deutlich schneller heiß werden, als es am Kühlkörper messbar ist.
Mal sehen wo das endet, aber als erstes Arduino-Projekt ist das schon mal sehr lehrreich.

MfG

becks
Benutzeravatar
gafu
Beiträge: 6376
Registriert: Mi 14. Aug 2013, 20:56
Wohnort: nahe Jena
Kontaktdaten:

Re: Kleine Spannung messen mit Arduino

Beitrag von gafu »

ist zwar jetzt nicht genau die antwort auf die frage, aber hast du schon mal darüber nachgedacht einfach die temperatur des kühlkörpers zu messen statt den strom? Dann könnte man kurzzeitig noch was rauskitzeln aus dem netzteil (man weiß ja nie wofür mans mal braucht) und würde erst bei tatsächlicher überhitzung schalten.
Ließe sich auch leichter messen.
Und leicht ließe sich noch eine vorwarnung anzeigen wenns bald zu heiß wird.
Benutzeravatar
Geistesblitz
Beiträge: 1934
Registriert: Di 5. Nov 2013, 17:53
Wohnort: Dresden

Re: Kleine Spannung messen mit Arduino

Beitrag von Geistesblitz »

War da nicht was, dass man die Referenzspannung des AVR extern vorgeben kann? Dann könnte man mit der Referenz runter gehen (z.B. auf 100mV oder so) und könnte in dem Bereich dann feiner auflösen. Wenn man die Referenz zuverlässig und genau einstellen kann wäre es sogar sinnvoll sie als 102,3V zu setzen, denn dann wäre jeder Schritt genau 0,1mV.
Benutzeravatar
ferdimh
Beiträge: 9379
Registriert: Fr 16. Aug 2013, 15:19

Re: Kleine Spannung messen mit Arduino

Beitrag von ferdimh »

Das kann man schon machen, damit gewinnt man aber keine Genauigkeit. Schon bei 1,1Vref misst der ADC anteilig Rauschen.
E_Tobi
Beiträge: 640
Registriert: Mo 12. Aug 2013, 22:26

Re: Kleine Spannung messen mit Arduino

Beitrag von E_Tobi »

Hi,
becks hat geschrieben: Ich habe jetzt einfach mal 0,47 µ zwischen Analogpin und Masse geschaltet: keine Änderung.
Das war als Zusatz zu Bastelbruder's Offset-Verstärkungs-Schaltung gedacht. Wenn du vernünftig aufgelöste Messwerte kriegst siehst dus.

Edit:
Geistesblitz hat geschrieben:War da nicht was, dass man die Referenzspannung des AVR extern vorgeben kann? Dann könnte man mit der Referenz runter gehen (z.B. auf 100mV oder so) und könnte in dem Bereich dann feiner auflösen. Wenn man die Referenz zuverlässig und genau einstellen kann wäre es sogar sinnvoll sie als 102,3V zu setzen, denn dann wäre jeder Schritt genau 0,1mV.
Minimum Vref für die ICs beträgt 1V
Benutzeravatar
Bastelbruder
Beiträge: 11481
Registriert: Mi 14. Aug 2013, 18:28

Re: Kleine Spannung messen mit Arduino

Beitrag von Bastelbruder »

Der ganze Optimierungswahn mit 102,4 mV für die Referenz - nicht 102,3 mV ! - ist akademischer Blödsinn. Der Wandler wird damit tatsächlich wie erwartet funktionieren, bloß wirken sich die Chipinternen Störspannungen und -Ströme zehnmal so stark aus.

Wie solche Störungen zustandekommen ist meist Geheimnis des Chipkonstrukteurs. Nicht umsonst haben viele Controller mit Abfallfunktionswandler* einen ADC-Sleepmode um genau solche Störeffekte zu verhindern. Oft führen aber Überschwinger an Portleitungen dazu daß parasitäre "Schutzdioden" leitend werden und den Chip mit Löchern verseuchen. Dafür ist der Anwender verantwortlich. Nicht erst bei 0,7 Volt in Durchlaßrichtung werden die Dioden leitend, nein alle 60 mV verzehnfacht sich die Anzahl der produzierten Löcher, das geht wirklich bei null los.

Wenn ich ein Meßgerät baue, dann hat Stabilität - Wiederholbarkeit gemessener Werte - die allerhöchste Priorität. Ob die Auflösung 1 mV ist oder 1,07 mV ist vollkommen irrelevant. Das Kleinhirn kann mit korrekten Werten rechnen und in der Ausgabe die ohnehin nicht ablesbaren letzten Stellen weglassen. Aber der Nullpunkt muß vollständig abgebildet werden, das geht bloß wenn ein kleines Stück ins Negative gemessen wird. Und wenn in unserem Fall 18 mV gemessen werden sollen, schadet es sicher nicht wenn da noch etwas Reserve bis 19 mV ist. Wie an seriösen Zeigerinstrumenten, da kann der Zeiger auch etwas rechts und links über den letzten Strich. Mit Grausen denke ich an Manometer oder KFZ-Tachometer, bei denen der Zeiger per mechanischem Anschlag gehindert wird den wahren Nullpunkt anzuzeigen …

Kürzlich hatte ich einen Meß-PC auf dem Tisch, drin steckt eine wirklich Vertrauenswürdige Karte von Meilhaus. Das Datenblatt erzählt von ±10 Volt, tatsächlich war bei dieser Karte der 16bit-Wandler schon 20 mV früher am Anschlag. Mit dem Resultat daß einer der oben erwähnten (nicht-)Akademiker die Meßergebnisse verschlimmbessert hat indem er 10,000 Volt eingespeist und mit Hilfe eines Korrekturfaktors die angezeigte Spannung korrigiert hat. Hätte er beim Abgleich 9,9 Volt genommen, wäre daran nichts auszusetzen gewesen.

*Abfallfunktion ist beispielsweise die VCR-Funktion mancher Schaltuhren mit eingebautem TV-Tuner. Oder die Telefonierfunktion diverser Mini-Schmiertabletten. Dafür wird der Hauptschalter oft korrekt mit "Zwei Funktionen" beschrieben. Eine davon ist AUS. :lol:

Wenn am Eingang(smultiplexer) des ADCs unbedingt noch ein zusätzlicher Kondensator sein soll, dann muß davor noch ein 50..100 ohmiger Widerstand in die Leitung vom OpAmp.
E_Tobi
Beiträge: 640
Registriert: Mo 12. Aug 2013, 22:26

Re: Kleine Spannung messen mit Arduino

Beitrag von E_Tobi »

Bastelbruder hat geschrieben: Nicht umsonst haben viele Controller mit Abfallfunktionswandler* einen ADC-Sleepmode um genau solche Störeffekte zu verhindern. Oft führen aber Überschwinger an Portleitungen dazu daß parasitäre "Schutzdioden" leitend werden und den Chip mit Löchern verseuchen. Dafür ist der Anwender verantwortlich. Nicht erst bei 0,7 Volt in Durchlaßrichtung werden die Dioden leitend, nein alle 60 mV verzehnfacht sich die Anzahl der produzierten Löcher, das geht wirklich bei null los.
Ich weiß nicht welche ADCs du hier meinst, aber die die ich kenne halten ihre Datenblattwerte ein...und die sind recht gut und erlauben für normale Anwendungen einen Einsatz im spezifizierten Bereich bis 12 oder 16Bit, je nach Modell. Wobei das bei den 16Bit echt haarig wird mit dem Layout (und ja, wenn man sich Mühe gibt und richtig filtert kann man im Rauschen der 16Bit-Varianten die Tätigkeit der restlichen Chipbestandteile sehen).

Beispiel aus ST-Dabla: +/-1.5LSB Offset, +/-1.5LSB Gain +/-1LSB DNL und +/-1.5LSB INL max. bei bis zu +/-5mA in den Portpins.
In der Praxis (ja, ohne Streuung) und wenn man acht gibt was man an den Pins treibt können sie dementsprechend deutlich besser. Reproduzierbare und stabile 16Bit gehen mit Zeit und Tricks sogar aus den billigsten 12Bit-Wandlern der F030-Serie, wenn nebenan die UART und allerhand anderes Zeug läuft.

Von da her würde ich die durch aus nicht als Abfallfunktion sehen, sondern je nach Einsatz durchaus als taugliche Messinstrumente.
Dass sie an dedizierte ADCs zum hundertfachen Preis (edit: und der x-fachen Chipfläche) nicht ganz rankommen ist halt auch klar...
Benutzeravatar
ferdimh
Beiträge: 9379
Registriert: Fr 16. Aug 2013, 15:19

Re: Kleine Spannung messen mit Arduino

Beitrag von ferdimh »

Ich denke, die Definition von "Abfall" ist hier eine andere:
Es wird eben die noch übrig gebliebene Chipfläche eines Digitalchips für Analoggedöhns genutzt, mit dementsprechenden Herausforderungen.
Auch der AVR-ADC hält seine Spec ein, sie ist nur nicht besonders gut...
Jeder Opamp in der niedrigen Preislage wird mit bis ca 3 mV Offset angegeben, und von einem drangefrickelten Ding auf einem CMOS-Digitalprozess sind dann eben eher weniger Wunder zu erwarten.
Am Ende ist Elektronik immer mit den Problemen einer eigenltich total minderqualitativen Technik namens Halbleitern umzugehen (man erkläre mal einem Kunden, dass das Rohr mit einem Durchmesser von 110-800 mm geliefert wird; hfe von 110-800 ist eine vollkommen normale Angabe) , und dabei auf clevere Lösungen zu kommen, weil es anders einfach nicht geht.
becks
Beiträge: 150
Registriert: Mo 12. Aug 2013, 22:12

Re: Kleine Spannung messen mit Arduino

Beitrag von becks »

So, ich habe mal aufgebaut:
Die Messwerte waren anfangs absolut nicht linear. Das Problem ist (war), dass die Schaltungsmasse auch für den Arduino und den Lüfter verwendet wird. Durch den Spannungsabfall über der Masseverbindung zur Lüftersteuerung hatten sich hier Fehler eingeschlichen. Die Eingangsspannung am OPA lag so im Leerlauf bei -5 mV und stieg bei Belastung auf ca.+13 mV an. Stabile Messwerte stellten sich erst ab ca. 0,5 A ein. Ich habe jetzt die Masse für Arduino, Lüfter und OPA direkt am Amperemeter abgegriffen und den Leitungsquerschnitt auf 1,5 mm² erhöht. Jetzt passt das mit der Linearität und ein laufender Lüfter macht nur noch einen Fehler von ca. 10 mA. Durch die PWM schwanken die Messwerte scheinbar auch ein wenig. Da ich im Vorfeld ca. 0,7 V der Ausgangsspannung rausrechnen musste, um im Leerlauf auf Null zu kommen und die Ausgangsspannung so nicht über 3,7 V anstieg, musste ich R1 auf 150k verkleinern. Jetzt schaut das ganz brauchbar aus. Ohne Lüfter stabile Werte und gute Linearität ab 30 mA. Der 0,47 µ Kondensator trägt auch noch merklich zur Stabilität bei.
Ggfs. kommt vor den Spannungsregler direkt vor der Lüftersteuerung noch ein größerer Elko hinzu.

Zur Lüftersteuerung:
Ausgangslage: Kühlkörper in Extremsituationen zu klein bemessen (ca. 2,5-3 K/W je 2N3055), kein Platz vorhanden.
Abhilfe: Kühlkörper nebeneinander auf Alu-Blech angeordnet, um eine bessere thermische Kopplung zu erreichen. Lüfter mit Temperaturregelung ergänzt. Um etwas mehr Reserven zu haben, wird die Lüfterdrehzahl bei Erreichen einer gewissen Verlustleistung sofort auf 100% gesetzt. Abschaltung der Last erfolgt bei einer noch vorzugebenden Kühlkörpertemperatur. Wiedereinschalten nach einer Hysterese von 10K oder ggfs. mit Reset-Taster. Bei der Abschalttemperatur denke ich da an 60-65°C. Danach kommt relativ bald der Tod von mindestens einem Ausgangstransistor, da diese parallel geschaltet sind.

Vielen Dank noch mal für eure Hilfe!

MfG

becks
Antworten