Stromverbrauch via Mikrocontroller ermitteln

Gast #7011701
Lesenswert?

Hallo,

via Mikrcontroller (A/D) Wandler kann ich den Strom im Bereich >1A bis 
ca. 50A messen.

Dieser Strom wird nach jedem Loop-Durchgang ermittelt.
Wie berechne ich jetzt am genauesten den Stromverbrauch über eine 
bestimmte Zeit?

Ist es falsch quasi nach jedem Loop-Durchgang den vorherigen Stromwert + 
aktuellen Stromwert zusammenzurechnen und geteilt durch 2 um den 
aktuellen Durchschnittsstrom zu ermitteln, und um dann quasi zu jedem 
Zeitpunkt den Stromverbrauch berechnen zu können?

Danke
#7011724
Lesenswert?

epika schrieb:
> Ist es falsch quasi nach jedem Loop-Durchgang den vorherigen Stromwert +
> aktuellen Stromwert zusammenzurechnen und geteilt durch 2 um den
> aktuellen Durchschnittsstrom zu ermitteln, und um dann quasi zu jedem
> Zeitpunkt den Stromverbrauch berechnen zu können?

Jain?

Du kannst den Strom mit einem gleitenden Filter oder sonstwie filtern, 
wie es für deine Anwendung angemessen ist. Mittelwert über 2 Samples ist 
vielleicht etwas wenig, je nach Anwendung.

"True RMS" wäre dann wohl so schnell wie möglich, also einfach Strom zum 
Samplezeitpunkt mal Zeit zwischen zwei Samples.

Je nachdem, was du vor hast, kann es sinnvoll sein oder auch nicht.

Und um kleinlich zu sein: Strom*Zeit ist kein Stromverbrauch, sondern 
eine Ladungsmenge. Was landläufig als "Stromverbrauch" bekannt ist, 
würde noch die Spannung beinhalten, also Leistung*Zeit. Da gilt für die 
Filter aber auch das, was sinnvoll für deine Anwendung ist.
Gast #7011800
Lesenswert?

Das du die Bandbreite des Eingangssignals begrenzt (über einen 
Tiefpass)?

Dann weißt du die minimal notwendige Abtastrate. Ob die ausreicht, hängt 
von system ab, also wie der Stromverlauf, den du messen möchtest 
überhaupt aussieht (insbesondere die Bandbreite. Mitteln funktioniert 
bei Gleichstrom wunderbar, bei (zu schnellem) Wechselstrom vielleicht 
nicht mehr.
Gast #7011820
Lesenswert?

epika schrieb:
> Wie berechne ich jetzt am genauesten den Stromverbrauch über eine
> bestimmte Zeit?

epika schrieb:
> oder sollte ich die Stromwerte aufaddieren und die Anzahl Werte zählen
> und nach dem gewünschten Zeitpunkt die Summe geteilt durch die Anzahl
> Werte?

Was ist Dein Ziel? Also welchen Wert, welche Einheit erwartest Du?

 * Ah (Amperestunden wie bei einer Batterie)?
 * Wh (Wattstunden, das, was wir gemeinhin als "Stromverbrauch" 
bezeichnen)?
 * Ampere? Also einen Durchschnittsverbrauch?

Wenn es Ah oder Wh sind, dann ist Integration notwendig und dafür eine 
Zeit.

Für Wh auch die Spannung, falls nicht konstant.

Es kommt auf den Einsatzfall an, ob z.B. negative Ströme negativ gezählt 
werden. Darum solltest Du schreiben, was Du erreichen willst.
#7011822
Lesenswert?

epika schrieb:

> Wie berechne ich jetzt am genauesten den Stromverbrauch über eine
> bestimmte Zeit?

Das, was Du Deinem Stromversorger bezahlst, ist nicht der Strom (A), 
sondern die elektrische Arbeit in Wh bzw kWh, also Wirkleistung über die 
Zeit aufsummiert. Für die Wirkleistung musst Du nicht nur den Strom, 
sondern auch die Spannung messen.

https://de.wikipedia.org/wiki/Wirkleistung

fchk
Gast #7011850
Lesenswert?

Eins N00B schrieb:
> Das du die Bandbreite des Eingangssignals begrenzt (über einen
> Tiefpass)?
>
> Dann weißt du die minimal notwendige Abtastrate.

Im praktischen Leben gibt es leider keine Rechteckfilter. Bei der Wahl 
der Abtastrate kommt es daher immer auf die Bandbreite des Filters, die 
Steilheit des Filters, das Spektrum des Eingangssignal und die 
zulässigen Fehler an.
Gast #7011875
Lesenswert?

Was es gibt sind schnelle Stromwandler, 2mA zu 2mA Wandler für die 
Spannungsmessung und DsPik33 mit simultan 12bit AD Wandlern im Msample 
Bereich. Da winkt eine brauchbare RMS Berechnung schon dank des DSP und 
der fetten Hardware Multiplizier.

MfG
Michael
Gast #7012678
Lesenswert?

Hallo,

sorry, da waren wohl zu wenig Informationen vorhanden, aber ihr habt mir 
schon sehr weitergeholfen.
Ich messe Gleichstrom zwischen 1A und 50A. Messen möchte ich den 
Ah-Verbrauch (Akku / Ebike).

Angenommen die Strommessung erfolgt in gleichen Zeitabständen (z.B. alle 
10ms), dann sehe ich zwei Möglichkeiten den "Durchschnittsstrom" z.B. 
nach jeder Minute zu ermitteln:

1) Immer letzter Stromwert + aktueller Stromwert geteilt durch 2, und 
nach einer Minute diesen "Durchschnittsstrom"-Wert geteilt durch 60.

