Power Analyzer mit Soundkarte (low cost / no cost)
von Hannes69
Einleitung
Im Rahmen dieses Artikels wird die Umsetzung eines low cost bzw. no cost Power Analyzers aufgezeigt, die schnell und einfach durchführbar ist, übliche vorhandene Ressourcen nutzt und für den Hobbybereich eine mehr als ausreichende Genauigkeit liefern sollte.
Mein persönlicher Ansatz war der Wunsch, die Wirkleistung von Haushaltskleingeräten (Ladegeräte, Standby-Verbrauch von Unterhaltungselektronik usw.) halbwegs genau zu messen. Handelsübliche 'Energiemessgeräte' für kleines Geld erwiesen sich mehr oder minder als komplett unbrauchbar für diesen Zweck. Kleine Leistungen unter 5W liefern einen angezeigten Messwert von 0W, der cos phi klebt bei 1.0 auch bei induktiven/kapazitiven Verbrauchern, die Messgenauigkeit für kleine Leistungen ist mitunter katastrophal. Sprich: Solche günstigen Geräte sind vielleicht für große ohmsche Verbraucher wie einem Wasserkocher ganz passabel, aber ein Handyladegerät kann man damit nicht vernünftig bzw. gar nicht messen.
Ich entschied mich dafür, die gegebene Aufgabenstellung selber zu lösen und nicht auf ein teures Messgerät zurückzugreifen, welches für die Aufgabe zwar geeignet ist, aber nach Messung aller Geräte im Haushalt dann vielleicht doch ein tristes Dasein in der Schublade fristet...
Ich bin ein Freund von Resourcenschonung, also besteht der Ansatz darin, vorhandene Mittel zu nutzen, statt neue Mittel zu besorgen.
Einen PC oder Laptop hat ja fast jeder zu Hause, darin ist in aller Regel auch eine Soundkarte verbaut, und da diese eingangsseitig Stereo ist, hat man 2 Kanäle. Reicht, um gleichzeitig Spannungen und Ströme (und damit Leistungen) zu messen ;) Um diese Größen zuzuführen, genügen im Zweifel ein paar ohnehin herumliegende Widerstände, falls nicht, sind diese einfach zu besorgen. Dankenswerterweise gibt es Software-Oszilloskope, auch als Freeware. Zur Kalibrierung verfügt jeder gute Haushalt über ein halbwegs vernünftiges Multimeter ;)
Die Messwerte sind im Rechner, nun kommt mein persönlicher Beitrag zu dem ganzen ins Spiel: Ich hab ein kleines Stück Software geschrieben, welches aus aufgezeichneten Spannungs- und Stromverläufen alle möglichen Wechselstromgrößen (Mittelwerte, Spitzenwerte, Leistungsangaben,...) errechnet und diese als Zahlenwerte ausgibt.
Somit besteht die zu leistende Arbeit für den 'Nachbau' dieses Projekts darin, einen kleinen Messaufbau durchzuführen, eine Oszilloskop-Software herunterzuladen, zu installieren und zu konfigurieren, das ganze zu kalibrieren (z.B. mit einem hinreichend genauen Multimeter), eine Messung durchzuführen, die Messwerte zu speichern und diese Messwertdatei in meinem Software-Tool zu laden, fertig. Klingt nach nicht wenig Aufwand, ist aber in der Praxis sehr überschaubar.
Soundkarte als Oszilloskop
Soundkarten von handelsüblichen Rechnern und Laptops eignen sich für die gegebene Aufgabenstellung sehr gut. Man hat in aller Regel Stereo-Eingänge zur Verfügung, also 2 AD-Wandler, die man gleichzeitig mit Spannung und Strom eines Verbrauchers füttern kann. Zum Beispiel mein Desktop-Rechner mit Onboard-Soundchip Realtek ALC887: 2 AD-Wandler, max. Eingangsspannung 1,3V RMS (Eingangsverstärkung bis Faktor 10 möglich), 24 bit 192 kS/s (offiziell 192, real gehen bis zu 384), Frequenzgang +/- 0.0005 dB, SNR 90dB, Eingangsimpedanz 40kOhm @ 1kHz, AA-Filter dämpft 90dB. Der Chip ist schon etwas älter, vermutlich weisen aktuellere teils etwas bessere Werte auf, für den Zweck hier tun es vermutlich alle. Grenzen der Soundkarte als Oszi liegen in der maximalen Eingangsspannung, für bestimmte Zwecke in der geringen Eingangsimpedanz (hier kein Problem) und die fehlende Möglichkeit DC zu messen (hier auch kein Problem).
Messaufbau
Soundkarten besitzen in aller Regel 3,5mm Stereo Klinkeneingänge. Also braucht man einen entsprechenden Klinkenstecker, an den man seine Messstrippen lötet oder man benutzt ein entsprechendens Kabel aus der Grabbelkiste, das man an einem Ende abschneidet und abisoliert. Ich hab mich bei meinem Aufbau für die absolute low cost Variante entschieden, und messe am Netz direkt ohne galvanische Trennung über Widerstände bzw. über Shunt. Das trifft nicht jedermanns Geschmack und Sicherheitsempfinden, tut aber, wenn man weiß was man tut (ich erspare mir die Sicherheitsbelehrung an dieser Stelle) ;) Spannung wird simpel über Spannungsteiler einem Messkanal zugeführt. Verhältnis in der Region 1:230, dann liegen ca. 1V RMS Spannung an der Soundkarte an. Dabei die mitunter etwas geringe Eingangsimpedanz der Soundkarte berücksichtigen und die Widerstandswerte nicht zu hoch wählen. Andererseits natürlich nicht zu niederohmig und die Widerstände heiß laufen lassen. Strom messe ich per Shunt. Als fliegender Aufbau mit einer nicht verbauten Steckdose verbunden (Mehrfachstecker geht wohl auch ganz gut, ist schon Platz drin für die wenigen Bauelemente). Bei diesem galvanisch nicht getrennten Aufbau natürlich drauf achten, L und N nicht zu tauschen. Desweiteren ist zu beachten, dass zumindest bei Desktop-PCs die Masse der Soundkarte mit der Erdung verbunden ist. Wenn der FI nicht auslösen soll, muss der Mess-PC von der Erdung befreit werden (ich verwende eine Mehrfachsteckerleiste, die mit einer Schraube geöffnet werden kann und mit einer weiteren Schraube die Erdung unterbochen ist). Auch daran denken, dass ein PC sich die Erde über Peripherie holen kann, hab mal vergessen ein HDMI Kabel zum Beamer zu trennen, welcher per Schuko am Netz hängt und die Erde über den Schirm mitbringt...
Software-Oszilloskop
Es gibt wohl mehrere käufliche Lösungen am Markt, um einen vorhandenen Rechner als Oszi zu nutzen. Ich habe mich wieder für die no cost Variante entschieden, nutze eine vorhandene Soundkarte und dazu eine Oszi-Freeware namens "Visual Analyser" (Download siehe unten). Software herunterladen, installieren, selbsterklärend. Ein paar Einstellungen sind vorzunehmen, ich weise hier auf Nützliches hin und auf meine Arbeitsweise.
Hier legt man den zu nutzenden Soundkarten-Eingang und -Ausgang fest und liest die unterstützen Formate mit 'Detect standard' ein.
Kanalzahl 2, Bit depth soviel halt geht, Channel A und B aktivieren. Ich arbeite mit einer Samplingrate von 51200 S/s. Komischer Zahlenwert und so zu erklären: Meine Soundkarte 'frißt' beliebige Samplingrates, das müssen nicht die altbekannten 44.1k, 48k, 96k oder 192k sein. 51200 = 1024 * 50. 50 ist die Netzfrequenz hierzulande, 1024 eine 2er Potenz für die softwareseitige FFT (DFT wär für Echtzeit etwas langsam). So fängt man die 50Hz und alle Harmonischen schön ein und kann dann auch noch das smoothing window auf none setzen (sprich Rechteck).
Hier ändere ich nur den grafisch angezeigten Frequenzbereich, um die ersten 20 Harmonischen schön zu sehen (40 bis 1050 Hz).
Kalibrierung
Eine Soundkarte erkennt keine Spannungswerte (nur %fs), also muss die Spannungs- und Stromanzeige kalibriert werden. Dazu dient bei mir ein Multimeter. Die Netzspannung wird direkt gemessen und zur Kalibrierung herangezogen, die Stromanzeige wird durch die Zuführung eines 50Hz Signals definierten Pegels kalibriert (und über den Shunt-Wert umgerechnet). Die Oszi-Software bringt einen Signalgenerator mit, somit kann man ein 50Hz Signal über den Soundkarten-Ausgang ausgeben.
In meinem Fall hat dieses Signal einen Pegel von 400mV. Kann man direkt nutzen, oder man nutzt z.B. einen Audio-Verstärker, um einen höheren Pegel zu erzielen von z.B. 1V. Die Spannung mit einem Multimeter messen und durch den Shunt-Wert teilen.
Hier werden die entsprechenden Werte eingetragen. Ich stelle unten Volt und RMS ein, nutze den linken Kanal für Spannung und den rechten Kanal für Strom (meine Auswertungssoftware erwartet dies so). Die gemessenen Werte eintragen, 'Start measure signal L/R' und oben die Haken bei 'Apply calibartion' setzen. Ich nutze einen Eingangspegel von 50% softwareseitig, da ist die Verstärkung 1, also keine zusätzliche Verstärkung oder Abschwächung. 100% entspräche bei meiner Soundkarte einer 10fachen Spannungsverstärkung.
Hier screenshots von der Stromkalibrierung (schöner Sinus von der Soundkarte und vom Audio-Verstärker) und der Spannungskalibrierung (der unschöne Netzsinus heutzutage).
Messung
Messobjekt verbinden. Zu beachten: Die Soundkarten-Eingänge sind nicht wirklich 'robust'. Ich habe ein mal bei verbundenen Messleitungen ein Schaltnetzteil eingesteckt und es hat prompt den Eingang der Strommessung zerschossen. Dankenswerterweise hat mein Rechner noch einen weiteren Stereo-Eingang und es war somit zu verschmerzen, ein weiterer Fehlschlag bedeutet dann das Ende der Messungen mit diesem Mainboard ;) Man könnte über eine Schutzbeschaltung nachdenken... Also erst Messobjekt verbinden, dann die Messleitungen zur Soundkarte. Dann kann man mit dem Oszi rumspielen solange es beliebt und den Strom bewundern (Spannung ist doch immer wieder die gleiche und langweilig ;) ). Dann gilt es einen gewünschten Zeitbereich zu capturen, ich nehme gerne 10 Sekunden für eine gute Mittelung, dauert nicht lang und produziert noch keine Datenberge.
'Start capture scope', es folgt ein screenshot der aufgezeichneten Signale mit Möglichkeit zum speichern:
Ergebnis ist eine Textdatei mit 4 Spalten, zuerst die Zeit in ms, dann die Spannung, dann wieder die Zeit, dann der Strom. Jede Zeile also ein Spannungs- und ein Stromsample.
Der Power-Analyzer
Mein Werk in Gestalt einer Windows Anwendung, benutzt Windows Forms und .NET, geschrieben in C#. Per 'open' liest man seine txt-Datei von oben ein, es erfolgt die Kalkulation und Ausgabe einer Vielzahl von Werten.
Hier ein screenshot der Werte einer 60W Glühlampe:
Die linke Spalte zeigt die Spannungswerte, die mittllere Spalte die Stromwerte und die Rechte Spalte die Leistungswerte / Phasenwinkel usw.
Spannung/Strom von oben nach unten: Effektivwert, Spitzenwert, Spitze-Spitze-Wert, Gleichrichtwert, Crestfaktor, Formfaktor, Grundschwingungsgehalt, Klirrfaktor, THD, Frequenz (gemessen vom Spannungssignal).
Die rechte Spalte liefert: Wirkleistung, Scheinleistung, Verschiebungsblindleistung, Verzerrungsblindleistung, Gesamtblindleistung, Phasenverschiebung, cos phi, Leistungsfaktor und Quadrant.
Mancheiner interessiert sich vielleicht nur für einen einzigen Wert (P), ich hab halt mal alles mögliche Errechenbare umgesetzt, vielleicht ist es ja diesem oder jenen von Nutzen. Ich interessiere mich beispielsweise dafür, ob eine PFC vorhanden ist, wie gut diese ist, wie grottig der Leistungsfaktor mancher Geräte ist, wie stark die Oberschwingungen im Netz tageszeitlich schwanken usw.
Unter den 3 Spalten ist angeführt, welcher Zeitbereich erfasst wird (softwareseitig beginnt die Analyse bei einem positiven Nulldurchgang der Spannung und endet am Textfileende bei der letzten vollständigen Periode). Die Samplerate wird aus dem Datenstrom errechnet. Für Werte im Zeitbereich (bzw. alles was ohne Fourier auskommt) wird der eben angeführte Zeitbereich der Textdatei ausgewertet. Für den Frequenzbereich (bzw. alles mit Fouriertransformation) wird die erste vollständige Netzperiode ausgewertet und die zugehörige DFT-Größe angegeben. Warum DFT fragt man sich? Hier arbeiten wir nicht mit einer Echtzeitanwendung, also ist der Geschwindigkeitsvorteil der FFT verzichtbar. Eine Netzperiode ist auch bei hoher Samplingrate von einem modernen Rechner ratzfatz errechnet. FFT erfordert 2er Potenzen. Das hat zur Folge, dass man nur bestimmte Samplingraten vernünftig nehmen kann (ich weiß nicht, ob alle Soundkarten eine freie Wahl ermöglichen) bzw. man muss mit Windowing arbeiten. Mit der DFT kann man das umgehen, man braucht keine 2er Potenzen und kann eine Periode ohne Fensterung komplett reinschicken.
Unten wird neben dem open-button noch der Name des Textfiles angezeigt.
Mein tool ist auf das Datenformat ausgelegt, wie es der Visual Analyser per txt-Datei rausschickt. Ich setze vernünftige Daten voraus, ich hab in meiner Software keine große Mühe drauf verschwendet, alle möglichen exceptions abzufangen. Also nicht an der Textdatei rummanipulieren, außer zusammenhängende Zeilen oben oder unten zu löschen (quasi Zeitbereich verkleinern). Spannung linker Kanal und Strom rechter Kanal!
Hier noch weitere screenshots von ein paar Messungen, zuerst ein 3W LED-Leuchtmittel, dann ein 9V Kleintrafo im Leerlauf und dann der gleiche Trafo mit Nennstrom belastet.
Noch eine Anmerkung zu den geltenden Ziffern: diese sind hier rein subjektiv und willkürlich gewählt. Da jeder einen anderen Messaufbau hat, muss man selber wissen, wievielen Ziffern man traut. Ich hab mal so viele angegeben, wie eigentlich reichen sollten und dabei einen aber auch nicht unnötig erschlagen.
Die Genauigkeit ist softwareintern wohl ausreichend, alles in double Präzision.
Bitrate und Samplingrate sollten für gegebenen Zweck ausreichend sein.
Somit steht und fällt das ganze mit der Genauigkeit bei der Kalibrierung, also im einfachsten Fall mit der Spannungsgenauigkeit des verwendeten Multimeters und der Genauigkeit des shunts zur Strommessung.
Schlussbemerkungen
Ich selber nutze den Power-Analyzer primär für die Bestimmung der Wirkleistung aller 24h Verbraucher im Haushalt (Energieoptimierungen) und aus Interesse die Blindleistungsecke, also wie schauts mit PFC aus, wie gut ist diese, wird nur Verschiebung oder auch Verzerrung angegangen. Entstanden ist das Projekt aus Spaß am Programmieren, an der Messtechnik und dem privaten Nutzen. Man kann das Projekt bei Bedarf auch als 'work in progress' verstehen, wenn sinnvolle Vorschläge zur Software eintrudeln und ohne horrenden Aufwand umgesetzt werden können.
Downloads
Diskussionsthread
Diskussion zu diesem Projekt: https://www.mikrocontroller.net/topic/533591