Archiv verlassen und diese Seite im Standarddesign anzeigen : Projekt vorgestellt: Strommessung im Haushalt bis 30A mit Arduino
stfan1409
11.04.2017, 21:19
Hallo,
ich möchte hier kurz mein ("fertiges") Projekt vorstellen. Vielleicht kann der Ein oder Andere es nutzen.
Kurz gesagt möchte ich den Strom von Verbrauchern(bis 30A) im Haus messen und an einen PC senden.
Wichtig ist mir ein übersichtlicher und günstiger Aufbau(ca 5 Euro/Messung).
Der grobe Aufbau besteht aus einem Stromwandler(wird über das zu messende Kabel gesteckt und kann bis 30A messen), einem AD-Wandler und einem Arduino der über USB/virtueller Comport die Messergebnisse an den PC sendet.
Wer Interesse hat, kann nun die ausfühliche Beschreibung lesen:
Ich war auf der Suche, nach einer Wechselstrommessung, welche ich einfach an meine zukünftige Hausautomatisierung anschließen kann. Hintergrund der Messung ist es einen groben Überblick über die Stromaufteilung(großer Messbereich) im Haus zu haben und ein bisschen Komfort, wenn die Waschmaschine im Keller unter einen bestimmten Stromwert(kleiner Messbereich) geht, ist sie wohl fertig…
Hier meine Kriterien:
-günstige Hardware
-großer Messbereich
-hohe Genauigkeit
-wenig Hardware
-Arduino als Datensammler „vorerst“ für 10 Sensoren
-einfache Schnittstelle zur Hausautomatisierung(PC)
-mindestens einen umgerechneten Messwert pro Sekunde und pro Wandler(10 Sensoren=10 errechnete Werte / Sekunde)
Stromsensor:
Bei der Auswahl der Stromsensoren bin ich immer wieder bei Stromtrafos gelandet, da diese unschlagbar günstig und relativ genau sind. Ich verwende einen ZMCT118F mit einem Messbereich von 30A. 30A AC im Eingang entsprechen 30mA AC am Ausgang.
Um die Linearität und Genauigkeit zu testen, habe ich Halogenlampen (50-3000W) an einen Stelltrafo angeschlossen. Den Strom habe ich zum Vergleich mit einem „METRAHIT X-tra“ (kalibriert) gemessen.
Wandlung des Stromwandlers:
Begeistert von der Messgenauigkeit, habe ich mich an die AD Wandlung des Sensors gemacht. Da der auf dem Arduino verbaute AT-Mega „nur“ eine 10Bit Auflösung hat, habe ich nach externen AD-Wandlern gesucht. Auch hier ist es nicht ganz leicht günstige und vor allem schnelle Wandler zu finden. Schnell aus folgendem Grund: Die Sinusperiode hat bei 50Hz = 20mS. Damit ich bei Phasen an-/abschnitt noch sinnvoll messen kann, peile ich ca 400 Messungen / 20mS an. Das ergibt ca 20000 Messungen pro Sekunde.
An dieser Stelle vielen Dank an Bernhard, der mich noch rechtzeitig darauf aufmerksam gemacht hat, dass der Wandler, den ich zuerst im Auge hatte, nur 860 Messungen/Sek. schafft.
Ich habe mich für den AD Wandler MCP 3301 entschieden. Dieser hat eine 13Bit Auflösung bei einer Abtastrate von 100ksps und wird über SPI an den Arduino angeschlossen. Der AD-Wandler kann natürlich nicht direkt den Strom vom Wandler messen, sondern misst die Spannung, die über einen Messwiederstand abfällt. Bei dieser Auflösung ist es wichtig eine genaue Spannungsreferenz zu haben. Im Datenblatt vom MCP 3301 wird als Spannungsreferenz der MCP 1525 genutzt. Dieser bietet eine sehr genaue Spannung von 2,5V (näheres im Datenblatt). Aus diesem Grund ist es sehr wichtig, dass der Messwiederstand eine Genauigkeit von 0,1% hat.
Um den Wandler mit 30A auszunutzen, habe ich einen Messwiderstand von 56 Ohm eingesetzt, d.h. der Messbereich geht theoretisch von 10,9 mA bis 30000 mA. Wem die 10,9mA zu groß sind, kann als Messwidertand auch 100 Ohm nutzen. Dann ist der Messbereich von 6,1mA bis 16100 mA, was ja für die meisten Verbraucher ausreichend ist. Da die Werte der verbauten Messwiederstände im Programm angegeben werden müssen, kann der Messbereich so „beliebig“ angepasst werden. Natürlich muss es auch Sinn machen, denn die Genauigkeit hängt ja auch noch mit anderen Faktoren zusammen: Referenzspannung, Quarzgenauigkeit, 50,000000 Hz der Netzspannung…
Programm im Arduino:
Ich habe zwar schon einige AT-Mega programmiert, aber noch nicht mit der Arduinosoftware. Deshalb vielen, vielen Dank an Jürgen, der mir diese Arbeit abgenommen hat und den Code zur freien Verfügung stellt. DANKE!!!
Eine Beschreibung ist im Programm selber.
Ich nutze einen Ardino NANO, aber es geht auch mit diversen anderen. Das Programm ist auf 10 Sensoren ausgelegt und bei jedem Wandler wird 4 mal pro Sekunde je eine Periode gemessen und aus dem Messergebnissen der RMS Wert gebildet. Jede Sekunde sendet der Arduino über USB/ Virtueller Comport 10 Messwerte; also einen pro Wandler.
Um die Ausgabe „hübscher“ zu gestalten, wurde die Bibliothek „Streaming“ verwendet die in das Installationsverzeichnis kopiert werden muss.
Hinweise:
Die Leitung SCK und MISO führen immerhin 1 MHz Signale, da wirken sich parasitäre Kapazitäten sehr schädlich aus, also nach Möglichkeit kurze Leitungen verwenden. Und natürlich nicht mit Kondensatoren sparen – dicht an den ICs.
Zum Abschluss habe ich noch ein paar Vergleichsmessreihen aufgezeichnet. Generell kann man sagen dass die Abweichung zwischen dem geeichten Messgerät und „meiner“ günstigen Messung bis 500mA bei 1% liegt, zum Teil darunter. Ab 500mA liegt die Abweichung deutlich unter 1%. Bei kleinen Strömen wirkt sich eine Ungenauigkeit von einem Bit natürlich sehr viel höher aus, als bei großen Strömen.
Kosten:
Den Arduino Nano gibt es günstig auf bekannten Internetseiten
AD Wandler MCP 3301 liegt bei ca 3,50 Euro
Spannungsreferenz MCP 1525 ca 1 Euro
Messwiederstand ca 0,50 Euro
Stromsensor ZMCT118F im 10ner Pack incl. Versand bei 1$ pro Stück
Also kann man grob sagen, dass jede (weitere) Messung ca 5 Euro kostet
Nachbau:
Nur zur Sicherheit...
Der Nachbau ist natürlich auf eigene Gefahr. Da hier mit lebesgefährlicher Netzspannung gearbeitet wird, müssen alle einschlägigen Richtlinien, Bestimmungen... (VDE!!!) beachtet werden.
Also nur nachbauen, wenn man weiß, was man macht und darin auch Erfahrung hat...
Für Kritik, Verbesserungen, Vorschläge bin ich immer offen. Davon lebt ein Forum!
Viel Spaß,
Tobias
32542
newbee90
29.04.2017, 23:22
Super, genau sowas habe ich den ganzen Tag gesucht, ich hoffe das geht auch für Drehstrom. Dann werde ich mir mal die Teile bestellen.
stfan1409
22.08.2017, 16:07
Hallo,
hier noch eine Erweiterung zum Strommessung.
Alle 10 Messwerte werden nun über I2C an den Master gesendet.
Viel Spaß,
Tobias
32824
Hallo Stefan,
das ist ein netter Versuchsaufbau.
Möglicherweise hast du dir schon Gedanken zum fertigen Produkt - Anlage oder Gerät - gemacht und kannst etwas darüber berichten.
Besonders interessant finde ich die Frage, wie stark zentral gesteuert und wie dezentral bedienbar funktioniert der Haushalt dann. Kommt so eine Strommessung mit Hutschienenmontage in einen Schaltschrank im Einfamilienhaus (als Beispiel gemeint), oder in jede Etage, in jedes Zimmer eher nicht - oder?
Im Schaltschrank würde man eher die Sensoren mit fliegender Montage verwenden und nicht die printbaren. Man lässt dann die Stromleitungen dort, wo sie sind und führt die Signalleitungen zur Signalverarbeitung. Mit geeigneten Kabeln ist das ja kein Problem. Das scheint mir die übersichtlichere und besser erweiterbare Variante zu sein.
Spi und usb geht quer über den Schreibtisch sehr gut, aber die Bereichserweiterung ist da schon etwas eingeschränkt. In welche Richtung hast du diesbezüglich vor, zu entwickeln?
viel ERfolg und Spass beim Entwickeln,
stfan1409
22.08.2017, 18:35
Also generell geht es nicht darum jedes Zimmer zu messen, sondern die größeren Verbraucher.
z.B. Herd, Backofen, Kühlschrank, Spüler, Waschmaschine, Durchlauferhitzer...
Bei diesem Projekt geht es mir nur darum, relativ günstig einen großen Bereich mit hoher Genauigkeit zu messen. Ich könnte ja auch gute industrieelle Wandler kaufen, aber die liegen bei ca 300 Euro pro Messung. Das ist mir viel zu viel und deshalb diese Lösung. Zur Zeit messe ich direkt in der Verteilung. Die Wandler sind zwar für Printmontage, aber das selbe Modell mit Kabel liegt bei 10€ statt jetzt 1€. Geplant ist noch eine kleine Platine mit Stecker.
Bisher konnte ich keine Fehler/Unregelmäßigkeiten feststellen, obwohl die Messleitungen quer durch die Verteilung gehen.
Von USB bin ich auf I²C umgestiegen, da ich im Obergeschoß eine zusätzliche Verteilung habe. Da der PC im Keller steht, ist dann das USB Kabel zu lang. Ein Adapter von I²C auf Ethernet löst das Problem.
Gruß,
Tobias
Auch wenn die Darstellung des zu entwickelnden Endproduktes noch ein wenig unklar ist: Ethernet Übertragung vor zu sehen ist schon mal ein Schritt, der spätere Erweiterungen erleichtert.
weiter so,
newbee90
09.03.2018, 17:31
ich habe deine Schaltung mit 3 Wandler nachgebaut und sie funktioniert auch. Die Meßergebnisse sind auf allen Eingängen gleich, allerdings wird nie 0mA angezeit wenn keine Last vorhanden ist. Je nachdem welchen ADC ich anschließe, ich habe 6 Stück probiert, wird mir ein Strom von 12 bis 109mA in Leerlauf angezeigt. Bis 48mA Ruhestrom (ohne Last gemessen) sind die Messergebnisse (268mA) bei 60W gleich, liegt der Ruhestrom höher stimmt auch das Ergebenis nicht. Sind jetzt die Wandler zu billig oder woran kann das liegen.
- - - Aktualisiert - - -
Alles auf eine Platine aufgebaut
stfan1409
09.03.2018, 21:31
Das müsste man mal in Ruhe überlegen woran das liegt.
Aber wenn du einen Messbereich von 30A hast, entsprechen 109mA gerade mal 0,36%...
Wenn ich dich richtig verstehe, zeigen alle wandler bei der selben Last den gleichen Wert an? Nur ohne Last sind die Werte unterschiedlich?
newbee90
10.03.2018, 02:52
wenn die Anzeige ohne Last unter 50mA ist dann zeigen sie unter Last den selben Wert an, ist Anzeige ohne Last höher dann ist auch der Meßwert bei 270mA um 12mA höher. Ich habe 2000:1 Wandler und 100Ohm Shunt Widerstand aber nur 50 im Sketch angegeben, das entspricht doch dem 16A Bereich
White_Fox
10.03.2018, 13:19
Was mich mal interessieren würde: Wie sieht denn der Algorithmus aus, der die Meßwerte in einen Strom umrechnet? Immerhin mißt du ja Wechselstrom. Der auch noch mehr oder weniger Oberschwingungen hat...
newbee90
10.03.2018, 16:32
Ich habe ja schon eine unterschiedliche Anzeige, je nach Wandler, ohne daß Strom fließt, das Programm kann man ja runterladen
White_Fox
10.03.2018, 18:39
Ich weiß, ich habe aber keine Lust mich da jetzt durch den Arduino-Code zu quälen. Allzumal ich nicht bereit bin, mir dafür jetzt die Arduino-IDE zu installieren um das Projekt zu begutachten.
newbee90
10.03.2018, 18:41
das kannst du dir auch im Word anschauen, ohne was zu installieren, aber wenn du keine Lust hast wirds ja nicht so wichtig sein O:)
warum hast du einzele Wandler und nicht den 4fach MCP3304 genommen?
newbee90
15.03.2018, 00:05
Zeigen deine Wandler 0mA an?
newbee90
20.03.2018, 20:35
ich habe dein Programm umgeschrieben für den mcp3304 als Wandler und ein 4 zeiliges Display, Code und Schaltung folgen
Irgendwie weis ich nicht wie ich hier eine Datei einstellen kann, bei Interesse einfach anschreiben
Hallo newbee90.
freu mich schon auf dein Update, da ich was ähnliches vorhabe, allerdings das ganze per WLAN übertragen möchte, also statt dem Nano z.B. einen ESP32 verwenden möchte.
newbee90
06.04.2018, 20:55
So, ich glaube ich habe es fertig
https://github.com/newbee90/Strommessung-ADC-4fach
33406
xmirakulix
17.08.2018, 13:27
Hallo,
vielen Dank gleich vorweg an stfan1409 und newbee90, dass ihr eure Erkenntnisse und eure Arbeit so bereitwillig für andere zur Verfügung stellt!
Ich habe eine Frage zur Hardware-Auswahl:
Wieso verwendet ihr eigene ADC (MCP330x) für die Digitalisierung und nicht direkt die analogen Eingänge und ADC des Arduino Boards?
Geht es euch um extra-Genauigkeit?
Ich würde gerne eine größere Anzahl an Phasen messen und dafür direkt die 16 analogen Eingänge des Mega 2560 verwenden.
Seht ihr dabei ein Problem?
Vielen Dank schon jetzt für euren Input dazu!
newbee90
28.08.2018, 17:23
ich habe das zwar nicht entwickelt aber durch den Wandler wird das alles genauer, der Mega macht 10bit und der Wandler 13bit
@ stfan1409
Welche Nennspannungen haben die eingesetzten Elkos und Kondensatoren?
@ newbee90
Auf deinem Foto sind nur 4 Elkos und 4 Kondensatoren zu sehen. Müssten es gemäß stfan1409 Schaltplan je 6 Stück sein (je einer für den MCP1525 und je zwei für den MCP3304)?
Und lässt sich das ganze auch direkt auf einem ESP Chip umsetzen?
hardware.bas
07.10.2018, 13:09
Drehstrom geht, einfach 3 Sensoren auswerten. Um über den Strom die Energiekosten auszuwerden, muss der Verbraucher
jedoch ohmsches Verhalten haben oder kompensiert sein.
VG Micha
newbee90
16.10.2018, 17:30
@ TM4889
Überleg mal mit welcher Spannung die Schaltung funktioniert, dann kommst du auch auf die Spannung der Kondensatoren
mein Schaltplan ist ja auch anders als der von Stfan1409, denn ich habe nur einen 4fach Wandler und er hat 3 single Wandler verwendet
Hallo zusammen,
ich habe/ hatte mal ein recht ähnliches Projekt bei mir zu Hause vor. Bei mir war es ein wenig einfacher gestrickt, da ich einfach ein Sensorboard von der Firma controleverything genutzt hatte. Allerdings ist bei mir daraus nie so richtig etwas geworden da es bei mir im Haus nur sehr wenig Ohmsche Lasten gibt. LED Lampen, Trafos usw. Sprich die Werte waren immer falsch.
Ich bin an so einer Lösung aber immer noch recht stark interessiert. Daher wollte ich euch einmal meine Fragen/ Gedanken vorstellen. Bin da nämlich nur ein Amateur...
Einmal die Grundsätzliche Frage ob es diese Art von Sensoren gibt, die vielleicht auch gut mit Induktiven Lasten auskommen. Könnten das z. B. Hall Effect Sensoren? Alternativ wäre ja eine Möglich über die Phasenverschiebung (habe ich das richtig verstanden?) den richtigen Wert zu berechnen. Sprich die Schaltung müsste erweitert werden. Hättet ihr da Ideen was da zu tun wäre?
Was ich ja so richtig gut finden würde wäre so eine Art 12 Kanal Platine, die (natürlich in einem Gehäuse) direkt auf den Sicherungsschaltern im Verteiler angebracht werden kann. Sprich auf die Schalter aufsetzen, Kabel durch die Sensoren ziehen, glücklich sein. Da fehlt mir aber leider das passende wissen zu...
stfan1409
11.11.2018, 15:37
Hallo,
ich war lange nicht hier und habe auch keine Benachrichtigungen bekommen dass sich hier was tut...
Grundsätzlich zu den Wandlern: die können nicht nur ohmsche, sondern auch kappazitive und induktive Lasten messen. Man muss die nur richtig auswerten...
In der Zwischenzeit bin ich mehrfach gefragt worden aus der STROMESSUNG eine LEISTUNGSMESSUNG zu machen.
Der erste Versuch ist fertig und sieht so aus:
9x Strommessungen und 1x Spannungsmessung. Also vorerst die Leistungsmessung nur für alle Verbraucher einer Phase z.B. L1.
Funktionsbeschreibung SOFTWARE:
Ein µC misst 200-mal pro Periode Spannung und Strom, multipliziert beides und addiert diese Werte für eine Halbwelle auf. Anschließend wird die Summe durch die Anzahl der Messungen geteilt. Das Ganze passiert 4-mal, wird aufsummiert und durch 4 geteilt. Also ein Mittelwert über 4 Messungen. Anschließend wird das Ergebnis mit den Umrechnungs- und Korrekturfaktoren zum endgültigen Messwert umgerechnet und 1-mal pro Sekunde ausgegeben/angezeigt (I²C).
Funktionsbeschreibung HARDWARE:
Der Strom wird berührungslos über eine Spule gemessen, durch die das zu messende Stromkabel geführt wird. Da die Spule/der Wandler einen Strom ausgibt, wird noch ein Messwiderstand angeschlossen. Der Spannungsabfall wird mit dem Analog/Digitalwandler „MCP3301“ gemessen und an den µC weitergegeben. Der MCP1525 ist ein Spannungswandler, der eine Referenzspannung von 2,5V zur Verfügung stellt.
33755
Die 230VAC Spannung wird mit einem Trafo auf 6VAC transformiert und über einen Spannungsteiler mit dem Analog/Digitalwandler „MCP3301“ gemessen.
33756
Hier die Platine mit Arduino und 10 A/D-Wandlern
33758
Der aktuelle Stand ist, dass die Leistung ohmscher Verbraucher problemlos gemessen werden kann. Bei induktiven und kapazitiven Verbrauchern stimmen die Werte nicht.
Und genau hier benötige ich Unterstützung aus dem Forum. Vielleicht kann mir jemand sagen wo der Fehler ist, ODER wie ich den Fehler einkreisen kann. Ich bin der Meinung, dass das Messverfahren für alle Verbraucher richtig ist. Also muss hardwaremäßig ein Problem / Fehler vorliegen um induktive / kapazitive Lasten zu messen.
Eine Idee ist, dass durch den Trafo für die Spannungsmessung eine Phasenverschiebung entsteht. Nun wäre die Möglichkeit, diese Phasenverschiebung softwaremäßig zu korregieren.
Als Versuch habe ich mir mal alle Strom und Spannungswerte pro Halbwelle einzeln ausgeben lassen und in Excel kopiert. Eine Spalte Strom und eine Spalte Spannung. Nun habe ich die Stromwerte soweit verschoben, dass die errechnete Leistung passt. Leider kann ich nicht sagen, dass ich die Stromwerte IMMER um 5 Werte verschieben muss, damit die Leistung passt, sondern es sind auch mal z.B. 10. -> so kann ich keinen Korrekturfaktor festlegen.
Natürlich werden Strom und Spannung NICHT 100%ig gleichzeitig gemessen sondern erst der Strom und 30 uS später die Spannung. Das sollte aber nicht so ins Gewicht fallen, da bei 209 Messungen je Vollwelle nur alle 95,7uS gemessen wird.
Wenn ich Strom und Spannung auf dem Oszilloskop anzeige, stelle ich sogar bei der 60W Glühlampe eine Phasenverschiebung fest. In etwa 22° was einem CosPhi von 0,92 entspricht. Oszilloskop natürlich hinter der eben beschriebenen Hardware(Trafo, Stromwandler…)
33757
In der Messung sind 2 Spulen eingebaut(Trafo für Spannungsmessung und der Strommesswandler). Kann dadurch eine weitere Verschiebung stattfinden? Dann wäre es vielleicht möglich einen Korrekturfaktor einzurechnen…?
Auch wäre es eine Möglichkeit, dass durch Sättigungseffekte des Trafokerns der sinusförmige Verlauf (oder auch ein schon netzseitig etwas verformter Sinus) verfälscht auf die Sekundärseite abgebildet wird.
Das könnte man umgehen, wenn man den Trafo durch ein Kondensatornetzteil ersetzt - ist allerdings etwas aufwändiger, da einiges durch Optokoppler galvanisch getrennt werden muss...
Bitte Vorschläge um den Fehler einzugrenzen...
Hier noch der Schaltplan in eagle
33759
und natürlich das Programm für den Arduino:
33760
Gruß, stfan
Hallo,
genau das war/ ist auch mein Problem bei meiner Lösung gewesen. Bei der, von mir verwendeten Platine, war es noch etwas blöder. Die Werte wurden per I2C Bus zur Verfügung gestellt. Das heißt mehrere Messungen und Mittelwert wären viel zu langsam. Die von @stfan1409 genutzte Schaltung finde ich schon sehr gut. Aber auch hier schlägt das Thema verschiedene Lastarten wieder zu. Auch eine Verschiebung um z. B. 5 Werte wird nicht funktionieren. Ist ein Trafo oder ähnliches im Stromkreis gibt es eine Phasenverschiebung. Die ist bei jedem Trafo, soweit ich es verstehe, unterschiedlich. Sprich eigentlich müsste man bei der Messung direkt die Phasenverschiebung mit messen und dann den Wert korrigieren. Glaube ich... ;)
Vielleicht hat da noch jemand eine Idee?
stfan1409
17.11.2018, 13:33
Hallo,
genau das war/ ist auch mein Problem bei meiner Lösung gewesen. Bei der, von mir verwendeten Platine, war es noch etwas blöder.
...was hat die Platine damit zu tun?
Die Werte wurden per I2C Bus zur Verfügung gestellt. Das heißt mehrere Messungen und Mittelwert wären viel zu langsam.
In meinem Projekt wird alles gemessen und umgerechnet und erst der fertige Wert wird per I2C übergeben. Alles davor macht keinen Sinn...
Die von @stfan1409 genutzte Schaltung finde ich schon sehr gut. Aber auch hier schlägt das Thema verschiedene Lastarten wieder zu. Auch eine Verschiebung um z. B. 5 Werte wird nicht funktionieren. Ist ein Trafo oder ähnliches im Stromkreis gibt es eine Phasenverschiebung.
Warum sollte eine Verschiebung um xxx Werte nicht funktionieren? Phasenverschiebung heißt, dass Strom oder Spannung vor- oder nacheilt. Wenn man den Winkel weiß, kann man natürlich softwaremäßig die entsprechenden Werte verschieben.
Schöner wäre natürlich eine Lösung mit Kondensatornetzteil, um die Spannung zu messen. Aber zum testen ist der Aufwand relativ hoch(wegen der galvanischen Trennungen in verschiedenen Strompfaden). Oder lohnt der Aufwand bzw. kann es der Grund für die Fehlmessung sein?
...was hat die Platine damit zu tun?
nur das die halt so entwickelt worden ist. Sprich gekauft wurde. Daher gab es halt nur Zugriff auf Werte per I2C. Sprich häufigere Werte messen ging nicht und eine Phasenverschiebung war damit (ohne Anpassungen drum herum) eben nicht möglich. Also eigentlich nicht optimal für Sonderfälle.
In meinem Projekt wird alles gemessen und umgerechnet und erst der fertige Wert wird per I2C übergeben. Alles davor macht keinen Sinn...
Genau :)
Warum sollte eine Verschiebung um xxx Werte nicht funktionieren? Phasenverschiebung heißt, dass Strom oder Spannung vor- oder nacheilt. Wenn man den Winkel weiß, kann man natürlich softwaremäßig die entsprechenden Werte verschieben.
Das ist ja, wenn ich es richtig verstanden habe, abhängig von den, mal vereinfacht ausgedrückt, Spulen und Kondensatoren im gesamten Stromkreis. Sprich jeder Stromkreis hat ja eine andere Phasenverschiebung. Wenn man den weiß/ gemessen hat, kann man natürlich das ganze berechnen. Ich hatte es jetzt so von dir verstanden, dass du es auf einem Stromkreis messen wolltest und dann auf andere anwenden wolltest. Und da würde ich vermuten, dass dies nicht genau genug ist. Die Verschiebung wäre halt eine andere. Oder hatte ich da falsch verstanden?
Schöner wäre natürlich eine Lösung mit Kondensatornetzteil, um die Spannung zu messen. Aber zum testen ist der Aufwand relativ hoch(wegen der galvanischen Trennungen in verschiedenen Strompfaden). Oder lohnt der Aufwand bzw. kann es der Grund für die Fehlmessung sein?
Puh, gute Frage, da wäre es von mir aber auch nur eine Vermutung. Vielleicht kann jemand anderes helfen?
avr_racer
22.11.2018, 16:38
Funktionsbeschreibung SOFTWARE:
Ein µC misst 200-mal pro Periode Spannung und Strom, multipliziert beides
Falls du es so machen möchtest dann nimm zwei Wandler/µC die 100% zur selben Zeit die Daten aufnehmen sonst besteht auch folgende Möglichkeit:
Ohne die Mittelwertbildung der momentanen Leistung.
müsste man bei der Messung direkt die Phasenverschiebung mit messen und dann den Wert korrigieren. Glaube ich... https://www.roboternetz.de/phpBB2/images/smiles/icon_wink.gif
Dann brauch aber nix mehr korrigiert werden
S = U * I oder Wurzel aus (P² + Q²) ist QUASI die Gesamtleistung aber die setzt sich aus Wurzel aus (P² und Q²) zusammen
P = U * I * cosPHI
Q = U * I * sinPHI
Heißt wenn du die Leistung eines/meherer Verbaucher, der/die auch eine Phasenverschiebung mit sich bringt/en, messen möchtest musst du die Phasenverschiebung zwischen Strom und Spannung ermitteln.
Vorteil ist hier die ermittelst auch gleichzeitig den GESAMTWINKEL des COS-PHI sonst müsste man diesen durch eine weit aus kompliziertere Rechnung der EinezelFaktoren ermitteln....
Es würde auch cos PHI = P/S den Winkel ergeben aber man weiß ja nicht nicht welche echte Wirkleistung effektiv zum tragen kommt.
Also
1. Strom hat er was gleich der "QUASI-Gesamtstrom" ist aber vorher in Effektivwerte umrechnen Ie = Idach*0,707 oder Idach/1,41
2. Spannung hat er vorher auch in Effektivwerte umrechnen Ue = Udach*0,707 oder Udach/1,41
3. Nun muss als nächstes die Differenzzeit (Delta t) zwischen Spannung und Strom ermittelt werden wobei die Spannung dein Bezugspunkt ist.
3.1 Spannung = Nulldurchgang passiert ?
3.2 JA = Timer starten
3.2.1 Achtung WERTE betrachten
Spannungswert 0 und der Stromwert postitiv = induktive Last/en
weiter zu 3.3
Spannungswert 0 und der Stromwert negativ = kapazitive Last/en
weiter zu 3.3.1
3.3 Strom abtasten bis dieser den Nulldurchgang passiert = Timer STOPP Delta t Wert abspeichern
3.3.1 nur bei KAPAZITIVEN Lasten:
in der Zeitauswertung darauf zu achten das T=20ms minus Delta t zu rechnen ist was dann den Differenzzeit (Delta t_k) darstellt
4. mit DeltaPHI zu 360° = Delta t(_k) zu T umstellen und den Winkel berechnen
5. nun kann
S = U * I
P = U * I * cosPHI
Q = Wurzel aus (S² - P²)
berechnet werden
Natürlich werden Strom und Spannung NICHT 100%ig gleichzeitig gemessen sondern erst der Strom und 30 uS später die Spannung. Das sollte aber nicht so ins Gewicht fallen, da bei 209 Messungen je Vollwelle nur alle 95,7uS gemessen wird.
Und ob es ins Gewicht fällt wie wird denn wohl der Phasenwinkel sein wenn eine Größe weiter/zurück ist anstatt auf den bezogenen Zeitpunkt wo die Spannungs/Stromwerte ermittelt wurden??
209*95,7µs sind 0,0200013s also eine Abweichung von 13µs
stfan1409
23.11.2018, 16:48
sonst besteht auch folgende Möglichkeit:
Ohne die Mittelwertbildung der momentanen Leistung.
Kannst du mir das genauer erklären? Eigendlich interessiert ja nur die Wirkleistung. Aber wie komme ich da hin ohne den Mittelwert?
oder meinst du damit die Punkte 1 - 5?
1. Strom hat er was gleich der "QUASI-Gesamtstrom" ist aber vorher in Effektivwerte umrechnen Ie = Idach*0,707 oder Idach/1,41
denke nicht...Die Rechnung bezieht sich auf sinusförmige Ströme. Aber mit den ganzen Schaltnetzteilen ist der Strom nicht mehr sinusförmig... Also kann ich damit nicht rechnen.
avr_racer
23.11.2018, 19:56
Schon klar das nur die Wirkleistung interessiert von Prinzip her brauchst du nur ab Punkt 3 deine Software erweitern.
Dann kannst du auch den cos PHI mit P/S ermitteln
https://www.elv.de/elektronikwissen/messung-der-wirkleistung.html
https://www.elektronik-kompendium.de/sites/grd/0208071.htm
http://www.melitec.de/fileadmin/kundenbereich/PDFs/Wirk_Schein_Blindleistung032015.pdf
Problem ist das Strom und Spannnung trotzdem absolut exakt zum selben Zeipunkt gemessen werden müssen!!!!!!
Mal son Beispiel warum es so wichtig ist das obiges beherzigt wird.
U = 230V
I = 1A
cos Phi_1 = 1
cos Phi_2 = 0,999
P = U * I * cos Phi
P1 = 230V * 1A * 1 = 230W
P2 = 230V * 1A * 0,999 = 229,77W
Abweichung 0,23W, Worauf will ich hinaus ? Möchte nur verdeutlichen wenn du schon beim Phasenwinkel U/I schlampst und weitere Abweichungen Aufgrund der Software und Hardware sich zusätzlich auffaddieren kommt da schon eine beachtliche Abweichung herraus.
Zu 2tens denke schon!!!
Das die Rechnung für deine Zwecke mehr als hinreichend genau ist, denn wie soll der Elektrikermeister oder Ingeneuir die Leitungen berechen woraus dann Querschnitt, Sicherung/en usw abegeleitet wird wenn man nicht die Sinusförmigkeit zu Grunde legt ? Ich weiß das der Ing da deutlich bessere Unterstützung hat durch Simulationsprogramme zB. von Siemens oder anderen Herstellern..... Aber slebst Siemens berechnet dies auf der Ausgangsbasis SINUS.
Denn Gott sei Dank ist der "AKW-Trafo" und auch alle anderen im Netz, spannungshart und zwingen die Netzrückwirkungen eben auch zu einen gewissen Anteil dem Sinus zu folgen
http://www.reiter1.com/Drehstrom/Drehstrom_01.htm
Hier im Link mal ganz unten ist der Sinus zwar verzerrt aber was ist denn bzw welche Wellenform kommt die Abgebildete am nächsten ? Dreick/Rechteck/Micshcformen ?
http://ueba.elkonet.de/static/ueba/kundenauftraege/elkonet.de/home/ausbilder_bc/bc/Kernauftrag_02/fachliche%20grundlagen/fachtheorie/netzr_25c3_25bcckwirkungen.aspx.htm
PS: Dann nimm doch mal den Spannungsverlauf für mehrere Perioden auf, im EEprom ablegen und mal die Daten auf ein Stück Papier wieder geben. Bzw du hast es ja schon mit dem OSZI gemacht mit Zwischentrafo was bei 50Hz zu 99% den 230V/400V-Netz folgt weclhe Form ist es da ? Immer noch Sinus oder nicht ?
influencer
02.12.2018, 17:23
wäre es (softwareseitig) nicht einfacher nicht nach jeder messung rumzurechnen, sondern einfach waerend der messung nur zu vergleichen ob sich der anstieg der stromkurve ändert und so den maimalwert i^ zu bestimmen. ebenso v^ (was ja bereits vorgeschlagen wurde) und diese messwerte (samt dem zeitlichen offset zwischen spannungs- und strompeak) zu übertragen und die ganze umrechnung von dem machen zu lassen der die daten per I2C empfangt ?
der kann in der regel besser/schneller/genauer float rechnen.
wäre das soviel ungenauer als die momentane 'manuelle' integration ?
avr_racer
02.12.2018, 20:09
und diese messwerte (samt dem zeitlichen offset zwischen spannungs- und strompeak)
Welchen zeitlichen Offset meinst du ? Der Offset der ensteht weil zu unterschiedlichen Zeitpunkten I und U gemessen werden oder der Offset = Phasenverschiebung der real zwischen U und I besteht woraus dann Phi errechnet werden kann ?
Zum ersteren bleibt es falsch weil du nicht wirklich zurückrechnen kannst.
Die Genauigkeit hängt davon ab zum richtigen Zeitpunkt die richtigen Daten zu erfassen da hilft auch kein Mehr an Rechenleistung des Empfängers.
Bei 8 Mhz dauert ein Takt 125ns und wenn ich jetzt mal annehme das im Durchschnitt eine Befehl 2takte braucht, bei 1ms Abstastung, sind immerhin 4000 Befehle die ausgeführt werden können.
Die momentane 'manuelle' Intergration ist ja nicht verkehrt, wenn aber Strom und Spannung zu unterschiedlichen Zeitpunkten aufgenommen werden und daraus der Phasenwinkel berechnet wird ist die Rechnung rechnerisch richtig aber nicht zum Zeitpunkt der Datenerfassung!!
Am besten zu verstehen indem man mal 2 mal sich ein Digaramm erstellt, gerne mit Excel und es durchrechnet mal zu Fuß wieviel die Leistung sowie der Phasenwinkel bei nur 1mm Unterschied zum ersten Diagramm abweicht
White_Fox
03.12.2018, 11:47
@influencer:
Man muß da überhaupt nicht mit Floats herumoperieren, außer im letzten Schritt bei der Ausgabe. Bis dahin geht alles genausogut mit 8/16 Bit Integer. Wie soll es auch anders sein, du kannst die Daten nicht genauer rechnen als sie reinkommen. Wenn man sowieso schon einen Mikrocontroller in der Messkette drinhat ist eine Vorverarbeitung fast immer sinnvoller als eine monolithische Datenverarbeitung. Was man bei der Messung nicht berechnet geht sonst für den Kommunikationsaufwand drauf (da ist meist der Flaschenhals).
Die Punkte von avr_racer sind alle völlig richtig, wobei ich angesichts des ganzen Schaltnetzteilkrams heutzutage noch die Oberwellen (wenigstens die erste Handvoll) mit ins Rennen schicken will. Mit einer schnellen Fourieranalyse (das als Google-Stichwort, da gibt es garantiert selbst für Arduino schon fertige Bibliotheken). Die mathematischen Beschreibungen sehen für Nichteingeweihte oft erstmal gruselig aus, was man damit aber eigentlich macht ist relativ simpel.
@stfan: Im Übrigen vielen Dank für deine Beschreibung, genau das wollte ich in meinem Post vorher wissen.
stfan1409
03.12.2018, 17:50
Also "FFT" – Fast Fourier Transformation ist mit dem Arduino möglich und es gibt auch eine Library dafür, wie White_Fox schon richtig vermutet hat. Hier z.B. http://shelvin.de/eine-einfache-fft-fast-fourier-transformation-mit-dem-arduino-uno/
Aber ist es nicht sinnvoll, erst das Problem mit der Messung/Phasenverschiebung in den Griff zu bekommen? FFT würde doch mit dem Ergebniss weiterarbeiten, oder mach ich einen Denkfehler...?
Wie kann ich denn die Phasenverschiebung zwischen Strom und Spannung ermitteln?
avr_racer
03.12.2018, 18:32
Wie kann ich denn die Phasenverschiebung zwischen Strom und Spannung ermitteln?
Seite 3 erster Post von mir mal querlesen...
stfan1409
03.12.2018, 18:54
Seite 3 erster Post von mir mal querlesen...
danke, ich war zu sehr auf die Formeln (oben) fixiert...
3. Nun muss als nächstes die Differenzzeit (Delta t) zwischen Spannung und Strom ermittelt werden wobei die Spannung dein Bezugspunkt ist....
influencer
03.12.2018, 23:02
Hallo, ich nochmal.
eins voraus: ich bin neu hier und eher programmierer (asm/c/c++) denn hardwarebastler.
das projekt finde ich aber spannend und daher mal einen dank an alle die sich hier beteiligen/beteiligt haben.
ich habe am wochenende lange ueber dem problem gebruetet:
im kern bin ich auf der suche nach zwei verschiedenen loesungen fuer meine wohnung:
I) will ich zentral im sicherungskasten (weil man da gut an alles ran kommt / sich vor oder hinter die sicherungen schalten kann) die verbraeuche an allen sicherungen sekundengenau aufzeichnen.
II) haette ich gern die moeglichkeit mit moeglichst wenig aufwand an einzelnen steckdosen mit einem zwischenstecker die (wechselstrom-)verbraeuche aufzuzeichnen.
fuer II) denk ich mir inzwischen das es am einfachsten sein duerfte einen der gaengigen leistungsmesser (fuer die steckdose als zwischenstecker, in der regel mit display) zu 'hacken' und da einen bus (I2C/SPI/onewire/can/ethercat/ethernet) dranzubasteln und die vorhandene messtechnik zu 'missbrauchen'.
wenn die teile so 5-10eu und die busanbindung genauso teuer wird, klingt das noch finanzierbar.
fuer ideen dazu bin ich aufgeschlossen :)
aber wir reden ja hier eher von einer loesung fuer I), und dazu ein paar anmerkungen:
1) ja, ich wollte i^, u^ und den zeitlichen offset zwischen ihnen (also zwischen deren maxima, minima oder den flankengleichen null-durchgaengen) uebertragen.
da man zur leistungsberechnung dann mit wurzeln und mit irrationalen zahlen rechnen muss, fuerchte ich das ueberfordert die paar dutzend megahertz eines microcontrollers der seinen einen kern auchnoch zum messen und daten raushauen braucht.
2) das mit dem gleichzeitig messen habe ich verstanden und halte ich auch fuer wichtig. aber nichtmehr wenn man genau genug misst um ^-werte sicher zu finden und den (zeitlichen) offset zwischen strom und spannung damit auch.
abgesehen davon hat bei der aktuellen loesung das 'gleichzeitige' messen ein systemisches problem: ueber den SPI kann ich nur nacheinander werte abrufen (und damit messungen ausloesen), d.h. zwischen zwei messungen habe ich auf jeden fall den timeout von SPI und die antwortzeit des ADC.
als ich am wochenende ueber loesungen gegruebelt habe, habe ich folgendes verworfen:
raspi mit adc-shield (alle die ich gefunden habe, bezahlbar waren und genug kanaele geliefert haben, haben bei 12bit nurnoch dreistellige messwert-anzahlen/sekunde geliefert).
propeller fuer ca 8EU: https://elmicro.com/de/propeller.html
immerhin drei unanhaengige cpu's um 8kanaele mit hoher aufloesung abzutasten, aber dann brauchts immernoch passende flinke und genaue ADC's
die loesung die mir tragfaehiger erscheint:
beagle bone black (BBB) bei reichelt ab ca 60EU, sonst gerne auch mal 90:
das teil bringt 8 ADC mit vernuenftiger geschwindigkeit mit, aber vor allem:
neben den 8 cpu's fuer linux, das man auch mit realtime-patches aufm raspi nicht auf harte echtzeit kriegt:
https://www.elektronikpraxis.vogel.de/index.cfm?pid=7525&pk=630497&fk=1264876&type=article
bringt das teil noch zwei cpu's mit auf die man code laden kann, der in harter echtzeit (unabhaengig vom linux auf den anderen 8cores) auf die 8 ADC zugreifen und messwerte ueber shared memory miteinander und den linux-cpus teilen kann:
https://www.researchgate.net/publication/301376948_Using_PRUSS_for_Real-Time_Applications_on_Beaglebone_Black
was ich mir vorstelle:
mit 3 ADC die spannungen L1-L3 messen, mit den restlichen 5 ADC fuer 0.5s die stroeme fuer 5verbraucher (= 5sicherungen in meinem fall) und fuer nochmal 0.5s die stroeme fuer 5andere verbraucher (=die restlichen meiner 10sicherungen) messen.
weiss noch nicht ob man das umkonfigurieren kann (wo adc-pins liegen solle) und wie lange das dauert.
aber in den 0.5s kann ein dedizierter core sicher problemlos die 25perioden auf seinen 8 ADC hochaufgeloest erfassen.
mit dem zweiten dedzierten core wuerde ich dann im 0.5s rhytmus die messwerte der letzten 25perioden auswerten.
im ergebnis kommt dann die durchschnittlich integrierte leistung fuer eine periode/verbraucher, frequenz, u^, i^, t(u^), t(i^), 3x t(0) [=zeitpunkte der nulldurchgaenge] und meinetwegen noch die effektivwerte raus + vielleicht der durchschnitt der messwerte also eine durchschnittskurve.
das alles sollen die beiden dedzierten cpu's machen.
die 8 nicht-echtzeit-cpus koennen sich dann darum kuemmern die daten ueber eine der schnittstellen des BBB zur verfuegung zu stellen, oder, z.b. ueber hdmi die (rekonstruierten) wellenformen darstellen oder differenz der integrierten leistung zu der unter einer perfekten sinus mit den entsprechenden ^-werten.
vermutlich waeren da noch kondensatoren zum glaetten hochfrequenter stoerungen sinnvoll um die (digitale) auswertung des gemessenen analogen grauens zu vereinfachen bzw. robuster zu machen.
moeglich das ich das alles viel zu naiv angehe, aber wuerde mich ueber rueckmeldung/kritik/rat freuen.
werde aber wegen arbeitsstress erst um weihnachten rum dazu kommen mich wirklich handfest mit dem thema zu beschaeftigen.
- - - Aktualisiert - - -
ein naiver nachtrag noch:
aus der ausbildung erinnere ich mich das ein widerstandsnetzwerk an digitalen pins einen brauchbaren und beliebig schnellen adc ergeben.
gibts sowas fertig zu kaufen ? ist das zu ungenau ? mit einem digitalen mux sollte man so ja krass viel oder schnell adc-werte bekommen koennen..
influencer
04.12.2018, 22:51
https://github.com/google/prudaq/wiki
gibts schon..
White_Fox
06.12.2018, 09:07
aber wir reden ja hier eher von einer loesung fuer I), und dazu ein paar anmerkungen:
1) ja, ich wollte i^, u^ und den zeitlichen offset zwischen ihnen (also zwischen deren maxima, minima oder den flankengleichen null-durchgaengen) uebertragen.
da man zur leistungsberechnung dann mit wurzeln und mit irrationalen zahlen rechnen muss, fuerchte ich das ueberfordert die paar dutzend megahertz eines microcontrollers der seinen einen kern auchnoch zum messen und daten raushauen braucht.
2) das mit dem gleichzeitig messen habe ich verstanden und halte ich auch fuer wichtig. aber nichtmehr wenn man genau genug misst um ^-werte sicher zu finden und den (zeitlichen) offset zwischen strom und spannung damit auch.
abgesehen davon hat bei der aktuellen loesung das 'gleichzeitige' messen ein systemisches problem: ueber den SPI kann ich nur nacheinander werte abrufen (und damit messungen ausloesen), d.h. zwischen zwei messungen habe ich auf jeden fall den timeout von SPI und die antwortzeit des ADC.
Ein paar Kleinigkeiten:
Nur die Spitzenwerte zu messen bringt dir absolut nichts. Da versaut dir das Rauschen des AD-Wandlers und der Vorbeschaltung schon den Tag. Zweitens funktioniert das nur mit dem idealen Sonderfall "sinusförmige Größen". Die hast du zumindest beim Strom nicht, nichtmal annähernd.
Der zeitliche Versatz zwischen Messung und Berechnung ist kein Problem. Das Ergebnis ist dann halt etwas später da, aber immer noch richtig. Auch wenn da ein lahmer SPI-Bus dazwischen ist (aber auch mit SPI kann man einige MBit/s übertragen).
Was dir Ungenauigkeiten reinzieht ist, daß bestimmt nicht mehrere ADCs hast, sondern EINEN ADC mit allenfalls mehreren Kanälen. Du kannst auf acht Kanälen nicht acht Messungen auf einmal durchführen, da mußt du zwischendurch umschalten.
Ein paar STM32-Controller haben z.B. drei ADCs drin (die jeweils auch über mehrere Kanäle messen können), die kann man sogar synchronisieren. Sowas ist für solche Messungen gut geeignet, wobei ich den zeitlichen Versatz bei den üblichen Netzfrequenzen nicht allzu kritisch sehe. Das geht mit einem AVR noch.
stfan1409
06.12.2018, 18:09
..., wobei ich den zeitlichen Versatz bei den üblichen Netzfrequenzen nicht allzu kritisch sehe. Das geht mit einem AVR noch.
Ich habe mal eine Exceltabelle gemacht, um zu klären, in wie weit sich das zeitversetzte Messen bemerkbar macht.
Die Tabelle macht einen Sinus mit je 200 Einzelwerten. Genau wie bei dem Arduino wird Strom und Spannung multipliziert, addiert und durch die Anzahl der Messungen geteilt.
Ergebnis der Leistungsmessung:
Bei 230V und 100A und einer Phasenverschiebung von 100uS(zeitversetztes messen) entsteht ein Messfehler von 0,049%.
Die Phasenverschiebung durch den Verbraucher muss natürlich beachtet werden. Bei einer Leuchtstofflampe sind das immerhin schon 5mS.
bringt das teil noch zwei cpu's mit auf die man code laden kann, der in harter echtzeit (unabhaengig vom linux auf den anderen 8cores) auf die 8 ADC zugreifen und messwerte ueber shared memory miteinander und den linux-cpus teilen kann:
https://www.researchgate.net/publication/301376948_Using_PRUSS_for_Real-Time_Applications_on_Beaglebone_Black
über den Link komme ich zu einer PDF-Datei. suche ich nach adc ist die Rede von einem MCP3008, welcher nen adc auf 8 Kanäle muxt - genau wie White_Fox schon vermutet hat. Da ist nix mit gleichzeitig messen.
Ich habe mal eine Exceltabelle gemacht, um zu klären, in wie weit sich das zeitversetzte Messen bemerkbar macht.
Die Tabelle macht einen Sinus mit je 200 Einzelwerten. Genau wie bei dem Arduino wird Strom und Spannung multipliziert, addiert und durch die Anzahl der Messungen geteilt.
Ergebnis der Leistungsmessung:
Bei 230V und 100A und einer Phasenverschiebung von 100uS(zeitversetztes messen) entsteht ein Messfehler von 0,049%.
Die Phasenverschiebung durch den Verbraucher muss natürlich beachtet werden. Bei einer Leuchtstofflampe sind das immerhin schon 5mS.
Das verstehe ich nicht. Wenn man die möglichst gleichzeit gemessenen Strom und Spannungswerte multipliziert, ist die Phasenbeziehung unerheblich. Und nicht nur die Phase ist egal, auch die Funktion von Spannung und Strom. Der Strom könnte durch einen Verbraucher mit Phasenanschnitt bestimmt werden oder die Spannung ein PWM-Rechteck sein.
über den Link komme ich zu einer PDF-Datei. suche ich nach adc ist die Rede von einem MCP3008, welcher nen adc auf 8 Kanäle muxt - genau wie White_Fox schon vermutet hat. Da ist nix mit gleichzeitig messen.
Nun, es gibt schon Möglichkeiten, gleichzeitig zu messen. So haben manche ADCs mehrere Sample and Hold Stufen, die gleichzeitig geschaltet werden. So sind die Messwerte gleichzeitig aufgenommen worden, selbst wenn der ADC sie nacheinander produziert. Es gibt aber auch synchronisierbare ADCs. Die Frage ist, ist das nötig? Du bist oben von 100µs Versatz ausgegangen. Bei einem 100kHz Wandler ist ein Messzyklus 10µs. Und da muß auch der Eingangsmux und der Sample and Hold mithalten können. Wobei selbst Wandler mit 1 Megasamples direkt in einem µC nichts besonderes sind. Das führt dann zu Messzyklen von 1µs Länge.
MfG Klebwax
White_Fox
06.12.2018, 20:51
@Klebwax: Leider ist dem nicht so. Wenn du stur die Messwerte multiplizierst erhälst du nur die Scheinleistung. Und dann brauchst du davon trotzdem noch den Effektivwert um irgendwas sinnvolles anzeigen zu können.
Schau dir mal die Stromaufnahme einer Energiesparlampe an. Da ist nix mit Leistungsmessung ohne Signalverarbeitung:
https://www.elektroboerse-smarthouse.de/uploads/media_uploads/images/1392725675-178-fhdortmund-abb3.jpg
Nun, was ich auf dem Bild sehe ist gemessene Spannung, gemessener Strom und daraus berechnete Leistung. Das, was dort als Wirkleistung bezeichnet wird, kann eigentlich nicht gemessen sein Dazu ist der Wert zu konstant. Es kann eigentlich nur der Mittelwert, das Integral sein. So habe ich es oben beschrieben.
Bei anderen Lasten kann natürlich die Leistung zu bestimmten Zeiten auch negativ werden. Das muß beim Mitteln berücksichtigt werde. Die gezeigte Energiesparlampe hat sicher einen DC Zwischenkreis, da wird durch den Gleichrichter nichts zurückgespeist. Daher gibt es hier zu keinem Zeitpunkt negative Leistungswerte, keine "Blindleistung".
Also zeitscharf Strom und Spannung messen und Leistung über Zeit bekommen und zusätzlich integrieren bzw. mitteln um einen Messwert zu bekommen (der dann auf längere Sicht aber auch nicht konstant sein wird).
MfG Klebwax
avr_racer
07.12.2018, 15:43
Nun, was ich auf dem Bild sehe ist gemessene Spannung, gemessener Strom und daraus berechnete Leistung. Das, was dort als Wirkleistung bezeichnet wird, kann eigentlich nicht gemessen sein Dazu ist der Wert zu konstant. Es kann eigentlich nur der Mittelwert, das Integral sein. So habe ich es oben beschrieben.
Nö warum nicht ?? Effektive Wirkleistung. Effektiv bedeutet das diese Leistung dem des selben Verbrauchers an Gleichspannung entsprechen würde.
Für unsere 230V heißt das, wenn man eine ideale Batterie HÄTTE die eine Spannung von 230V liefern WÜRDE, könnte die gleiche Leistung umgesetzt werden z.B. Widerstand
Bekommt dieser +-325,318V Wechselspannung, 0,707 * 325,318V = 230V, angelegt entspräche dies der Gleichen Leistungsumsetzung an Gleichspannung mit 230V!!!
Denn irgendwie muss man Werte von Wechsel und Gleichgrößen vergleichen können. Oder nicht ?
Noch einfacher ausgedrückt 9V DC entsprechen 12,72V AC um die gleiche Leistung am gleichen Verbraucher umzusetzen.
Für das Bild muss hier noch die Zeit betrachtet werden in der der Verbraucher auch Wirkleistung umsetzt. Das sind hier ca. nur 3-4ms
Bei anderen Lasten kann natürlich die Leistung zu bestimmten Zeiten auch negativ werden. Das muß beim Mitteln berücksichtigt werde. Die gezeigte Energiesparlampe hat sicher einen DC Zwischenkreis, da wird durch den Gleichrichter nichts zurückgespeist. Daher gibt es hier zu keinem Zeitpunkt negative Leistungswerte, keine "Blindleistung".
Also zeitscharf Strom und Spannung messen und Leistung über Zeit bekommen und zusätzlich integrieren bzw. mitteln um einen Messwert zu bekommen (der dann auf längere Sicht aber auch nicht konstant sein wird).
MfG Klebwax
Wenn negative Leistung (Phasenverschiebeung vorhanden) entsteht ist dies = BLINDLEISTUNG. Sollte Strom und Spannung 90° geschoben sein hast reinste BLINDLEISTUNG vom alà feinsten, da am Verbaucher nix niente nada umgesetzt wird da die Blindleistung (negativer Leistungsanteil bei 90° Phi = 50%) dann 50% der Wirkleistung aufraucht!!!!! +50 -50 = 0 dabei spielst keine Rolle das ich die Quadratur und Wurzel weggelassen habe....
WIRKLEISTUNG = Leistung die NUR am Verbraucher Arbeit verrichten kann
BLINDLESITUNG = Leistung jene welche NUR bei Frequenzen entsteht und den Verbaucher hindert 100% der Wirkleistung in Arbeit umzusetzen
SCHEINLEISTUNG = Ergebnis aus geometrischer Summe von BLIND und WIRK
Keine Werbung aber echt top erklärt
https://www.sma.de/partner/expertenwissen/sma-verschiebt-die-phase.html
Für das Bild muss hier noch die Zeit betrachtet werden in der der Verbraucher auch Wirkleistung umsetzt. Das sind hier ca. nur 3-4ms
Genau. Die rote Kurve ist aber durchgehend, konstant und trägt die Bezeichnung Wirkleistung. Und das auch zu Zeiten, an denen gar kein Strom fließt. Daher schrieb ich, daß sie nicht direkt aus den Momentanwerten von Strom und Spannung ableitbar ist. Sie gibt aber den Wert an, den man wissen will, wenn es um den Verbrauch geht.
MfG Klebwax
White_Fox
07.12.2018, 20:51
Ja, die haben da den Effektivwert berechnet. Die Wirkleisungsaufnahme in Abängigkeit der Zeit darzustellen ist einerseits kompliziert, andererseits nicht allzu sinnvoll.
An der Stromkurve sieht man auch daß da kein einfacher Gleichrichter drin ist, das ist eine maximal billige Phasenanschnittssteuerung. Da zündet pro Halbwelle irgendwann einen Thyristor, so daß die Schaltung vom Zündzeitpunkt bis zum zum nächsten Nulldurchgang Strom aufnehmen kann. Je früher der Thyristor zündet, desto mehr kriegt die nachfolgende Schaltung von einer Halbwelle mit und kann mehr Leistung aufnehmen. Zündet der Thyristor später, nimmt die Schaltung weniger Leistung auf.
Wenn du dir die Stromkurve mal scharf anschaust kannst du das "ausgeschnittene Sinusstück" recht gut erkennen. Wenn du das Sinusstück in Gedanken mal vervollständigst siehst du auch, daß das Ding arg viel kapazitive Blindleistung aufnimmt. Ich schätze den cos φ so auf -0,7 oder so. Außerdem mancht das Teil widerlich viele Oberschwingungen. Es gab in der Vergangenheit einige Kabelbrände die man nicht aufklären konnte, es läßt sich aber eine Überlastung des Neutralleiters aufgrund von Oberschwingungen vermuten.
Ja, die haben da den Effektivwert berechnet. Die Wirkleisungsaufnahme in Abängigkeit der Zeit darzustellen ist einerseits kompliziert, andererseits nicht allzu sinnvoll.
Schwierig ist es nicht, einfach zu jedem Zeitpunkt Strom mal Spannung. Die blaue Kurve zeigt es.
An der Stromkurve sieht man auch daß da kein einfacher Gleichrichter drin ist, das ist eine maximal billige Phasenanschnittssteuerung. Da zündet pro Halbwelle irgendwann einen Thyristor, so daß die Schaltung vom Zündzeitpunkt bis zum zum nächsten Nulldurchgang Strom aufnehmen kann.
Für mich sieht das nach Gleichrichter und DC Zwischenkreis aus. Solange die Amplitude der Wechselspannung kleiner als diese Spannung ist, fließt kein Strom. Ab dann wird der Zwischenkreiskondensator aufgeladen. Wenn dann die Eingangsspannung wieder unter die Zwischenkreisspannung fällt, endet der Strom. Typisches Schaltnetzteil ohne PFC.
Ob man da sinnvoll von "cos φ " sprechen kann, würd ich bezweifeln. Mathematisch macht das eigentlich nur bei Sinuskurven Sinn und der Strom ist offensichtlich weit entfernt von einem Sinus. Crestfaktor ist denke ich der bessere Begriff.
MfG Klebwax
avr_racer
08.12.2018, 10:06
Schwierig ist es nicht, einfach zu jedem Zeitpunkt Strom mal Spannung. Die blaue Kurve zeigt es.
Das nennt sich SCHEINLESITUNG!
Für mich sieht das nach Gleichrichter und DC Zwischenkreis aus. Solange die Amplitude der Wechselspannung kleiner als diese Spannung ist, fließt kein Strom. Ab dann wird der Zwischenkreiskondensator aufgeladen. Wenn dann die Eingangsspannung wieder unter die Zwischenkreisspannung fällt, endet der Strom. Typisches Schaltnetzteil ohne PFC.
Nix mit Gleichrichter, wäre da einer enthalten würden die negativen Anteile positiv sein wie die erste Halbwelle. Es ist ein vollwertiger reiner Wechselstromverbraucher ansich, der einfach, wie White_Fox schon sagt, durch eine Phasenanschnittssteuerung gedimmt wird.
https://de.wikipedia.org/wiki/Gleichrichter
https://de.wikipedia.org/wiki/Phasenanschnittsteuerung
Ob man da sinnvoll von "cos φ " sprechen kann, würd ich bezweifeln. Mathematisch macht das eigentlich nur bei Sinuskurven Sinn und der Strom ist offensichtlich weit entfernt von einem Sinus. Crestfaktor ist denke ich der bessere Begriff.
MfG Klebwax
mmhhh ist doch von mir recht einfach beschrieben worden warum nutzt man einen englischen Begriff wenn man des Deutschen mächtig ist aber nicht diese auseinanderhalten kann.
ABER Scheitelfaktor und cos PHI beziehen sich auf unterschiedliche Beziehungen
Scheitelfaktor bezieht sich auf ein und die selbe Sinusart zB.:
Strom und Strom ODER
Spannung und Spanung ODER
Leistung und Leistung ODER ... ODER... ODER
Phasenverschiebung bezieht sich auf zwei UNTERSCHIEDLICHE physikalische GRÖßEN zueinander zB.:
Spannung und Strom oder
Strom und Leistung oder
Leistung und Spannung
https://de.wikipedia.org/wiki/Scheitelfaktor
Zum Bild dort ist eher keine Phasenverschiebung zu sehen da der Strom grundsätzlich in seiner Grundschwingung trotzdem in Phase ist aber nur zu einer gewissen Zeit in Phase zum fließen kommt!!!
Ich bitte dies zu verstehn sonst ist jegliche weitere Diskussion sinnlos oder man macht daraus eine Grundlagenerklärung!
influencer
08.12.2018, 11:34
hiho
mal wieder eine naive nachfrage:
betrifft das 'gleichzeitig messen' problem.
es ist doch anzunehmen das die spannung konstant bleibt, oder ?
wuerde es da nicht reichen die spannung einmal auszumessen, die frequenz mit dem takt des arduino abzugleichen um anschliessend aus der ermittelten kurve die zeitgleichen spannungswerte zu den gemessenen stromwerten 'vorherzusagen' statt zu versuchen die gleichzeitig zu messen ?
bzw. wie 'konstant' ist die netzspannung aus Eurer erfahrung ? wuerde es reichen die z.b. alle 1min neu nachzumessen ?
Das nennt sich SCHEINLESITUNG!
Und da die Blindleistung 0 ist, ist es auch die Wirkleistung.
Nix mit Gleichrichter, wäre da einer enthalten würden die negativen Anteile positiv sein wie die erste Halbwelle. Es ist ein vollwertiger reiner Wechselstromverbraucher ansich, der einfach, wie White_Fox schon sagt, durch eine Phasenanschnittssteuerung gedimmt wird.
https://de.wikipedia.org/wiki/Gleichrichter
https://de.wikipedia.org/wiki/Phasenanschnittsteuerung
Hier wird der Strom vor dem Gleichrichter gemessen, in deinem Link sind die Bilder hinter dem Gleichrichter gezeigt. Der geht natürlich nur in einer Richtung . Ein Brückengleichrichter macht aus jedem Verbraucher einen "vollwertiger reinen Wechselstromverbraucher".
Aber gut, bau mal eine Energiesparlampe auseinander und schau dir das darin verwendete elektronische Vorschaltgerät an.
Zum Bild dort ist eher keine Phasenverschiebung zu sehen da der Strom grundsätzlich in seiner Grundschwingung trotzdem in Phase ist aber nur zu einer gewissen Zeit in Phase zum fließen kommt!!!
Daher macht auch der Cosinus des Phasenwinkels PHI keinen wirklichen Sinn. PHI ist 0, der Cosinus also 1. Mit dem Phasenwinkel PHI zu rechnen macht nur Sinn, wenn der Strom auch ein Sinus ist. Und bezogen auf das ursprünliche Thema macht es auch keinnen Sinn, einen Phasenwinkel zwischen Strom und Spannung zu ermitteln, wenn man davon ausgehen muß, daß der Strom kein Sinus ist.
Also nochmal: Um die Leistung zu messen möglichst gleichzeitig Strom und Spannung bestimmen und multiplizieren. Da wird es positive Werte (Scheinleistung, damit das Wort mal vorkommt) und auch negative Werte (Blindleistung damit auch dieses Wort mal erwänt wird) geben. Integriere ich das auf, erhalte ich die Leistung (dir zuliebe Wirkleistung).
MfG Klebwax
White_Fox
08.12.2018, 13:56
Und da die Blindleistung 0 ist, ist es auch die Wirkleistung.
Sie ist aber eben nicht null. Die ESL nimmt Blindleistung != 0 auf.
Daher macht auch der Cosinus des Phasenwinkels PHI keinen wirklichen Sinn.
Verzeihung, der cos φ macht im oben verlinkten Bild tatsächlich wenig Sinn. Der cos φ bezieht sich per Definition auf die Grundwelle. Richtiger wäre der Leistungsfaktor λ, der auch die Oberschwingungsanteile (genau genommen: den cos φ der Oberschwingungen) mit einbezieht.
Mit Crest-Faktor hat das aber rein gar nichts zu tun.
Ein Brückengleichrichter macht aus jedem Verbraucher einen "vollwertiger reinen Wechselstromverbraucher".
Du meintest wahrscheinlich Wirkleistungsverbraucher. Und ich glaube, hier ist die Quelle deines Irrtums, denn ein Brückengleichrichter sorgt eben genau nicht dafür, das nur noch Wirkleistung konsumiert wird.
Denn: Hinter einem Brückengleichrichter hast du immer noch einen Wechselanteil drin. Würdest du diese Kurvenform in ihre Wechselanteile zerlegen (Fourieranalyse), würdest du einen Gleichanteil bekommen, die Wechselanteile sind aber eben nicht null, da sind immer noch welche da.
Wenn es so wäre wie du sagst, bräuchte man den Kondensator hinter dem Brückengleichrichter nicht mehr. Dieser filtert die Wechselanteile mehr oder weniger schlecht raus. Du kannst ja mal die Impedanz eines gegebenen Glättungskondensators für 50Hz, 100Hz, 150Hz, ... berechnen. Du wirst feststellen, daß der Kondensator die Wechelanteile kurzschließt-daraus resultiert eine Blindleistungsaufnahme. Gleichrichter hin oder her.
Also nochmal: Um die Leistung zu messen möglichst gleichzeitig Strom und Spannung bestimmen und multiplizieren. Da wird es positive Werte (Scheinleistung, damit das Wort mal vorkommt) und auch negative Werte (Blindleistung damit auch dieses Wort mal erwänt wird) geben. Integriere ich das auf, erhalte ich die Leistung (dir zuliebe Wirkleistung).
Schein-, Blind-, und Wirkleistung sind eindeutig definierte Begriffe. Mit unterschiedlichen Bedeutungen. Du mußt sie nicht verwenden um jemandem einen Gefallen zu tun.
Aber jedem, mit dem du dich darüber unterhälst, wirst du einen Gefallen tun indem du diese Begriffe passend zu ihrer Bedeutung verwendest.
White_Fox
08.12.2018, 20:20
Da hab ich dich doch ganz vergessen, influencer...
hiho
mal wieder eine naive nachfrage:
betrifft das 'gleichzeitig messen' problem.
es ist doch anzunehmen das die spannung konstant bleibt, oder ?
wuerde es da nicht reichen die spannung einmal auszumessen, die frequenz mit dem takt des arduino abzugleichen um anschliessend aus der ermittelten kurve die zeitgleichen spannungswerte zu den gemessenen stromwerten 'vorherzusagen' statt zu versuchen die gleichzeitig zu messen ?
bzw. wie 'konstant' ist die netzspannung aus Eurer erfahrung ? wuerde es reichen die z.b. alle 1min neu nachzumessen ?
Außer bei Sonderfällen (z.B. Sicherung schaltet ab) kannst du die Spannung als konstant annehmen. Die ist in Frequenz und Amplitude sehr konstant, alle 10min einmal messen würde mehr als ausreichen.
Zu dieser Idee hatte ich auch schon etwas geschrieben. Ich habe es dann allerdings wieder verworfen, weil du trotzdem noch eine zeitliche Referenz wie z.B. den Spannungsnulldurchgang brauchst. Anders bekommst du die Phasenverschiebung nicht. Und wenn du den AD-Wandler da raushalten willst brauchst du eine andere Form von "Startsignal". Z.B. einen Differenzverstärker, den du binär auswertest (auf Flankenwechsel triggern).
Sie ist aber eben nicht null. Die ESL nimmt Blindleistung != 0 auf.
Blindleistung ist physikalisch die Leistung, die ein Verbraucher an das Netz abgibt. Das erkennt man im Zeitdiagramm. Wenn Strom und Spannung die gleiche Polarität haben, das Produkt positiv ist, ist das die Scheinleistung. Haben Strom und Spannung unterschiedliche Polarität, das Produkt ist negativ, ist das Blindleistung. Betrachtet man das im Frequenzraum mit Amplitude und Phase dann muß man beide als Vektoren addieren. So ein Vektor von Amplitude und Phase macht natürlich nur dann Sinn, wenn das Signal mindestens eine Periode lang und periodisch ist.
Betrachtet man das zeitdiskret, so wie ein ADC das Signal abtastet, muß man multiplizieren und integrieren. Bei phasenverschobenen Sinussignalen kann man das leicht nachvollziehen. Da gibt es Zeiten, in denen Strom und Spannung unterschiedliche Vorzeichen haben. Ist der Strom aber nicht sinusförmig müsste man ihn, wenn man im Frequenzraum rechnen will, erst in seine Oberwellen aufteilen und diese einzeln berechnen. Das ist aber nicht nötig.
Mit Crest-Faktor hat das aber rein gar nichts zu tun.
Der Crest-Faktor geht genau dieses Problem (mit den Oberwellen) an. Bei einem Sinus ist das Verhältniss von Spitzenwert und Fläche unter der Sinuskurve (der Effektivwert) bekannt. Bei anderen Signalen, wie dem Strom im Bild oben, gilt dieser Wert nicht. Der Crestfaktor ersetzt das 1/2 * Wurzel 2, damit man wieder mit den bekannten Formeln rechnen kann.
Du meintest wahrscheinlich Wirkleistungsverbraucher. Und ich glaube, hier ist die Quelle deines Irrtums, denn ein Brückengleichrichter sorgt eben genau nicht dafür, das nur noch Wirkleistung konsumiert wird.
Denn: Hinter einem Brückengleichrichter hast du immer noch einen Wechselanteil drin. Würdest du diese Kurvenform in ihre Wechselanteile zerlegen (Fourieranalyse), würdest du einen Gleichanteil bekommen, die Wechselanteile sind aber eben nicht null, da sind immer noch welche da. Wenn es so wäre wie du sagst, bräuchte man den Kondensator hinter dem Brückengleichrichter nicht mehr.
Braucht man eigentlich auch nicht. Das EVG braucht eine Gleichspannung mit einer Mindestgroße, daher der Kondensator. Ein elektronischer Hallogentrafo hat keinen, da sieht man die 100Hz nach dem Gleichrichter am Ausgang. Bei vielen Induktionsherden ist das genauso. Trotzdem gibt es keinen Blindstrom, Strom und Spannung im Wechselstromkreis haben immer das gleiche Vorzeichen.
Schein-, Blind-, und Wirkleistung sind eindeutig definierte Begriffe. Mit unterschiedlichen Bedeutungen. Du mußt sie nicht verwenden um jemandem einen Gefallen zu tun.
Aber jedem, mit dem du dich darüber unterhälst, wirst du einen Gefallen tun indem du diese Begriffe passend zu ihrer Bedeutung verwendest.
Vollkommen richtig. Ich habe diese Begriffe zuerst auch bewusst nicht gebraucht, da sie bei zeitdiskreter Betrachtung der Leistung in einem Wechselstromkreis keine wirkliche Bedeutung haben. AD Wandler arbeiten aber nun mal so, und um die Leistung über der Zeit zu bestimmen, benötigt man sie nicht. Dafür ist man bei der zeitdiskreten Messung wesentlich flexibler. So wie der Strom im Bild oben eine beliebige Kurvenform haben kann, könnte die Spannung auch ein Rechteck, eine PWM sein. Und wenn man da bei einer induktiven Last den Abschaltstrom nicht in Freilaufdiode und Spulenwiderstand in Wärme umsetzt, sondern sie zurückspeist hätte man so etwas wie Schein- und Blindleistung auch dort.
MfG Klebwax
White_Fox
08.12.2018, 21:44
Blindleistung ist physikalisch die Leistung, die ein Verbraucher an das Netz abgibt.
Nein, das ist keine Blindleistung. Blindleistung ist eine physikalische Notwendigkeit zum Aufbau der elektromagnetischen Felder, Blindleistung transportiert aber keine verwertbare Energie. Blindleistung pendelt zwischen Quelle und Senke hin und her (und die Leitungen müssen diese daher auch transportieren können), aber es ist nichts was irgendwo in andere Energieformen überführt werden kann.
Wenn ein Verbraucher Leistung an das Netz abgibt (DAS passiert, wenn Strom und Spannung unterschiedliche Vorzeichen haben) ist er kein Verbraucher mehr, sondern ein Einspeiser. Wenn du einen Asynchronmotor am Netz anschließt nimmt der ausschließlich Blindleistung auf, aber keine Wirkleistung (Verluste vernachlässigt). Wenn du den Motor belastest nimmt der Motor zusätzlich Wirkleistung auf. Wenn du den Motor so schnell drehst daß der Rotor dem Statorfeld vorrauseilt erzeugst du "negative Wirkleistung" (Leistungsabgabe an Stelle von Leistungsaufnahme), da eine Lastflußumkehr (Motor arbeitet als Generator) stattfindet.
Und die Leistungsbegriffe behalten ihre Bedeutung sehr wohl bei, AD-Wandler hin oder her. Glaubst du denn, den ganzen Fourier-Zauber macht man zum Spaß? Nene, das hat schon alles seinen Sinn.
Ich hab eigentlich alles gesagt, was ich zu sagen habe. Das ich nicht ganz falsch liege, zeigt dieses Zitat aus dem Datenblatt des ADE7953, gemacht für Stromzähler
The real power calculation is derived from the instantaneous power signal. The instantaneous power signal is generated by a direct multiplication of the current and voltage signals. In order to extract the real power component (i.e., the dc component), the instantaneous power signal is low-pass filtered. Figure 2 illustrates the instantaneous real power signal and shows how the real power information can be extracted by low-pass filtering the instantaneous power signal. This scheme correctly calculates real power for nonsinusoidal current and voltage waveforms at all power factors. All signal processing is carried out in the digital domain for superior stability over temperature and time.
(Hervorhebungen von mir)
MfG Klebwax
White_Fox
09.12.2018, 19:04
Ich hab mir das Datenblatt des Bausteins mal kurz überflogen-das ist absolut keine gute Quelle. Aber wie gesagt, ich hab es nur kurz überflogen.
https://www.analog.com/media/en/technical-documentation/data-sheets/ADE7953.pdf
Da gibt es zwei Kapitel-eins über die Berechnung der Wirkleistung (die nennen das 'real power') und eins über die Berechnung der Blindleistung (reactive power). Wenn man nur das Kapitel über die Wirkleistungsberechnung kennt könnte man tatsächlich auf die von dir vorgetragenen Erläuterungen kommen. Wenn man dann aber das Kapitel über die Blindleistung liest (und auch noch weiß was da passiert) merkt man, daß die Erklärungen zwar nicht direkt falsch, aber sehr knapp und unvollständig sind. Wer sein Wissen nur aus diesem Datenblatt bezieht kommt da nicht weit.
Etwas Besseres ist hier (eigentlich DIE Referenz für derlei E-Technikgrundlagen im deutschprachigen Bereich):
https://www.buecher.de/shop/leistungselektronik/elektrotechnik-fuer-ingenieure-2-ebook-pdf/weissgerber-wilfried/products_products/detail/prod_id/44133491/
Öffentlich zu lesen hab ich nur hier was gefunden:
https://books.google.de/books?id=0JXNBgAAQBAJ&printsec=frontcover&hl=de&source=gbs_ge_summary_r&cad=0#v=onepage&q&f=false
Aber vielleicht helfen dir die Übungsaufgaben und deren Lösungen hinten etwas weiter.
Allerdings scheint mir langsam auch der Grund dafür klar zu werden, warum diese "Smart Meter" (Ha ha) derartig problematisches Verhalten zeigen:
https://www.golem.de/news/umstrittene-studie-warum-manche-stromzaehler-extrem-falsch-messen-1703-126656.html
https://www.golem.de/news/elektronische-stromzaehler-landis-gyr-haelt-messverfahren-fuer-absolut-zuverlaessig-1703-126694.html
https://www.heise.de/newsticker/meldung/Smart-Meter-messen-oft-falsch-3644942.html
Auch wenn die Kausalität in den Artikeln nahegelegt wird-mit den Rogowski-Spulen an sich hat das sicher nichts zu tun.
stfan1409
09.12.2018, 19:47
...
Also bitte für mich (und meine Messung) zur Erklärung:
Bekomme ich die Wirkleistung, wenn ich die Spannungen und Ströme Multiplizieren, aufaddiere, durch die Anzahl der Messungen teile und hinterher mit dem Cos Phi multipliziere?
(Ich würde das Programm nächste Woche dahin mal ändern)
Ihr habt mich da wirklich verunsichert...
White_Fox
09.12.2018, 20:49
Ja, unter der Voraussetzung daß du es nur mit sinusoidalen Spannungen und Strömen zu tun hast.
Und diese Vorraussetzung ist im praktischen Netz eben nicht mehr gegeben.
avr_racer
09.12.2018, 21:09
...
Also bitte für mich (und meine Messung) zur Erklärung:
Bekomme ich die Wirkleistung, wenn ich die Spannungen und Ströme Multiplizieren, aufaddiere, durch die Anzahl der Messungen teile und hinterher mit dem Cos Phi multipliziere?
(Ich würde das Programm nächste Woche dahin mal ändern)
Ihr habt mich da wirklich verunsichert...
Ja nur für deine Scheinleistung ist dies auch so i.O. ohne den Cos PHI, nur musst du halt die Werte von Strom/Spannung zur selben Zeit aufnehmen!!! Ausser du rechnest mit Effektivwerten da ist es dann egal zu welcher Zeit du die Signale erfasst,
heißt du tastest solange Strom und Spannung nach deren höhsten Scheitelwert ab und rechnest sie in Effektivwerte um. Das Abtasten der Scheitelwerte kann dann aber wiederum einzelnd erfolgen
Der aktuelle Stand ist, dass die Leistung ohmscher Verbraucher problemlos gemessen werden kann. Bei induktiven und kapazitiven Verbrauchern stimmen die Werte nicht.
Und genau hier benötige ich Unterstützung aus dem Forum. Vielleicht kann mir jemand sagen wo der Fehler ist, ODER wie ich den Fehler einkreisen kann. Ich bin der Meinung, dass das Messverfahren für alle Verbraucher richtig ist. Also muss hardwaremäßig ein Problem / Fehler vorliegen um induktive / kapazitive Lasten zu messen.
Nun zu dem eigentlichen warum für kap/ind-Werte deine Anzeigen nicht stimmen weil du den cos Phi nicht ermittelst hast. Ohne diesen kannst du nicht auf die Wirk/Blind/Scheinleistung zurückrechnen. Siehe ein paar Seiten zuvor...
Heißt dein Spannungs und Stromsignal muss so stark verstärkt werden das sie zum Rechtecksignal(OPV Komperator) werden was dann die Auswertung mit einem Timer recht einfach macht. Das Spannungssignal wird mit jedem Flankenwechsel auch gleichzeitig dein Nulldurchgang signalisieren so das der Timer gestartet werden kann und mit dem Flankenwechsel vom Stromsignal wieder gestoppt wird. Diese Zeitdifferenz braucht nur noch in ein Winkel umgerechnet werden...
Ein Hinweis zu dem was Seite 3 22.11.2018, 16:38
Bezieht sich auf Effektivwerte von Strom und Spannung die bekanntlich aus den Scheitelwerten berechnet werden können
S = U * I oder Wurzel aus (P² + Q²) ist QUASI die Gesamtleistung aber die setzt sich aus Wurzel aus (P² und Q²) zusammen
P = U * I * cosPHI
Q = U * I * sinPHI
Für den Haushalt geht man erstmal von sinusförmigen Strömen aus. Für Industrie/Firmen treibt man es unter Umständen mit Kompensationsanlagen soweit das man dem Sinus sehr nah kommt...
stfan1409
09.12.2018, 21:09
Nun zu dem eigentlichen warum für kap/ind-Werte deine Anzeigen nicht stimmen weil du den cos Phi nicht ermittelst hast. Ohne diesen kannst du nicht auf die Blind/Scheinleistung zurückrechnen.
Aber ich möchte doch gar nicht auf die Blind/Scheinleistung zurückrechnen - es geht mir nur um die Wirkleistung (die ich bei meinem Versorger ja auch bezahlen muss).
d.h. heißt, nur für die Anzeige der Wirkleistung müsste es ohne Cos Phi Ermittlung klappen, aber ich habe falsche Werte bei kap/ind-Werten...?
avr_racer
09.12.2018, 21:19
d.h. Phasenan- / abschnittsteuerungen mit Induktivitäten und Kapazitäten wären in einem sauberen Netz ok, aber Schaltnetzteile sind nicht richtig messbar?
Messbar ist alles nur die Frage des Aufwand, welcher betrieben wird, stellt sich dann. Zusätzlich in welcher Genauigkeit. Haben letztes Jahr mal mit den berühungslosen Messgeräten getestet da spielt es zB ein Rolle wie sehr sich das Kabel im Zentrum der Spule befindet... Das gab auch schon paar Abweichungen aber zum einschätzen hat es allemal gereicht....
stfan1409
09.12.2018, 21:23
d.h. meine Messung ist richtig und die Anzeigedifferenzen sind Messtoleranzen? - Kann ich mir nicht vorstellen, da z.T. Unterschiede von 300% waren...
avr_racer
09.12.2018, 22:03
Aber ich möchte doch gar nicht auf die Blind/Scheinleistung zurückrechnen - es geht mir nur um die Wirkleistung (die ich bei meinem Versorger ja auch bezahlen muss).
d.h. heißt, nur für die Anzeige der Wirkleistung müsste es ohne Cos Phi Ermittlung klappen, aber ich habe falsche Werte bei kap/ind-Werten...?
gut gut jetzt sehe ich meinen Fehler .... bei ind/kap Verbrauchern..... nicht die Schein/Blindleistung selbst ermitteln. Ähm jaaaaaarrrr zu weit gedacht *kopfkratz*
Spielt soweit aber keine Rolle
die in Phase liegen ok:
Schein = Wirk = Blindleistung cos Phi entfällt
Nicht in Phase liegend
Schein != Wirk != Blindleistung cos Phi muss ermittelt und berücksichtigt werden bei kap/ind Lasten
d.h. meine Messung ist richtig und die Anzeigedifferenzen sind Messtoleranzen? - Kann ich mir nicht vorstellen, da z.T. Unterschiede von 300% waren...
Zum Teil Messtoleranzen zum Teil noch ein nicht richtiges Verstehen dieser Lesitungsarten+Anhang aber du bist nicht weit weg es richtig zu begreifen.
Hätte da mal eine Hausaufgabe...
1. Wäre es möglich mal über mehrere Perioden im Abstand von 1ms den Strom aufzunehmen unter Angabe des Verbauchers und diese Daten mal einzustellen ?
influencer
10.12.2018, 00:35
Zu dieser Idee hatte ich auch schon etwas geschrieben. Ich habe es dann allerdings wieder verworfen, weil du trotzdem noch eine zeitliche Referenz wie z.B. den Spannungsnulldurchgang brauchst. Anders bekommst du die Phasenverschiebung nicht.
auf 'zeitliche referenz' bezog sich das 'mit dem takt des arduino abzugleichen', was es dafuer braucht (wovon ich eine keine ahnung habe!) eine hochaufloesende clock auf dem arduino, z.b. sowas wie clock-counter (clocks since running).
dann koennte man (nach ermittlung der 0-durchgaenge) eine spannungskurve im ram konstruieren die mir zu jedem clock-zeitpunkt die spannung vorhersagt die da jetzt gemessen wuerde (wenn sich die spannung seit ermittlung der kurve nicht geaendert hat).
wenn man jetzt einen strom misst und dazu den dann gueltigen clock-count mitspeichert, kann man aus der spannungsvorhersage (aufgrund der periodizitaet) die zu diesem clockcount (modulo clockcounts/periode) vorhandene spannung raten und haette dann spannung und strom zum exakt gleichen zeitpunkt (so 'gleich' wie in den grenzen der clock und der abtastrate der spannung mgl).
die spannung sollte man wohl immernoch periodisch vor/nach den stroemen mitmessen. und sobald der gemessene wert zu sehr vom erwarteten (aus der aufgezeichneten kurve von davor) abweicht, muesste spannung neu vermessen / vorhersagekurve neu bestimmt werden.
White_Fox
10.12.2018, 13:37
Das kann man theoretisch machen.
Praktisch würde ich aber eher schätzen, daß du dir damit größere Fehler in die Messung ziehst als wenn du einfach Strom und Spannung parallel mißt. Wie ich vorher schon schrieb-der Fehler, den du bei 50Hz machst, kannst du vernachlässigen.
Das kann man theoretisch machen.
Praktisch würde ich aber eher schätzen, daß du dir damit größere Fehler in die Messung ziehst als wenn du einfach Strom und Spannung parallel mißt. Wie ich vorher schon schrieb-der Fehler, den du bei 50Hz machst, kannst du vernachlässigen.
Das sehe ich auch so. Wenn aber entweder der Trafo zur Spannungsmessung oder der Stromtrafo die Phase schiebt, muß man das korrigieren. Oben ist beschrieben, daß bei einer ohmschen Last (Glühbirne) auf dem Scope eine Phasenverschiebung von ca. 22° zu sehen ist. Dies ist sicher nicht real, das kann nur aus der Messschaltung kommen. Das korrigiert man, indem man Strom und Spannung ca. 1,2ms nacheinander misst.
MfG Klebwax
stfan1409
10.12.2018, 15:57
Ich habe 3 Verbraucher zum testen:
1. eine alte Glühlampe mit der Aufschrift 60W
2. eine alte Leuchtstofflampe 36W mit konventionellem Vorschaltgerät und Starter
3. meine Waschmaschine(mit "Frequenzumrichter")
Die Glühlampe habe ich zum Vergleich mit dem Oszi gemessen; natürlich gleiche Messwandler wie in der Arduinomessung, d.h. Spannungsmessung mit Trafo und Strommessung mit Stromwandler.
Dann habe ich die Werte für je 20mS in Excel exportiert.
33843
Sehr schöne Daten.
Ich hab da mal rein geschaut. Die Spannung geht so bei Messung 78 durch Null, der Strom bei Messung 92. Die Physik verlangt aber bei einer ohmschen Last (Glühbirne), daß das gleichzeitig passiert. Ich würde das so korrigieren: der Spannungswert der Messung 78 wird mit dem Stromwert der Messung 92 multipliziert, der von 79 mit 93 usw. Damit wird der Phasenfehler, den die Messaufnehmer haben, ausgeglichen. In der Praxis braucht man einen Buffer von 14 Messwerten um die Verzögerung live mitzurechnen.
MfG Klebwax
P.S. Was mir noch einfällt, der Stromtrafo braucht einen Bürdewiderstand. Und dem Spannungstrafo würd ich auch einen Lastwiderstand spendieren, der ein paar Milliampere fließen läßt.
stfan1409
10.12.2018, 17:20
Also ich finde die Kurven nicht so schön sinusförmig, besonders die Spannungskurve....
Die Werte kann man ja problemlos verschieben, aber die errechnete Leistung stimmt nur bei der Glühlampe. Bei Leuchtstofflampe und Waschmaschine nicht. Durch verschieben von Strom und Spannung in Excel gehts, aber ich muss bei der Leuchtstofflampe anders verschieben, als bei der Waschmaschine....?
Ps. die beiden Widerstände sind vorhanden.
Also ich finde die Kurven nicht so schön sinusförmig, besonders die Spannungskurve....
Das wundert mich nicht wirklich. Die meissten Verbraucher im Haushalt sind heutzutage nicht mehr rein ohmisch. Schaltnetzteile, elektronische Vorschaltgeräte, eigentlich alle Netzteile mit Gleichspannungszwischenkreis ziehen Strom nur im Spannungsmaximum. Das flacht die Spannung in der Spitze ab. Alle Phasenanschnittsteuerungen ziehen keinen Strom am Anfang einer Halbwelle, da ist dann die Spannung höher. Ob das die wirkliche Erlärung ist, weiß ich aber nicht.
Bei den 36W der Leuchtstoffröhre hätte ich eher ein Problem. Das wird, genauso wie deren Helligkeit, von der Temperatur im inneren der Röhre abhängen. Und bei einem Frequenzumrichter hätte ich noch größere Probleme mit der Leistungsangabe.
Kannst du mal die Kurven von den beiden zeigen?
MfG Klebwax
avr_racer
10.12.2018, 19:11
Das sehe ich auch so. Wenn aber entweder der Trafo zur Spannungsmessung oder der Stromtrafo die Phase schiebt, muß man das korrigieren. Oben ist beschrieben, daß bei einer ohmschen Last (Glühbirne) auf dem Scope eine Phasenverschiebung von ca. 22° zu sehen ist. Dies ist sicher nicht real, das kann nur aus der Messschaltung kommen. Das korrigiert man, indem man Strom und Spannung ca. 1,2ms nacheinander misst.
MfG Klebwax
Habe mir nochmal die Auszüge der Stromlaufpläne angeschaut + Datenblatt ZMCT118F schwierig da verlässliche Infos zu finden...
http://www.zeming-e.com/English/prodviewtype5-290.html echt mau das Datenblatt zu mal hier bei 5A pri. ein Winkel von <=15° bei 50Ohm der Alpha-Variante und <=60° der Beta-Variante möglich sind und keine Aussage über das Verhalten sekundärseitig bei 30A pri. Somit würde ich mal mit den Widerständen experimentieren ohne weitere Beschaltung also nur Messpule und Widerstand + Oszi unter Glühlampenlast wie sich der Phasenwinkel ändert.
Hast du die A oder B-Variante falls Aufdruck vorhanden ?
Ich habe 3 Verbraucher zum testen:
1. eine alte Glühlampe mit der Aufschrift 60W
2. eine alte Leuchtstofflampe 36W mit konventionellem Vorschaltgerät und Starter
3. meine Waschmaschine(mit "Frequenzumrichter")
Die Glühlampe habe ich zum Vergleich mit dem Oszi gemessen; natürlich gleiche Messwandler wie in der Arduinomessung, d.h. Spannungsmessung mit Trafo und Strommessung mit Stromwandler.
Dann habe ich die Werte für je 20mS in Excel exportiert.
33843
Vielen Dank für das einstellen der Daten. Bei der Leuchtstoffröhre würde es bei einen Datensatz passen danach verschiebt sich es weiter nach hinten...
Mal ein weitere Frage zu der Eingangsbeschaltung des ADC und der Strommessspule hast du dir das so ausgedacht oder gabs da eine verlässliche Quelle ?
Das wundert mich nicht wirklich. Die meissten Verbraucher im Haushalt sind heutzutage nicht mehr rein ohmisch. Schaltnetzteile, elektronische Vorschaltgeräte, eigentlich alle Netzteile mit Gleichspannungszwischenkreis ziehen Strom nur im Spannungsmaximum. Das flacht die Spannung in der Spitze ab. Alle Phasenanschnittsteuerungen ziehen keinen Strom am Anfang einer Halbwelle, da ist dann die Spannung höher. Ob das die wirkliche Erlärung ist, weiß ich aber nicht.
Bei den 36W der Leuchtstoffröhre hätte ich eher ein Problem. Das wird, genauso wie deren Helligkeit, von der Temperatur im inneren der Röhre abhängen. Und bei einem Frequenzumrichter hätte noch größere Probleme.
Kannst du mal die Kurven von den beiden zeigen?
MfG Klebwax
Das mit den Gleichspannungszwischkreis... es hängt immer davon ab wie stark der Zwischkreis entladen wird wo dann die neue Welle die Spannung des ZWK übersteigt. Das gute daran ist das Umrichter dieser Bauart zum Netz fast mit cos PHI 0,97-0,99 betrachtet werden können. Gibt ne neue EU-Norm/Verordnung ab wann Steurerungen Pflicht sind https://www.js-technik.de/die-wirkungsgradklassen-ie1/ie2/ie3
Schaltnetzteile haben getaktete Primärspulen zu 90% und eine aktive PFC.
Phasenanschnitt ist ja dann aber immer noch in Phase mit Strom und Spannungen, dass was reinballert ist genau das Knallharte Einschaltmoment was zu Problemen führt..
Wietere Kruven sind auch in der gleichen Tabelle enthalten ;)
stfan1409
10.12.2018, 19:58
Hast du die A oder B-Variante falls Aufdruck vorhanden ?
es ist ein "B" aufgedruckt
Mal ein weitere Frage zu der Eingangsbeschaltung des ADC und der Strommessspule hast du dir das so ausgedacht oder gabs da eine verlässliche Quelle ?
Der größte Teil davon ist aus dem Datenblatt von dem MCP3301. Im Datenblatt vom Stromwandler ist ein 50 Ohm Widerstand angegeben, ich habe daraus den 56 Ohm Widerstand gemacht.
avr_racer
10.12.2018, 20:53
es ist ein "B" aufgedruckt
bääämmmm also sind bis zu 60° Phasenschiebung nur durch die Spule möglich siehe Link somit sind 22° nicht unrealistisch
http://www.zeming-e.com/English/prodviewtype5-290.html
Der größte Teil davon ist aus dem Datenblatt von dem MCP3301. Im Datenblatt vom Stromwandler ist ein 50 Ohm Widerstand angegeben, ich habe daraus den 56 Ohm Widerstand gemacht.
Mir gehts darum warum die Stromquelle ohne Mittelspeisung dierekt so angeschloßen werden kann. Im DB wirds trotzdem mit einer Mittelspeisung gemacht.
Dein Glück ist bei -70bits sind das immer noch mehr als -0,3V ca -0,021V was in der Toleranz von -0,3 <- GND <-> VCC -> +0,3V ist
Kannst du mir mal eine Seitenzahl geben ?
Zum Widerstand ja gut 50 Ohm fällt ein wenig aus der Reihe... mit 2x 100Ohm parallel hast du dann auch 50 Ohm
Autor: Frank K. (fchk (https://www.mikrocontroller.net/user/show/fchk))
Datum: 03.11.2014 08:29
https://www.mikrocontroller.net/topic/348723
Das was du suchst ?
stfan1409
10.12.2018, 21:40
ja, sowas suche ich, ABER das sind ja alles nur Lösungsansätze, da mache ich lieber an meiner Messung weiter und weiß dann wie es funktioniert ;-)
Das die Spule im Wandler bis zu 60° Phasenverschiebung hat ist natürlich unglücklich... Am einfachsten wäre es einen neuen (besseren) Wandler zu kaufen, der aber ohne größere Ändereungen an meinen AD Wandler passt...
Im Datenblatt vom MCP ist der Anschluss auf Seite 18 / Figure 5-4
http://ww1.microchip.com/downloads/en/devicedoc/21700d.pdf
So, habe ich es aufgebaut.
influencer
10.12.2018, 22:05
ja, sowas suche ich, ABER das sind ja alles nur Lösungsansätze
https://www.mouser.de/datasheet/2/76/CS5490_F3-1142195.pdf
fuer 3.26EU liegt doch in der preisklasse der hier im thread empfohlenen ADC, oder ?
die einzige kroete die ich da aktuell sehe ist das UART-interface, das so direkt nich wirklich busfaehig ist, aber vielleicht kann man ja dafuer einen arduino nutzen (mehre UARTs zu simulieren um daten von mehreren CS5490 zu akkumulieren..)
aber da gibts auch was fuer:
https://www.instructables.com/id/SPI-to-4-x-UART-Bridge-MULTIUART/
avr_racer
11.12.2018, 09:03
ja, sowas suche ich, ABER das sind ja alles nur Lösungsansätze, da mache ich lieber an meiner Messung weiter und weiß dann wie es funktioniert ;-)
Versteh was du meinst aber so wie es jetzt ist mit der Integration sollte eine Division durch die Integrationszeit doch keine große Rolle als Erweiterung sein. ;)
Das die Spule im Wandler bis zu 60° Phasenverschiebung hat ist natürlich unglücklich... Am einfachsten wäre es einen neuen (besseren) Wandler zu kaufen, der aber ohne größere Ändereungen an meinen AD Wandler passt...
An eine Verschiebung dachte ich auch schon aber ohne DB bzw nach langen suchen wurde man fündig.
Neuer Wandler
https://de.rs-online.com/web/p/stromwandler/7754956/
https://docs-emea.rs-online.com/webdocs/11b0/0900766b811b0374.pdf
Mit guten DB ausser das hier der Phasenfaktor fehlt evtl weil nur ein minimaler vorhanden ist <1°
Im Datenblatt vom MCP ist der Anschluss auf Seite 18 / Figure 5-4
http://ww1.microchip.com/downloads/en/devicedoc/21700d.pdf
So, habe ich es aufgebaut.
Ahhh okay danke, nun dein Stromlaufplan ist dann unterschiedlich zu dem wie es Seite 18 beschrieben ist.
Bei dir:
IN(-/+) sind nicht beschaltet
DB.
IN(-) und VREF sind mit den 2,5V des Reglers beschaltet welcher dann automatisch diese 2,5V (Virtuelle Masse) an den IN(+) weitereicht der dann mit den 10µF beschaltet ist.
Der C hat die Aufgabe Wechselspannungen auf die Gleichspanung(2,5V) einzukoppeln so das der ADC -+2,5V verarbeiten kann in +-4096bits
Zur Spule selbst, würde diese versuchen immer mit einem C einzukopplen da Gleichspannung die Spule taub macht, also vormagnetisiert. Inwieweit das bei deiner Ausgangsschaltung der Fall ist, schwer zu sagen.
Nice to Know S.18
Although the ADC is not production tested with a 2.5V reference as shown, linearity will not change more than 0.1 LSB.
stfan1409
11.12.2018, 16:14
Ahhh okay danke, nun dein Stromlaufplan ist dann unterschiedlich zu dem wie es Seite 18 beschrieben ist.
Bei dir:
IN(-/+) sind nicht beschaltet
DB.
IN(-) und VREF sind mit den 2,5V des Reglers beschaltet welcher dann automatisch diese 2,5V (Virtuelle Masse) an den IN(+) weitereicht der dann mit den 10µF beschaltet ist.
Der C hat die Aufgabe Wechselspannungen auf die Gleichspanung(2,5V) einzukoppeln so das der ADC -+2,5V verarbeiten kann in +-4096bits
hmmm denke schon, dass ich es so wie im DB angeschlossen habe, bis auf den Kondensator zum einkoppeln - oder nicht? (ok, nicht schön gezeichnet, da am Layout vom ursprünglichem Lochraster orientiert...)
33755
Zur Spule selbst, würde diese versuchen immer mit einem C einzukopplen da Gleichspannung die Spule taub macht, also vormagnetisiert. Inwieweit das bei deiner Ausgangsschaltung der Fall ist, schwer zu sagen.
aber verfälscht der Kondensator nicht meine Messung? Spule = Widerstand bei Wechselspannung?
Ich werde gleich mal einen neuen Stromwandler suchen. Eventuell finde ich ja noch einen mit der Angabe von der Phasenverschiebung. Vielleicht ist die Messung ja dann "richtig".
avr_racer
12.12.2018, 10:36
hmmm denke schon, dass ich es so wie im DB angeschlossen habe, bis auf den Kondensator zum einkoppeln - oder nicht? (ok, nicht schön gezeichnet, da am Layout vom ursprünglichem Lochraster orientiert...)
Ahh stimmt hast recht. die Verbidnung vom Regler an den 2 C's vorbei habe ich nicht für voll genommen....
aber verfälscht der Kondensator nicht meine Messung? Spule = Widerstand bei Wechselspannung?
Bei richtiger Dimensionierung nicht. Was im DB steht kann man schon als sehr sehr guten Anhalt nehmen ausser das bei der Abschrift mal was schief geht. 10µF sind bei 2,5V und der einzukoppelnden Spannung schon in Ordnung.
Grober Anhalt: kleine Spannung + kleiner C, größer werdende Spannung eben im Verhältniss größer werdender C.
Da der C nicht vorhanden ist wirkt die URef von 2,5V auf die Spule ein und magnetisiert sie vor.
Die Spule hat an Pin2 ein * , dieser * signalisiert das dort die gleiche Polarität anliegt wie sie auch primär auftritt. Also primär + wird sekundär auch zu +
1. Spule und R von IN(+) und IN(-) trennen
2. Spule und R einseitige auf Masse packen
3. Spule und R mit dem offenen Ende an den KoppelC anschließen und den KoppelC an IN(+) anschließen.
Ich werde gleich mal einen neuen Stromwandler suchen. Eventuell finde ich ja noch einen mit der Angabe von der Phasenverschiebung. Vielleicht ist die Messung ja dann "richtig".
Ok, probier aber voher die Einkopplung bitte mal aus mit der alten Spule
stfan1409
12.12.2018, 19:13
Ok, probier aber voher die Einkopplung bitte mal aus mit der alten Spule
Ich habe - wie im Datenblatt - einen Elko mit 10µF eingebaut. Mit einer 60W Glühlampe kann ich keinen Unterschied feststellen.
Die Spannungskurve ist aber nicht so schön.
In einem anderen Versuch habe ich mal den Stromwandler und die Phasenverschiebung getestet:
12V Trafo und eine 12V Halogenlampe angeschlossen. Die 12V(aus dem Trafo) direkt mit dem AD-Wandler gemessen(die vorhandenen Widerstände natürlich angepasst) und mit dem Stromwandler den Strom gemessen. Phasenmäßig fast keine Verschiebung.
Dann habe ich den ersten Trafo, mit der unschönen Sinuskurve gegen den neuen(viel zu großen) ersetzt und nun ist es ein schöner Sinus...
Dann habe ich eine 36W Leuchtstofflampe angeschlossen. Ergebnisse hier:
33845
Außerdem ist mir aufgefallen, dass die Kurve IMMER am Ende 2 falsche Werte hat...ich weiß aber noch nicht, ob es ein Fehler in dem eigentlichem Programm ist, oder ein Fehler in der Ausgabe für den Test mit Excel... Morgen gehts weiter
avr_racer
12.12.2018, 20:53
Ich habe - wie im Datenblatt - einen Elko mit 10µF eingebaut. Mit einer 60W Glühlampe kann ich keinen Unterschied feststellen.
Die Spannungskurve ist aber nicht so schön.
...nicht so schön... ist bei dir wie definiert ?
In einem anderen Versuch habe ich mal den Stromwandler und die Phasenverschiebung getestet:
12V Trafo und eine 12V Halogenlampe angeschlossen. Die 12V(aus dem Trafo) direkt mit dem AD-Wandler gemessen(die vorhandenen Widerstände natürlich angepasst) und mit dem Stromwandler den Strom gemessen. Phasenmäßig fast keine Verschiebung.
Warum jetzt ein 12V-Trafo ? Quasi um das 6V-Trafo ersetzt, vermute ich jetzt mal... mmhh
Dann habe ich den ersten Trafo, mit der unschönen Sinuskurve gegen den neuen(viel zu großen) ersetzt und nun ist es ein schöner Sinus...
Jetzt ist die Strommessspule gemeint ? Warum ist der jetzt viel größer ?
Mir stellt sich die Frage wie bist du jetzt drauf gekommen ?
Ähm frage nur da ich jetzt davon ausgegangen bin das erstmal nur die Strommessspule modifiziert wird bzw schwierig ohne aktuellen Stromlaufplan den man vergleichen kann.
Dann habe ich eine 36W Leuchtstofflampe angeschlossen. Ergebnisse hier:
33845
Außerdem ist mir aufgefallen, dass die Kurve IMMER am Ende 2 falsche Werte hat...ich weiß aber noch nicht, ob es ein Fehler in dem eigentlichem Programm ist, oder ein Fehler in der Ausgabe für den Test mit Excel... Morgen gehts weiter
Also bei den beiden Glühlampendiagrammen sind trotzdem noch die ca 22° Verschiebung drin.
Zu den beiden falschen Endwerten: 207 Datenätze sind vorhanden im Diagramm werden der 208te und 209te Datensatz mit dragestellt die in der Tabelle "MIT" zu finden sind betrifft alle Tabellen
stfan1409
12.12.2018, 21:15
Entschuldigung für die Verwirrung. Der Stromwandler ist der gleiche geblieben. Ich habe lediglich den 6 Volt Trafo für die Spannungsmessung gegen einen 12 Volt Trafo mit viel mehr Leistung getauscht. Das hat ergeben dass der Sinus für die Spannungsmessung jetzt sinusförmig angezeigt wird. Mit dem 6 Volt Trafo hatte ich in dem Sinus leichte Ecken drin. Die ersten beiden Diagramme in der Excel Tabelle sind mit dem alten 6 Volt Trafo der einzige Unterschied ist, dass ich bei der ersten Messung keinen Kondensator drin habe und bei der zweiten Messung ein 10 Mikrofarad Kondensator. Bei dem dritten Diagramm habe ich den 12 Volt Trafo für die Spannungsmessung eingebaut + den Kondensator an dem Stromwandler und als Last habe ich eine Leuchtstofflampe angeschlossen.
avr_racer
13.12.2018, 10:33
Gut also ist der Sachstand wieder gleich und mit den Änderungen hat sich also nicht wirklich viel getan, dann warten wir mal bis die neu Messspule da ist und gucken dann weiter.
stfan1409
09.05.2019, 17:24
Fertig?
Also ich habe lange weitergetestet und das Ergebnis ist, dass ich die Verschiebung durch den Trafo über die Software rausrechne.
Der Messwert ist ganz passabel, wobei ich festgestellt habe, dass ich kein geeichtes Messgerät habe, um einen 100%igen Kontrollwert zu haben.
Eine Glühlampe ist einfach, aber eine Waschmaschine mit "Frequenzumrichter" ist für mich nicht mehr sicher messbar. Auch hierfür extra gekaufte digitale Hutschienenzähler haben untereinander Abweichungen von mehreren % angezeigt.
Hier nun das endgültige Programm:
Datei: LeistMess_V3.0.ino
/*
Zur Leistungsmessung in einer Elektroverteilung.
Es werden mehrere Leistungen gemessen und über I2C zur Weiterverarbeitung weitergegeben.
Herzstück ist ein Arduino Nano. Über SPI-Bus sind pro Messung ein MCP3301 A/D-Wandler angeschlossen,
welcher wiederum an eine Stromzange angeschlossen ist. Die Leistungsmessung ist zur Zeit nur für Wechselspannung.
Die Spannung wird über einen Trafo einphasig gemessen und mit den gemessenen Strömen multipliziert.
Weitere Infos zur Messung siehe weiter unten.
*/
// ProgrammName: LeistMess
// Kurzbeschreibung: Strommessung, Effektivwertbildung, Datenaufbereitung und Übertragung
// Datum: 04.03.2017 / Version: 1.0 - mit serieller Ausgabe
// Datum: 10.07.2017 / Version: 1.1 - mit Ausgabe über I2C
// Datum: 03.04.2018 / Version: 1.2 - I2C Ausgabe angepasst
// Datum: 20.04.2018 / Version: 1.3 => Umstellung auf Leistungsmessung
// Datum: 29.08.2018 / Version: 2.0 - Leistungsmessung eingebaut; Kalibrierungsmenü angepasst
// Datum: 30.08.2018 / Version: 2.1 - 230V Spannung über I2C hinzugefügt; I2C-Adresse über Konstante
// Diverse Änderungen und Tests
// Datum: 07.03.2019 / Version: 3.0 - an Nano angepasst
// Autor: Jürgen Stähr
//Programm Version:
const String Version = "3.0";
//D12 -> Pin 50
//D13 -> Pin 52230
// Konfiguration
//******* ACHTUNG ********** Hier an die vorhandene Hardware anpassen ******** ACHTUNG ***************
const int csSpg = 8; // Pin Nummer des CS für die Spannungsmessung hier eintragen
const int PinKal = 17; // PIN Nummer für die Kalibrierung (Für Kalibrierung auf Masse ziehen)
const int ADCAnz = 2; // Anzahl aller angeschlossenen ADC (Spannung- und Strommessung)
const int CRundAnz = 4; // Anzahl der Messungen je Sekunde
const int I2C_Adr = 4; // I2C Adresse für die Datenausgabe als Slave
// Pin Nummern der cs Eingänge der ADC. Erlaubt sind 2 - 10 (digital Pins)
// 14 - 19 (analogPins A0 - A5)
//const int cs[] = {10, 10,10,10,10,10,10,10,10,10}; // das geht auch, macht aber keinen Sinn
const int cs[] = {9, 10}; // Muss mit ADCAnz übereinstimmen oder größer sein
const int Shunt[] = {100, 56}; // Entsprechend dem cs[] Array die Widerstände eintrage// 16A 16A 9A 16A 28A 9A 28A 9A 16A
/*
TESTPLATINE 2-Kanal:
Kanal 7 = 100 Ohm
Kanal 8 = 56 Ohm
Kanal: Bezeichnung: Phase "L1"
(0) L1 D2 Spannungsmessung - 150 Ohm
(1) L1 D3 Herd 16A - L1 - 100 Ohm
(2) L1 D4
(3) L1 D5
(4) L1 D6
(5) L1 D7 DG Steckdosen&Bel. 28A - 56 Ohm
(6) L1 D8 G Steckdosen&Bel. 28A - 56 Ohm
(7) L1 D9 Steckdosen Keller 28A - 56 Ohm
(8) L1 D10 Beleuchtung Keller 9A - 180 Ohm
(9) L1 D14 Waschmaschine 16A - 100 Ohm
Kanal: Bezeichnung: Phase "L2"
(0) L2 D2 Spannungsmessung - 150 Ohm
(1) L2 D3 Herd 16A - L2 - 100 Ohm
(2) L2 D4 Geschirrspüler 16A - 100 Ohm
(3) L2 D5 Beleuchtung EG 9A - 180 Ohm
(4) L2 D6 16A - 100 Ohm
(5) L2 D7 Steckdosen EG 28A - 56 Ohm
(6) L2 D8 28A - 56 Ohm
(7) L2 D9
(8) L2 D10
(9) L2 D14
Kanal: Bezeichnung: Phase "L3"
(0) L3 D2 Spannungsmessung - 150 Ohm
(1) L3 D3 Backofen 16A - L3 - 100 Ohm
(2) L3 D4
(3) L3 D5 Kühlschrank 9A - 180 Ohm
(4) L3 D6
(5) L3 D7 OG Steckdosen&Bel. 28A - 56 Ohm
(6) L3 D8
(7) L3 D9
(8) L3 D10
(9) L3 D14
*/
const unsigned long BaudRate = 115200; // hier die Baudrate des seriellen Interfaces einstellen
//************************************************** ******************
// Beschreibung:
/*--------------------------------------------------------------------------
Das Programm läuft auf einem Arduiono (Nano, Mini,...) und soll den Wechselstrom von mehreren Installationsleitungen messen.
Max. können 10 Wandler angeschlossen werden. Bei jedem Wandler wird 4 mal pro Sekunde je eine Periode gemessen und aus den
Messergebnissen der RMS gebildet. Der Arduino schafft 586 Messungen in 20 ms bei Verwendung von unsigned long zum Speichern
der Messergebnisse. Bei Verwendung von float können nur 380 - 400 Messungen durchgeführt werden.
Die Integer Berechnung begrenzt den max. gemessenen Strom auf 2707 Wandlerzählern, entspricht bei 50 Ohm 33A -> 100 Ohm 16,1A.
Die Zusammengefassten Ergebnisse werden einmal pro Sekunde über die serielle Schnittstelle übertragen.
Die Messwandler liefern 1mA pro 1A Messstrom, max. jedoch 2,5V. ( wenn das der Effektivwert ist, liegt der Spitzenwert schon zu hoch für den ADC!!!!)
Ein 13 Bit ADC MCP 3301 digitalisiert die über einen Messshunt abfallende Spannung.
Die Größe des Mess-Shunt ist je ADC wählbar und muss im Array Shunt[] eingetragen werden.
Der ADC erhält eine Referenzspannung von 2,5V. Diese geteilt durch die halbe Auflösung=4096 ergibt den
Spannungswert eines ADC-Zählers= 0,61035 mV. Die Referenzspannungsquelle muss damit hinreichend genau sein.
Der ADC wird über SPI angesprochen. Er kann mit max 1,7 MHz getaktet werden. Der AVR läuft mit 16 MHz und kann den SPI Takt
nur durch 2,4,8,16,.. teilen, so dass der ADC mit 1 MHz getaktet wird. Damit dauert die Übertragung eines
Messwertes 16 uS. Weiter 18 uS werden für die Verarbeitung benötigt
TEST MESSWERTE(Messwiderstand -> Messstrom):
--------------------------------------------
OHM - Strom MIN - Strom MAX
56 Ohm - 11 mA - 28 A
100 Ohm - 6 mA - 16 A
180 Ohm - 4 mA - 9 A
--------------------------------------------------------------------------
Version 1.1 mit I2C
Der Arduino verhält sich als I2C Slave. Sobald eine Anfrage vom Master empfangen wird,
werden alle 10 Messwerte (in High- und Lowbyte aufgeteilt) per I2C gesendet. Wärend dieser Zeit
können keine I2C Anfragen empfangen werden.
Version 1.3 ==> Leistungsmessung
Das Programm soll nun die Leistung der Verbraucher erfassen. Dazu wird ein frei wählbarer Wandler
zur Messung der Spannung benutzt. Es kann auch ein elfter Wandler angeschlossen werden. der Controller
kann dann 10 Verbraucher überwachen.
Messprinzip:
In der Funktion Messperiode wird der Strom des aktuellen Wandlers mit der gemessenen Spannung multipliziert und in einer
long int var aufaddiert. Nach 20ms wird der Mittelwert durch Teilen mit der Anzahl der Messungen ermittelt.
Ausgabe:
Erst hier wird der Wert eines Stromzählers vom ADC und des Spannungszählers eingearbeitet:
- Mittelwert aus den Runden
StromWert eiens Zählers in Abhängigkeit vom MessShunt
Wert eines Spannungszählers (400V Spitzenspannung/4096 ADC Zähler ungefähr 0,1V)
Korrekturwert Spannung
Hier wird von Integer auf Float umgeschaltet.
Da die Spannung nicht so genau wie der Strom angliefert wird, kann die Spannungsmessung kalibriert werden.
Hierzu muss z.B. der Pin A3 beim Einschalten auf Masse gezogen werden, das Programm geht dann in den Kalibriermodus.
Es misst die Spannung und gibt sie über die Serielle Schnittstelle aus und wartet anschließend auf die Eingabe
einer Spannungsmessung. Der Korrekturfaktor wird daraus errechnet und im EEPROM abgespeichert.
(die max Eingangsspannung für den MCP3301 beträgt +/-2,5V)
*/
// für Datenausgabe bei Fehlersuche(wenn auskommentiert = nicht aktiv)
//#define debug //Status über RS232 ausgeben
#define debug_Strom_Ausgabe //Strom über RS232 ausgeben
const unsigned long CPeriode = 20000; // Microsekunden einer Halbwelle
const unsigned long CRunde = 1000 / CRundAnz; // ms einer Messrunde über alle ADC
const int EEAdr = 0; // Adresse im EEProm für den Spg. Korrekturwert
// Array zur Aufnanme aller Messergebnisse einer Sekunde
long Erg[ADCAnz * CRundAnz];
boolean Flag_Ausgabe = false; // Flag für die Ausgabe
unsigned long SchlafRunden = 0; // zählt im Debugmodus die Looprunden
float Korrektur; // nimmt den Spannungskorrekturwert aus dem EEPROM auf
int Wert_h[ADCAnz]; //Variable für I2C High
int Wert_l[ADCAnz]; //Variable für I2C Low
float MessSpg; //aktuelle 230V Spannung ausgeben
int MessSpg2; //aktuelle 230V Spannung ABER Komma verschoben!!!
//************************************************** ************************************
#include <SPI.h> // SPI Bibliothek
#include <Streaming.h> // Bibliothek zur besseren Ausgabeformatierung ==> Streaming.h ins Arduino Bibliotheksverzeichni kopieren
#include <Wire.h> // Bibliothek für I2C
#include <EEPROM.h> // EEPROM Zugriff
//************************************************** ************************************
// Funktionsprototypen
long MessPeriode(int csADC);
void Ausgabe();
void requestEvent();
void Messung();
//************************************************** ************************************
void setup() {
Serial.begin(BaudRate); // Serielle Schnittstelle mit 115200 Baud starten
SPI.begin(); // SPI Interface starten
for (int i = 0; i < ADCAnz; i++) { // cs Pins initialisieren
pinMode(cs[i], OUTPUT);
digitalWrite(cs[i], HIGH);
}
// Pin für die Spannungsmessung init.
pinMode(csSpg, OUTPUT);
digitalWrite(csSpg, HIGH);
// Pin für die Kalibrierung
pinMode(PinKal, INPUT_PULLUP);
SPI.beginTransaction(SPISettings(1700000, MSBFIRST, SPI_MODE0)); // SPI Parameter
Wire.begin(I2C_Adr); // I2C mit Adresse #... starten
Wire.onRequest(requestEvent); // register event für I2C
// Versionsausgabe:
//__________________________________________________ __________________________________________________
Serial.println("= = = = = = = = = = = = = = = = = = =");
Serial.print(" NEUSTART: StromMess_I2C_V_v"); Serial.println(Version); //Damit später zu sehen ist, welche Datei auf dem Arduino ist
Serial.print(" I2C Adresse L2: "); Serial.println (I2C_Adr);
Serial.println("= = = = = = = = = = = = = = = = = = =");
//__________________________________________________ __________________________________________________
//normal starten oder Kalibrierung starten:
if (digitalRead(PinKal) == LOW) {
//if (digitalRead(PinKal) == HIGH) { //immer Kalibrierung ausrufen zum testen
Serial << "Kalibrierung" << endl;
Kalibrierung();
}
EEPROM.get(EEAdr, Korrektur);
}
//************************************************** ************************************
void loop() {
if (digitalRead(PinKal) == HIGH) Flag_Ausgabe = true;
//Serial.print ("Ausgabe - Flag_Ausgabe: ");
//Serial.println (Flag_Ausgabe);
if (Flag_Ausgabe == true) { // Falls I2C Master Daten haben will
delay(10);
//Spannung messen und auf ertem Kanal ausgeben
int Spg = SpgMessung();
MessSpg = Spg;
MessSpg *= Korrektur; // Korrekturfaktor aus dem EEProm befücksichtigen
MessSpg2 = MessSpg; //Wert mit verschobenem Komma für I2C Ausgabe
MessSpg *= 0.1;
Messung(); // Neue Messung anstoßen
Flag_Ausgabe = false; // Flag zurücksetzen
}
#ifdef debug
SchlafRunden += 1; // Im Debugmodus die Anzahl der LoopRunden zählen
#endif
}
//************************************************** ************************************
void requestEvent() { // Diese Schleife wird bei I2C Empfang durchlaufen
#ifdef debug
Serial.println ("requestEvent - Anforderung von I2C Master");
#endif
for (int i = 0; i < ADCAnz; i++) {
// I2C Ausgeben -> Daten müssen sofort ausgegeben werden, da sonst Schwierigkeiten mit I2C Master
Wire.write(Wert_l[i]);
Wire.write(Wert_h[i]);
#ifdef debug
Serial << Wert_l[i] << " : " << Wert_h[i] << endl;
#endif
} // Ende Schleife über alle ADC
Flag_Ausgabe = true; // und es wird nichts weiter gemacht, als ein Flag zu setzen, das in Loop ausgewertet wird
}
//************************************************** ************************************
void Messung() {
// Diese Schleife wird jede Sek. einmal durchlaufen
// I2C abschalten
TWCR = _BV(~TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(~TWINT);
for (int i = 0; i < ADCAnz * CRundAnz; i++) Erg[i] = 0; // Ergebniise des vorherigen Laufes löschen
// Schleife je Runde. In jeder Runde werden alle ADC für je 20ms abgefragt
for (int runde = 0; runde < CRundAnz; runde++) {
//Serial << "StartRunde:" << runde << endl;
for (int ADCNr = 0; ADCNr < ADCAnz; ADCNr++) {
int Index = runde * ADCAnz + ADCNr; // Zeigt auf das Ergebnisarray, Reihenfolge: Ergs der ersten Runde, Ergs der 2. Runde, usw.
Erg[Index] = MessPeriode(cs[ADCNr]); // Messung für einen ADC durchführen und speichern;
//Serial << "ADCNr:" << ADCNr << "Runde:" << runde << endl;
} // Ende, alle ADC einmal durchmessen
if (runde == CRundAnz - 1) Ausgabe(); // wenn es die letzte Runde war ==> Daten ausgeben
} // Ende Schleife über alle Mess-Runden
// I2C einschalten
TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT);
return;
} //Ende Messung
/* Function MessPeriode
Führt mit einem ADC die Messungen über eine Periode durch.
Der cs-PIN des ADC wird übergeben
führt dann die Spannungsmessung aus
summiert Strom * Spg Werte auf
nach Ablauf wird durch die Anzahl der Messungen geteilt (Mittelwert) ==> Rückgabewert
Strom und Spannung müssen vorzeichenrichtig verarbeitet werden, deshalb nur long Variablen*/
long MessPeriode(int csADC) {
unsigned long ZeitPeriode = micros();
int MessAnz = 0; // Anzahl der Messungen
const int diff = 2; //Hier den Wert für die Differenz / Verschiebung eingeben - muss ausprobiert werden.
/*Einen ohmschen Verbraucher wie eine Glühlampe anschließen und den Wert im Testmodus so einstellen,
* dass die Werte von Strom und Spannung gleichzeitig im positiven/negativen Bereich sind.
*/
// Initialisierung der Zähler
// Der Strom wird jeweils einen Platz weiter ins Array als die Spannung geschrieben. Dadurch dauert es diff=8 mal bis zum ersten Mal
// Platz null belegt wird. erst dann beginnt die Messung und damit auch die Zeitzählung
int zaehler_i = 0; //Zeiger für Stromarray ==> Im ersten Durchlauf wird Platz 1 im Array beschrieben
int zaehler_u = diff; //Zeiger für Spannungsarray ==> Im ersten Durchlauf wird Platz 0 im Array beschrieben
int ADCStrom[diff + 1]; // nimmt den Strom-Messwert vom ADC auf
int ADCSpg[diff + 1]; // desgl. für die Spannung
boolean start = false; // false, bis diff=8 Durchgänge gelaufen sind.
float Erg = 0; // nimmt die Summen einer Periode auf
//..................................................
do {
//Zähler für Strom:
if (zaehler_i < diff) {
zaehler_i++;
}
else {
zaehler_i = 0;
// prüfen, ob wir am Anfang der Messung stehen
if (!start) {
// Das Array ist das erste Mal gefüllt, jetzt kann es losgehen
ZeitPeriode = micros(); // Messzeit jetzt neu starten
Erg = 0; // Ergebnis noch mal nullen
start = true; // und Feuer frei
}
}
//Zähler für Spannung:
if (zaehler_u < diff) {
zaehler_u++;
}
else {
zaehler_u = 0;
}
// Strom und Spannung versetzt ins Array schreiben
// Strommessung: mit zaehler_i
digitalWrite(csADC, LOW);
ADCStrom[zaehler_i] = SPI.transfer16(0);
digitalWrite(csADC, HIGH);
// der ADC liefert ein 13 Bit Ergebniss, das muss an 16 Bit int angepasst werden
if (bitRead(ADCStrom[zaehler_i], 12)) {
ADCStrom[zaehler_i] |= 0xF000; // das int Signbit und das obere HalbByte auf 1 setzen (2er Complement)
} else ADCStrom[zaehler_i] &= 0x0FFF; // die 3 undefinierten und das Signbit auf null
// Spannungsmessung: mit zaehler_u
digitalWrite(csSpg, LOW);
ADCSpg[zaehler_u] = SPI.transfer16(0);
digitalWrite(csSpg, HIGH);
// der ADC liefert ein 13 Bit Ergebniss, das muss an 16 Bit int angepasst werden
if (bitRead(ADCSpg[zaehler_u], 12)) {
ADCSpg[zaehler_u] |= 0xF000; // das int Signbit und das obere HalbByte auf 1 setzen (2er Complement)
} else ADCSpg[zaehler_u] &= 0x0FFF; // die 3 undefinierten und das Signbit auf null
//BERECHNUNG: mit den verschobenen Werten
// Die Verschiebung ist bereits im Array enthalten. Der aktuellen Zähler ist zaehler_i,
// er wird mit den bereits früher aufgezeichneten Spannungswerten mulzipliziert.
Erg += (float)ADCStrom[zaehler_i] * (float)ADCSpg[zaehler_i]; // Strom * Spannung aufaddieren
MessAnz++; // Anzahl der Messungen erhöhen
} while (micros() - ZeitPeriode < CPeriode); // Ende MessSchleife über eine Periode
//..................................................
Erg /= MessAnz; // Das Ergebnis aller Messungen durch die Anzahl teilen (Mittelwert)
#ifdef debug
Serial << "Anzahl der Messungen je Periode:" << MessAnz << " Messung: " << Erg << endl;;
#endif
return (long)Erg; // Rückgabe ist der Mittelwert
}
/* Function Ausgabe
gibt jede Sekunde die Messergebnisse über die Serielle Schnittstelle aus*/
//************************************************** ************************************
void Ausgabe() {
#ifdef debug
Serial.println ("Ausgabe: ");
#endif
const long Uadc = 610350; // Wert eines Zählers
float IuA; // Strom je Zähler eines ADC
float SekWert; // nimmt die Ergebnisse einer Runde eines ADC auf
int Leistung;
for (int ADCNr = 0; ADCNr < ADCAnz; ADCNr++) { // Schleife über alle ADC
SekWert = 0;
for (int Runde = 0; Runde < CRundAnz; Runde++) { // Schleife über alle Runden je ADC
SekWert += Erg[Runde * ADCAnz + ADCNr]; // Messergebnisse eines ADC aufaddieren
} // Ende Schleife über Runden eines ADC
SekWert /= CRundAnz; // Mittelwert bilden
// Stromkorrektur einarbeiten
IuA = Uadc / Shunt[ADCNr]; // Strom je Zähler in uA berechnen
SekWert *= IuA; // mit Strom-Zählerwert multiplizieren z.B. für 50 Ohm(12207 uA)
SekWert /= 1000; // auf mA runter rechnen
SekWert /= 1000; // auf A runter rechnen
SekWert /= 10; // ein ADC-Zähler ist ca. 100mV Wert => Umrechnung auf Volt
SekWert *= Korrektur; // Korrekturfaktor aus dem EEProm berücksichtigen
if (SekWert >= 0) { // Wert nur übernehmen, wenn >= 0, sonst 0 eintragen -> also keine negativen Werte
Leistung = SekWert;
}
else {
Leistung = 0;
}
// Ausgeben
Wert_l[ADCNr + 1] = (lowByte(Leistung)); //aktuellen Wert an I2C Variable übergeben
Wert_h[ADCNr + 1] = (highByte(Leistung)); //+1 damit Byte0 für die Spannung frei bleibt
#ifdef debug_Strom_Ausgabe
//Serial << "Leist." << ADCNr + 1 << ": " << SekWert << " W; " ; //Ausgabe mit 2 Nachkommastellen
Serial << "Leist." << ADCNr + 1 << ": " << Leistung << " W; " ; //Ausgabe ohne Nachkommastellen
#endif
} // Ende Schleife über alle ADC
//Spannung über I2C auf dem ersten Byte übergeben
Wert_l[0] = (lowByte(MessSpg2)); //aktuellen Wert an I2C Variable übergeben
Wert_h[0] = (highByte(MessSpg2)); //aktuellen Wert an I2C Variable übergeben
Serial.print ("Spg.: ");
Serial.print (MessSpg2);
#ifdef debug_Strom_Ausgabe
Serial << endl;
#endif
return;
} // Ende Function Ausgabe
- - - Aktualisiert - - -
und der zweite Teil für die Kalibrierung:
Datei: Kalibrie.ino
/*
Kalibrierung
Hier wird die Spannungsmessung kalibriert. Durch einmaliges Eingeben der gemessenen Spannung errechnet das Programm
einen Korrekturfaktor und speichert ihn im EEPROM ab. Der Faktor wird künftig bei der Berechnung verwendet
*/
void Kalibrierung() {
while (true) {
float SpgVergl = 0; //ist die Spannung, welche als Vergleich vom Benutzer eingegeben wurde
int Spg = SpgMessung();
float MessSpg = Spg * 0.1;
Serial << ">>>>>>>>>>> Kalibrierung <<<<<<<<<<" << endl;
Serial << "Die gemessene Spannung (ohne Korrektur!) beträgt: " << _FLOAT(MessSpg, 1) << "V" << endl;
Serial << "Bitte das Ergebnis der Vergleichsmessung eingeben: ";
Serial.setTimeout(1000000);
while (SpgVergl == 0) {
String Eingabe = Serial.readStringUntil('\n');
SpgVergl = Eingabe.toFloat();
}
Serial << endl << "Eingegeben wurde: " << SpgVergl << endl;
Serial << " " << endl;
float Korrektur = SpgVergl / MessSpg;
Serial << "Korrekturfaktor ausrechnen: SpgVergl / MessSpg" << endl;
Serial << "Korrekturfaktor ausrechnen: " << SpgVergl << "V / " << MessSpg << "V" << endl;
Serial << "Korrekturfaktor ist: " << _FLOAT(Korrektur, 5) << endl;
Serial << " " << endl;
Serial << "Daraus errechneter Messwert: " << endl;
Serial << "MessSpg * Korrektur = Messwert" << endl;
Serial << MessSpg << "V * " << Korrektur << " = " << MessSpg*Korrektur << "V" << endl;
Serial << " " << endl;
EEPROM.put(EEAdr, Korrektur); //Faktor in EEPROM speichern
EEPROM.get(EEAdr, Korrektur); //Faktor zum Testen nochmal aus EEPROM auslesen
Serial << "geänderter Korrekturfaktor: " << _FLOAT(Korrektur, 5) << endl;
Serial << "wurde im EEPROM Abgespeichert!" << endl << endl;
}
return;
}
int SpgMessung() {
unsigned long ZeitPeriode = micros();
int MessAnz = 0; // Anzahl der Messungen
int ADCdata; // nimmt den Messwert vom ADC auf
unsigned long Erg = 0; // nimmt die quadrierten Summen einer Periode auf
do {
digitalWrite(csSpg, LOW);
ADCdata = SPI.transfer16(0);
digitalWrite(csSpg, HIGH);
// der ADC liefert ein 13 Bit Ergebniss, das muss an 16 Bit int angepasst werden
if (bitRead(ADCdata, 12)) {
ADCdata |= 0xF000; // das int Signbit und das obere HalbByte auf 1 setzen (2er Complement)
} else ADCdata &= 0x0FFF; // die 3 undefinierten und das Signbit auf null
Erg += (unsigned long)ADCdata * (unsigned long)ADCdata; // Quadrieren
MessAnz++; // Anzahl der Messungen erhöhen
} while (micros() - ZeitPeriode < CPeriode); // Ende MessSchleife über eine Periode
Erg /= MessAnz; // Das Ergebnis aller Messungen durch die Anzahl teilen (quadratischer Mittelwert)
#ifdef debug
Serial << "Anz:" << MessAnz;
Serial << "M:" << ADCdata << " E:" << (int(sqrt(Erg))) << "; ";
#endif
return int(sqrt(Erg)); // Rückgabe ist die Wurzel aus dem Mittelwert der Quadrate
}
Glückwunsch!
werde es mal testen
jodurino
18.11.2020, 20:23
Hallo
habe mal diesen thread wieder nach oben geholt.
Und ich habe ihn eigentlich komplett gelesen, natürlich nicht alles sofort verstanden.
Im Schaltplan im link unter dem ersten Beitrag finde ich nicht den Trafo zur Spannungsmessung, wo finde ich da mehr?
Ziel ist es die Stromaufnahme und kW/h von Geräten an einer 16A & 32A CEE Steckdose zu messen
weiter oben wird ja ein 15A 15:1 Stromwandler noch mit vorgeschlagen
für mich würde ich dann die Schaltung 3x aufbauen mit 15,30,50A Wandlern an L1, 2 und 3
wird ganz schön kniffelig, hat das jemand schon mal so gemacht?
Grüße
jodurino
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.