2) Oder ich addiere alle 10ms die Stromwerte und teile nach einer Minute 
durch 6000 und setze die Summe wieder auf 0 zurück..

Irgendwie bin ich mir nicht sicher ob und wenn ja, welches von beiden 
korrekt ist?

Danke
Gast #7012689
Lesenswert?

epika schrieb:
> Irgendwie bin ich mir nicht sicher ob und wenn ja, welches von beiden
> korrekt ist?

Kommt drauf an, ob du einen gleitenden Mittelwert haben willst oder 
einen blockweisen.

Du kannst auch, wenn du alle 10ms misst und den Mittelwert über die 
letzte Sekunde haben willst, einen Puffer uber 100 Werte aufbauen, und 
die Summe mitführen: erst den letzten Wert von der bosherigen Summe 
subtrahieren, dann den neuen Wert an seiner Stelle in den Puffer 
schreiben, und der Mittelwert ist die Summe/100.
Gast #7012753
Lesenswert?

MaWin schrieb:
> Du kannst auch, wenn du alle 10ms misst und den Mittelwert über die
> letzte Sekunde haben willst, einen Puffer uber 100 Werte aufbauen, und
> die Summe mitführen: erst den letzten Wert von der bosherigen Summe
> subtrahieren, dann den neuen Wert an seiner Stelle in den Puffer
> schreiben, und der Mittelwert ist die Summe/100.

wieso nicht einfach all 100 Werte summieren, dann nach einer Sekunde die 
Summe/100 ? Ich verstehe den Sinn der Subtraktion gerade nicht :-/ ...
Gast #7012780
Lesenswert?

Energie = 0 (kWh)
Strom =0 (A)
Spannung = 0 (V)
Zeit1 = time(now) (sec)
Zeit2 = 0 (sec)
Differenz = 0 (sec)
While(1)
{
Spannung = (lese ausm shared Momery oder Controller)
Strom = (lese ausm shared Momery oder Controller)
Zeit2 = time(now)
If(Zeit2>Zeit1)
{
Differenz (sec) = Zeit2-Zeit1
Zeit1= Zeit2
Energie = Energie + ((Spannung*Strom)*(Differenz/3600))
Printf...
}
}

Suchst du sowas?
Gast #7012797
Lesenswert?

Hmm schrieb:
> Energie = 0 (kWh)
> Strom =0 (A)
> Spannung = 0 (V)
> Zeit1 = time(now) (sec)
> Zeit2 = 0 (sec)
> Differenz = 0 (sec)
> While(1)
> {
> Spannung = (lese ausm shared Momery oder Controller)
> Strom = (lese ausm shared Momery oder Controller)
> Zeit2 = time(now)
> If(Zeit2>Zeit1)
> {
> Differenz (sec) = Zeit2-Zeit1
> Zeit1= Zeit2
> Energie = Energie + ((SpannungStrom)(Differenz/3600))
> Printf...
> }
> }
> Suchst du sowas?

