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.
...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.
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.
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.