Guten Morgen, ich bin auf der Suche nach der günstigsten Möglichkeit die komplexe Eingangsleistung eines fertigen Produkts zu bestimmen und die erfassten Daten im µC abrufbar abzulegen. Das Bauteil wird an 230 V Netzspannung angeschlossen. Es sollen möglichst keine zusätzlichen Komponenten gekauft werden müssen. Über einen Spannungsteiler könnte man die Netzspannung so dimensionieren, dass am µC IO Pin eine Spannung zwischen 0-5 V vorliegt...(realisiert hab ich das noch nicht) Über einen sehr kleinen Shunt Widerstand könnte man indirekt den Eingangsstrom bestimmen. Die Spannungs- und Stromverläufe werden abgetastet und am ADC eingelesen (12 Bit). Die Momentanwerte beider Signale multipliziert und gemittelt -> Wirkleistung Für die Scheinleistung werde ich entweder Wurzelfunktionen lösen müssen, was auf dem µC unschön ist oder folgendes: Da es sich um ein Signal mit Oberwellenanteil und Verzerrungen handelt, läuft es wohl auf einen digitalen Filter und eine FFT raus. Hat jemand sowas schon im Mikrocontroller realisiert? Habt ihr andere Ideen wie man auf die netzseitige Schein-, Blind-, Wirkleistung, Power Faktor und Phasenwinkel schließen kann? LG
Plumbus schrieb: > Es sollen möglichst keine zusätzlichen Komponenten gekauft werden > müssen. Dann wird das auch mit der Shunt-Messung nichts, oder willst du, dass am Shunt bis zu 5 V abfallen, nur um dir den Verstärker zu sparen? Plumbus schrieb: > Für die Scheinleistung werde ich entweder Wurzelfunktionen lösen müssen, > was auf dem µC unschön is Warum? Ob die Rechenleistung ausreicht kann man erst sagen wenn du uns verrätst wie schnell das ganze werden soll.
c r schrieb: > Dann wird das auch mit der Shunt-Messung nichts, oder willst du, dass am > Shunt bis zu 5 V abfallen, nur um dir den Verstärker zu sparen? Es soll das nötigste umgesetzt werden um eine Genauigkeit von 5% hinzukriegen. 5% Toleranz zu den Werten eines digitalen Leistungsmessers. c r schrieb: > Warum? Ob die Rechenleistung ausreicht kann man erst sagen wenn du uns > verrätst wie schnell das ganze werden soll. Die Softwaregeschichte hab ich mir noch nicht angeschaut, habe nur mal gehört dass "Wurzel ziehen" auf dem µC unschön ist. Bei dem µC handelt es sich um den SAM D20, welcher einen 12-Bit ADC mit 350 Kilosamples per Second zur Verfügung stellt. In erster Linie möchte ich es hinkriegen, dass die Werte überhaupt beim µC ankommen ohne dass der Mikrocontroller durch die negative Halbwelle der Netzspannung flöten geht. Eventuell Brückengleichrichter? -> Dann wird die Masse jede zweite Halbwelle immernoch negativ, weiß noch nicht wie ich das umgehen kann.
Unter "DIY energy meter" findest du Projekte zuhauf.
c r schrieb: > Unter "DIY energy meter" findest du Projekte zuhauf. Danke dir! Habe dadurch ein hilfreiches Video gefunden, mal sehen was sich machen lässt. https://training.ti.com/build-your-own-energy-meter
...aber Dir ist schon klar, dass dein Controller dann auf Netzpotential liegt. Kann man machen, muss man ggf. nur beachten wenn man die Daten weiterübertragen möchte.
Plumbus schrieb: > Über einen Spannungsteiler könnte man die Netzspannung so > dimensionieren, dass am µC IO Pin eine Spannung zwischen 0-5 V > vorliegt...(realisiert hab ich das noch nicht) > > Über einen sehr kleinen Shunt Widerstand könnte man indirekt den > Eingangsstrom bestimmen. Wie ich sehe willste im Gegensatz zu mir den minimalen Weg gehen. Für den Shunt brauchste aber noch dringend eine Verstärkung wenn dein ADC kein integrierten PGA hat. Aber ansonsten hängt dann das Gerät am Netz, da empfehle ich dir den ADC noch über einen ADUMxxxx galvanisch zu trennen damit du dich nicht selber grillst. Patrick L. schrieb: > Die Softwaregeschichte hab ich mir noch nicht angeschaut, habe nur mal > gehört dass "Wurzel ziehen" auf dem µC unschön ist. Bei dem µC handelt > es sich um den SAM D20, welcher einen 12-Bit ADC mit 350 Kilosamples per > Second zur Verfügung stellt. Der D20 dürfte mit seinen 48MHz M0 für eine FFT grenzwertig zu langsam sein. (Eine fertige FFT gibts übrigens direkt von ARM im CMSIS DSP Paket) Vor allem musst du ja 350kS/s erstmal irgendwo speichern und dann musste über die Rechnen. Klingt erstmal nicht nach viel aber das läppert sich. Mit einem STM32F205 auf 120MHz kann ich jede dritte Vollwelle messen. DIe Zwischenzeit geht für die GUI drauf. Aber das reicht auch, jede Vollwelle muss nicht sein. Hier der Link zum Gerät: Beitrag "Re: Zeigt her eure Kunstwerke (2019)" Zum Wurzelrechnen gibts auch integercode, siehe hier: http://www.codecodex.com/wiki/Calculate_an_integer_square_root Oder du nimmst einen größeren Prozessor mit FPU, der kann dann in Hardware Wurzeln mit floats: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0439b/BEHJADED.html Zum Auslesen empfehle ich Modbus, dafür brauchste am PC nur einen USB->UART->RS485 Wandler und für Python gibts dann Libs. So habe ich mit meinem Eigenbau Wirkleistungsmessgerät und einer Eigenbau E-Last einen Netzteiltester geschrieben wo am Ende ein schöner Graph des Wirkungsrgrads des Netzteils rausfällt. Hier dann noch Lesestoff zur Berechnung: https://de.wikipedia.org/wiki/Effektivwert https://en.wikipedia.org/wiki/Power_factor#Non-sinusoidal_components https://de.wikipedia.org/wiki/Blindleistung#Nichtsinusf%C3%B6rmige_Str%C3%B6me https://de.wikipedia.org/wiki/Scheinleistung#Scheinleistung_bei_nicht_sinusf%C3%B6rmigen_Gr%C3%B6%C3%9Fen https://de.wikipedia.org/wiki/Verzerrungsblindleistung https://de.wikipedia.org/wiki/Total_Harmonic_Distortion https://www.allaboutcircuits.com/technical-articles/the-importance-of-total-harmonic-distortion/ https://www.allaboutcircuits.com/technical-articles/understanding-thd-total-harmonic-distortion-in-power-systems/
Patrick L. schrieb: > welcher einen 12-Bit ADC mit 350 Kilosamples per > Second zur Verfügung stellt. Und welche Samplefrequnez BRAUCHST du? Kläre das erst mal, bis zu welcher Frequenz musst du die Oberwellen erfassen? Patrick L. schrieb: > Es soll das nötigste umgesetzt werden um eine Genauigkeit von 5% > hinzukriegen. Dann fang mal an mit Fehlerrechnung. Bei welchen Werten brauchst du die 5%. Bei 100% des möglichen Messbereichs oder bei 1% des max. Messbereichs? Wenn du das spezifiziert hast, dann kannst du dir Gedanken an die Hardware und die notwendige Rechenleistung machen, vorher ist das Zeitverschwendung.
Beitrag "Wirkleistungsmessgerät" Beitrag "3-Phasen Leistungsmessung mit STM32" https://www.google.com/search?q=avr+effektiv+230V+netzspanAnung+leistung+messen+mikrocontroller.net
Udo S. schrieb: > Und welche Samplefrequnez BRAUCHST du? > Kläre das erst mal, bis zu welcher Frequenz musst du die Oberwellen > erfassen? > Wenn ich bis zu 39ten Oberwelle messen möchte, bräuchte ich nach Nyquist eine Samplefrequenz von 4kHz. Sollte doch mit 350 kSps kein Problem sein? > Dann fang mal an mit Fehlerrechnung. Bei welchen Werten brauchst du die > 5%. Bei 100% des möglichen Messbereichs oder bei 1% des max. > Messbereichs? > > Wenn du das spezifiziert hast, dann kannst du dir Gedanken an die > Hardware und die notwendige Rechenleistung machen, vorher ist das > Zeitverschwendung. 5% Toleranz der Eingangsleistung Also ca. 2,4-2,5 % des Eingangsstroms und 2,4-2,5% der Eingangsspannung. Die 230V Eingangsspannung werden mithilfe eines Spannungsteilers erfasst. Nur beim Netzstrom tu ich mir noch schwer. Shunt wäre am einfachsten, es fehlt dann aber eine galvanische Trennung, Die erste negative Halbwelle zerschießt mir den µC... Shunt -> PGA -> ADC Energy Metering ICs messen via Shunt differentiell mit einem ADC und mehreren OPs..verstehe das leider nicht richtig. Andere Möglichkeit wäre ein Hall-Sensor der gleiche eine galvanische Trennung bietet oder ein digitaler PFC der die Strom und Spannungswerte sowieso misst und via EEPROM und I²C/SPI zur Verfügung stellen kann. Oder eben ein einzelnes Energy Metering IC Hat jemand eine Netzstrommessung via Shunt + galvanischer Trennung umgesetzt? Sägezahnsignal ---- + |\ | |- PWM Signal -> Optokoppler -> Tiefpass -> µC Netzstromsignal ---- - |/ wäre doch auch eine Möglichkeit? Hat jemand noch Ideen?
Zur Spg. Messung siehe Bild als ein Beispiel. ADC im Diff. Eingangsmodus, die Vref/2 über einen internen DAC erzeugen, wenn dieser einen Ausgangs OP aufweißt der auch etwas Strom treiben kann reicht das. Sonst noch einen ext. Buffer. Spg. Teiler/Filter nach deinem Bedarf anpassen. Ist deine Schaltung am Gnd geerdet? ggf. auch erst durch die Kommunikation zum PC? Versorgung der Schaltung durch L/N immer sichgergestellt "Phasenrichtig"? Durch die "differenzielle" Messung oben über weite Bereiche i.r. aber auch dann kein Problem. Zur Strommessung nimm was Hall Effekt basierendes, z.b. LEM HLSR-xxP. Per Spg.Teiler am Ausgang auf deine Pegel für den ADC bringen. Auch hier ggf. differenziell Messen mit der VOut(+) und VRef(-) des HLSR anden ADC Eingängen, dann kompensiert man dessen VRef drifts. So als ein weiteres Beispiel. Achja für deine statistischen Messwerte ist eine FFT auch nicht nötig, das geht auch mit weit weniger Rechenleistung über entsprechende intervalle zu integrieren für die RMS Werte.
Plumbus schrieb: > Die Spannungs- und Stromverläufe werden abgetastet und am ADC > eingelesen (12 Bit). Die Momentanwerte beider Signale multipliziert > und gemittelt -> Wirkleistung Und das Produkt der Absolutwerte von Spannung und Strom ergibt die Scheinleistung. Ich kann da keine Wurzel erkennen. MfG Klaus
Das Produkt der "Effektivwerte" von U und I ist S. https://de.wikipedia.org/wiki/Effektivwert Da musst du dann schon ne Wurzel ziehen Beim rechnen von i(t) * u(t) bekommst du "P"(t) also den "Wirk"leistungsverlauf über die Zeit
mahh... "Wirk"leistungsverlauf ist hier blöd/missverständlich/falsch ausgedrückt, nennen wir es einfach Leistungsverlauf dessen mittel über ein Interval x die Wirkleistung in dem Interval ist. hier brauchts keine wurzel.
Ich kann die Wurzelphobie ohnehin nicht nachvollziehen. Wenn das in C programmiert wird, dann ist das ein simpler Aufruf von sqrt() bzw. sqrtf(). Denn eine libm wird es für die Zielarchitektur ja wohl geben. Eine andere Frage ist es dann, ob das auch schnell genug ist. Bei einem Cortex-M0+ wird es auf jeden Fall schon mal nicht in Hardware gehen. Aber das heißt nicht, daß es nicht trotzdem schnell genug sein kann.
FloMann schrieb: > Beim rechnen von i(t) * u(t) bekommst du "P"(t) > also den "Wirk"leistungsverlauf über die Zeit Und wenn du statt i(t) |i(t)| und statt u(t) |u(t)| nimmst, hast du die Scheinleistung. MfG Klaus
Nicht wirklich oder hab ich da jetzt einen Knoten im Hirn. Im Anhang drei fälle (0°/45°/90°) von P(t) und ABS(P(t)) und deren mittel über eine Periode (20ms = 100 Werte a 0,2ms) UEff und IEff ist jeweils 1, S wäre dann auch immer 1VA.. Was man machen kann U "oder" I über einen Filter zuvor um 90° zu verschieben dann bekommt man die Blindleistung. Das ist aber vom Rechenaufwand deutlich mehr als eine simple Wurzel am Ende eines Messintervall
Axel S. schrieb: > Ich kann die Wurzelphobie ohnehin nicht nachvollziehen. Wenn das in C > programmiert wird, dann ist das ein simpler Aufruf von sqrt() bzw. > sqrtf(). Denn eine libm wird es für die Zielarchitektur ja wohl geben. Vor allem gibts im Internet auch Code für integer Wurzeln: http://www.codecodex.com/wiki/Calculate_an_integer_square_root Zitat: --- For an explanation as to how the previous and following algorithms work, see Integer Square Roots by Jack W. Crenshaw (http://www.embedded.com/98/9802fe2.htm) - specifically, Figure 2 of that article. The fastest integer square root C algorithm yet is possibly below --- Zitat Ende Wird von einer FPU aber komplett abgeledert (wenn vorhanden).
Die Wurzel Rechnung vor allem bei Integer ist kein wirkliches Problem. Ich hatte das hier: https://www.mikrocontroller.net/articles/AVR_Arithmetik#Wurzel mir mal für einen 8051 "portiert". Auf einem EFM8LB @72Mhz brauchte das mit 32bit und Runden irgendwo zwischen 10 und 12"µs". Da brauchte auf selber Platform das dividieren von 32bit Zahlen i.r. länger. Es reicht ja auch am Ende des Intervals(z.b. Netzperiode 20ms) einmal die Wurzel zu ziehen für jeweils die Effektivwerte U,I und ggf. für Q über Q= Sqrt(S²-P²) also dann drei mal. Da sehe ich nicht wo ein M0 ein problem haben könnte.
Patrick L. schrieb: > Energy Metering ICs messen via Shunt differentiell mit einem ADC und > mehreren OPs..verstehe das leider nicht richtig. nicht einem ADC, sondern zwei ADCs. Die allgemeine Form der Wirkleistung ist das Integral des Produkts der Augenblickswerte von Strom und Spannung über eine Periode, und das geteilt durch die Periodendauer. Und dafür musst Du Strom und Spannung gleichzeitig messen, weil Du sonst einen Fehler hineinbringst. Die üblichen Metering-Bausteine machen das so. Schau Dir das an: https://master-nq.webp2.cirrus.com/products/cs5490/ Bei mir sieht das so aus (siehe Bild). Das funktioniert dann auch. fchk
Die Ansprüche sind ja jetzt nicht exorbitant mit 5%, wobei ich jetzt noch nicht weiß auf Fullscale oder Messwert und wenn letzteres über welche Dynamik des Messbereich hinweg. Wenn er jetzt seine Abtastung zb. so gestaltet das zwischen dem I und U Sample z.b 20us liegen macht das auf eine 50hz Netzperiode eine Verschiebung um 0,36°. Fehler der Grundwelle ist damit vll. Noch tollerabel. Bsp: Bleiben wir bei 1V, 1A und absolut betrachtet mit: 0° -> P = 0,99998W, Q = 0,006VAr (1W/0VAr) 45° -> P = 0,70265W, Q = 0,71154VAr (0,70711W/VAr) 90° -> P = 0,006W, Q = 0,99998VAr Nehmen wir 500Hz dann sind es 3,6° 0° -> P = 0,998W, Q = 0,06VAr 45° -> P = 0,661W, Q = 0,750VAr 90° Spar ich mal. Netzspannung ist dominierend 50Hz und Wirkleistung gibt es nur bei fu = fi. Hält sich die verschiebe Blindleistung (von der Grundwelle) in Grenzen Zb. Phi < 70° bleibt der Fehler auf die Erwartung von P unter 2%(Grundwelle). Mit S= U×I und Q= Sqrt(S^2 - P^2) bekommt man noch eine Recht brauchbare Gesamt Blindleistung ( Verschiebung und Verzerrung). Kommen halt noch die weiteren üblichen Fehler obendrauf. Also ja ein Kanal Sample Delay ist nicht schön für den Fehler aber je nach Anspruch, was man für Signale i(t) und u(t) bei seinem Gerät erwartet und welche Werte einem besonders wichtig sind eventuell auch noch tollerabel. Aber ja wenn möglich sind 2 Adc's schon besser. Es gibt im Prinzip auch Genug Power Monitor ICs die alles was nötig ist mitbringen und nicht die Welt kosten.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.