Sorry eben gesehen du suchst Ah

"k" weg (war eh zu viel)
Und Spannung weg
Gast #7012846
Lesenswert?

Für die "Verbrauchsanzeige" eines E-Bikes erscheint es mir mehr als 
ausreichend, diese alle 5 sec ... 5 min zu aktualisieren. Viel öfters 
würde ich eh nicht auf drauf schauen. Wollte ich mir so was basteln (die 
Sinnhaftigkeit mal außen vor), wäre die Aktualisierungsrate 
parametrisierbar bzw. sogar am fertigen Gerät einstellbar.

10 "Verbrauchsmessungen" pro Sekunde würden für mein Gerät ausreichen, 
denn viel dynamischer sind weder die von mir gefahrenen Strecken noch 
mein Tretstil.

Den Aufwand einer Spannungsmessung würde ich nicht treiben. Meine 
"Verbrauchsanzeige" würde also gemittelte "AMPERE" anzeigen (und keine 
"WATT").

Es könnte aber durchaus sein, dass mich eher der verbliebene 
"Tankinhalt" interessiert. Liegt aber auch daran, dass ich das vom 
V-Bike so gewohnt bin.

just my 2ct
Gast #7012864
Lesenswert?

Wolfgang schrieb:
> Vielleicht willst du nicht nur alle Sekunde den aktuellen Mittelwert
> wissen, sondern öfter.

sorry, irgendwie verstehe ich trotzdem nicht, wieso ich das so 
subtrahieren muss.

Wenn ich jede Sekunde, bzw. besser nach jeder Minute den 
Durchschnittwert ausrechne mit Summieren aller Werte und teilen durch 
die Anzahl Werte (d.h 6000 Werte, wenn Messung jede 10ms für 1min), 
weiss ich den AmpereDurchschnitt welcher ich dann in Ah umrechne und von 
der aktuelle AkkuAh abziehe...

ist das falsch?
Gast #7012889
Lesenswert?

Georg M. schrieb:
> Man kann mit Excel experimentieren und feststellen, welche Verfahren zu
> falschen Ergebnissen führen.

ich hatte dies probeweise schon mit 10 Werten gemacht, der Unterschied 
zwischen beide Verfahren war ca. 2..3A, so deshalb bin ich mir unsicher 
was jetzt korrekt ist...
Gast #7013006
Lesenswert?

Georg M. schrieb:
> Man kann mit Excel experimentieren und feststellen, welche Verfahren zu
> falschen Ergebnissen führen.

tja, meine ursprüngliche Frage ist damit noch nicht beantwortet, deshalb 
habe ich es im Bild im Anhang via Excel veranschaulicht. So logisch und 
einfach finde ich es nämlich nicht. Beide Ergebnisse scheinen 
plausibel...

Was ist richtig A) oder B) oder gar nichts von beidem ?

Danke
Angehängte Dateien:
Gast #7013050
Lesenswert?

Nerd 8. schrieb:
> Noch ein Wink mit dem Zaunpfahl:
> https://de.wikipedia.org/wiki/Gleitender_Mittelwert

Georg M. schrieb:
> Plausibel ist nur der Mittelwert per Definition.
> https://de.wikipedia.org/wiki/Arithmetisches_Mittel

Oh god ich werde verrückt, muss eine Antwort auf meine Frage so komplex 
sein? Ist A) oder B) richtig, oder nichts von beidem?

Wenn gar nichts von beidem, werde ich versuchen diese zwei komplexen 
links zu studieren....

{\displaystyle m_{\text{MA}}^{(n)}(t)={\frac {1}{n}}\sum 
_{i=0}^{n-1}x(t-i)}

Und überhaupt, wie soll ich so eine Formel in C für ein Mikrocontroller 
programmieren?
#7013054
Lesenswert?

epika schrieb:
> Oh god ich werde verrückt, muss eine Antwort auf meine Frage so komplex
> sein? Ist A) oder B) richtig, oder nichts von beidem?

Etwas Eigeninitiative ist schon erforderlich und hier auch erwünscht.
Leite zuerst den mathematisch korrekten Weg ab und setzte dann diesen in 
ein Programm um.

So schwer ist das jetzt auch wieder nicht.. :-/
Gast #7013055
Lesenswert?

Die Letzer-Wert-plus-Aktuellem-durch-2-Methode ist falsch. Damit baust 
du dir einen IIR-Filter. Eine Integration, was du brauchst, ist das 
nicht.
Bei deiner Methode einfach mal die Klammern auflösen und schauen, zu 
welchen Anteilen der Messwert in das Ergebnis eingeht, du wirst 
feststellen, dass der aktuelle Wert zu 1/2 eingeht, der letzte zu 1/4, 
der vorletzte zu 1/8, der vorvorletzte zu 1/16 usw.

Eine Integration ist einfach die Addition aller Werte. Also Methode A. 
Eigentlich ganz einfach. Wichtig ist die Wahl der Variablen, nicht, dass 
die Summe zu groß wird und es zum Überlauf kommt. Aber die Batteriegröße 
ist ja bekannt.
Gast #7013080
Lesenswert?

Maxe schrieb:
> Die Letzer-Wert-plus-Aktuellem-durch-2-Methode ist falsch. Damit baust
> du dir einen IIR-Filter. Eine Integration, was du brauchst, ist das
> nicht.
> Bei deiner Methode einfach mal die Klammern auflösen und schauen, zu
> welchen Anteilen der Messwert in das Ergebnis eingeht, du wirst
> feststellen, dass der aktuelle Wert zu 1/2 eingeht, der letzte zu 1/4,
> der vorletzte zu 1/8, der vorvorletzte zu 1/16 usw.
>
> Eine Integration ist einfach die Addition aller Werte. Also Methode A.
> Eigentlich ganz einfach. Wichtig ist die Wahl der Variablen, nicht, dass
> die Summe zu groß wird und es zum Überlauf kommt. Aber die Batteriegröße
> ist ja bekannt.

Ok super danke, das hilft sehr. Also in dem Fall ist "Integration" wohl 
gleichzusetzen mit arithmetischen Mittelwert...

Nerd 8. schrieb:
> Ein ganz banales Beispiel für einen gleitenden Mittelwert:
> Beitrag "Re: gleitender Mittelwert im Atmel"

ob jetzt gleitender Mittelwert oder arithmetischer Mittelwert für die 
Ermittlung des Ah Verbrauch bei einem EBike sinnvoll ist, muss ich mir 
wohl selber beantworten.

Ok, also herzlichen Dank für alle Beiträge, sehr hilfreich.
#7013107
Lesenswert?

epika schrieb:
> ob jetzt gleitender Mittelwert oder arithmetischer Mittelwert für die
> Ermittlung des Ah Verbrauch bei einem EBike sinnvoll ist, muss ich mir
> wohl selber beantworten.

Ich bin gerade der Meinung, das sich der arithmetischer Mittelwert 
besser eignet, da einfacher zu realisieren. Der arithmetischer 
Mittelwert * Zeitintervall ist bereits die elektrische Ladung. Diese 
dann für die gesamte Fahrt über aufsummiert ergibt die Gesamtladung.

Wenn du aber keine Anzeige des Mittelwerts brauchst sondern nur die Ah 
feststellen willst, dann ist das doch gar nicht notwendig. Dann einfach 
Stromwerte aufsummieren und fertig. Durch den Zeitintervall zwischen den 
Stromwerten und dem jeweiligen Messwert weist du bereits alles.

Z.B. Zeitintervall 1s, also in einer Stunde 3600 Messwerte und das 
entspricht dann As. Das lässt sich einfach in Ah umrechnen ;)

Das setzt natürlich voraus, dass die Abtastung schnell genug ist. Aber 
das ist ein anderes Thema.
Gast #7013116
Lesenswert?

Dirk K. schrieb:
> Ich bin gerade der Meinung, das sich der arithmetischer Mittelwert
> besser eignet, da einfacher zu realisieren. Der arithmetischer
> Mittelwert * Zeitintervall ist bereits die elektrische Ladung. Diese
> dann für die gesamte Fahrt über aufsummiert ergibt die Gesamtladung.
>
> Wenn du aber keine Anzeige des Mittelwerts brauchst sondern nur die Ah
> feststellen willst, dann ist das doch gar nicht notwendig. Dann einfach
> Stromwerte aufsummieren und fertig. Durch den Zeitintervall zwischen den
> Stromwerten und dem jeweiligen Messwert weist du bereits alles.
>
> Z.B. Zeitintervall 1s, also in einer Stunde 3600 Messwerte und das
> entspricht dann As. Das lässt sich einfach in Ah umrechnen ;)
>
> Das setzt natürlich voraus, dass die Abtastung schnell genug ist. Aber
> das ist ein anderes Thema.

mm ja genau, ich messe und summiere aktuell alle 10ms und berechne den 
Mittelwert jede Minute.

Also Summe der Werte / 6000 (60'000ms / 6000 = 10ms) und dann weiss ich 
den Stromverbrauch pro Minute und für Ah einfach noch durch 60 teilen...
Gast #7013131
Lesenswert?

Nein, kein Mitteln! Richtig ist:

Summe der Stromwerte mal Meßintervall (hier 10ms) über die gesamte Zeit.

Dann erhältst du das, was du im ersten Post gesuchst hast:
"Wie berechne ich jetzt am genauesten den Stromverbrauch über eine
bestimmte Zeit?"
#7013161
Lesenswert?

epika schrieb:
> Also Summe der Werte / 6000 (60'000ms / 6000 = 10ms) und dann weiss ich
> den Stromverbrauch pro Minute und für Ah einfach noch durch 60 teilen...

Damit bekommst du einen Durchschnitt. Einheit ist [A] Ampere.
Du sucht aber die "verbrauchte" elektrische Ladung in [Ah] 
Amperestunden. Dann musst du bei der Rechnung auch auf diese Eineit(en) 
kommen. Also (Strom [A]  * Zeit [h oder s oder ms]!

KeinMitteln schrieb:
> Nein, kein Mitteln! Richtig ist:
>
> Summe der Stromwerte mal Meßintervall (hier 10ms) über die gesamte Zeit.
>
> Dann erhältst du das, was du im ersten Post gesuchst hast:
> "Wie berechne ich jetzt am genauesten den Stromverbrauch über eine
> bestimmte Zeit?"

THIS!

Idealisiert gibt dein AD-Wandler bereits das arithmetische Mittel über 
die 10ms an. Gehen wir davon nun einfach mal aus und vernachlässigen die 
möglichen Abweichungen falls dem nicht so ist.
Du summierst einfach ALLE Messwerte auf: SUM_A= SUM_A + Actual_A.
Das multiplizierst du mit dem Zeitintervall von 10ms: SUM_Ams = SUM_A * 
10[ms]
Das kannst du natürlich noch in Ah umrechnen, wenn du magst. 1h = 
3.600.000ms -> SUM_Ah = SUM_A * 10 /3600000.

Idealerweise siehst du dann noch eine Möglichkeit vor, SUM_A auf Null zu 
setzen, sonst wird es irgendwann unübersichtlich ;)
Gast #7013297
Lesenswert?

Dirk K. schrieb:
> Damit bekommst du einen Durchschnitt. Einheit ist [A] Ampere.
> Du sucht aber die "verbrauchte" elektrische Ladung in [Ah]
> Amperestunden. Dann musst du bei der Rechnung auch auf diese Eineit(en)
> kommen. Also (Strom [A]  * Zeit [h oder s oder ms]!

ui ja danke, da habe ich ein groben Überlegungsfehler gemacht.
Also nach einer Minute die Summe der Anzahl gemessenen Wert durch die 
Anzahl Werte zu teilen gibt immer noch A und nicht Amin oder sonst was..
Gast #7013872
Lesenswert?

epika schrieb:
> ui ja danke, da habe ich ein groben Überlegungsfehler gemacht.
> Also nach einer Minute die Summe der Anzahl gemessenen Wert durch die
> Anzahl Werte zu teilen gibt immer noch A und nicht Amin oder sonst was..

...aber dann mit 1/60 multipliziert sind dann Ah...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren