Forum: Mikrocontroller und Digitale Elektronik Kapazitätsmessung mit Interrupt wie am sinnvollsten?


von Svenja (Gast)


Lesenswert?

Hallo,
ich will den Strom und die Ah, also Kapazität messen über einen 
Interrupt.
Wie macht man das am geschicktesten?
In der Interruptroutine alle 100ms den ADC Wert als WORD erfassen und 
aufsummieren?

Oder immer messen wann immer zeit ist, und nur beim INT aufsummieren?

Und erst am ende alles ist Float umrechnen und dann als String?
Oder besser gleich mit Float arbeiten?

von Amateur (Gast)


Lesenswert?

Du kannst die Geschwindigkeit eines Autos, an der Verformung, beim 
Aufprall auf eine Mauer, messen.

Ich würde aber sagen, dass das nicht der beste Weg ist.

Wie Du das mit einem Interrupt gehen soll weißt Du wohl selber nicht. 
Damit bist Du aber in guter Gesellschaft.

von Nop (Gast)


Lesenswert?

Svenja schrieb:
> ich will den Strom und die Ah, also Kapazität messen über einen
> Interrupt.

Interrupts sind keine Meßinstrumente. Du hast auch nicht gesagt, unter 
was für Umständen Dein Interrupt überhaupt auslösen soll.

> In der Interruptroutine alle 100ms den ADC Wert als WORD erfassen und
> aufsummieren?

Welchen ADC-Wert? Was ist denn am ADC-Eingang überhaupt angeschlossen? 
Poste mal eine Schaltskizze.

> Und erst am ende alles ist Float umrechnen und dann als String?
> Oder besser gleich mit Float arbeiten?

Welcher Controller? Hat der überhaupt eine FPU? Generell würde ich von 
float abraten und je nach Anzahl der Meßwerte und der Meßdauer mit 
uint32_t oder uint64_t rechnen. Eventuell kann man die Meßwerte auch 
vorher schon etwas runterskalieren, weil die untersten ein bis zwei Bits 
sowieso nur Rauschen sind.

von Svenja (Gast)


Lesenswert?

??!?
Da steht doch 100ms  also logischerweise ein 100ms Interrupt...ist doch 
wohl der übliche Weg?!
Wozu eine Skitzeß1
hä?!
Ich messe einen ADC Wert und, den Strom, und will nun die Ah berechnen 
wozu benötigt ihr da Schaltpläne?!?
ICh frage lediglich wie man das mit dem code am besten realsiert?
Also alle 100ms den ADC Wert abfragen oder nur die Werte kommuleiren 
innerhalt der INT Routine


Völlig egal welcher Controller!!
Rauschen tut hier nichts.
Der Atmega32 hat absolut stabiel Werte hier wackelt nicht mal ein 
Digit.,..aber darum geht es auch nicht

von Peter D. (peda)


Lesenswert?

Svenja schrieb:
> Oder immer messen wann immer zeit ist, und nur beim INT aufsummieren?

Wie willst Du damit auf Ah kommen?
Die Messungen müssen natürlich in einem konstanten Zeitintervall 
erfolgen und zwischen 2 Messungen darf sich der Strom auch nur wenig 
ändern.

von Steve (Gast)


Lesenswert?

"Die Messungen müssen natürlich in einem konstanten Zeitintervall
erfolgen"

ähmm...ja...und zwar alls 100ms?!
Und der Strom darf sich natürlich ändern wie er lustig ist sonst wärs ja 
irgendwie blöd haha

von Ignaz (Gast)


Lesenswert?

Svenja schrieb:
> ist doch
> wohl der übliche Weg?!
> Wozu eine Skitzeß1
> hä?!

Wenn du dich eh schon so gut auskennst, wozu fragst du dann Leute, die 
dich auch noch mit Gegenfragen nerven?

Oh mann...

Aus deinem Text ist die Unwissenheit in Sachen µC deutlich zu erkennen.
Wenn du also hier Hilfe suchst, dann würde ich mal einen anderen Ton 
anschlagen und präzise Angaben über den gesamten Kontext machen.
Ein Frauenname-Pseudonym ersetzt weder vernünftig formulierte Fragen 
noch Netikette.

von Svenja (Gast)


Lesenswert?

Hoffnungslos viel Blabla aber wieder nichts brauchbares..
"Unwissenheit in Sachen µC deutlich zu erkennen."
z.B. weil??
Und ja, deshalb Frage ich ja Du Nase.
Ich gebs auf, völlig nutzlos hier eine simple Frage zu stellen.

Ignaz: Dein Kommentar enthielt nur blabla aber keinerlei Inhalt, warum 
hälst Du dich dann nicht aus der Diskussion raus?!

von Jens W. (jensw)


Lesenswert?

Hallo,

das Problem ist nicht der Controller, sondern Basics.

Ich verstehe das so:
Du misst alle 100ms eine Stromwert.
Wenn du 10 Werte aufsummiert hast, dann bist du bei As. Mach das noch 
3600 mal länger und du bist bei Ah.
Das kannst du dir alleine durch die Einheiten herleiten.

Wenn du alle Werte aufsummierst hast du dann schon das Integral vom 
Strom über die Zeit.

Wenn die Werte hier sehr stark schwanken, dann leidet die Genauigkeit. 
Aber nur du kannst wissen ob das in deiner Anwendung weh tut oder nicht.

Gruß, Jens

von Svenja (Gast)


Lesenswert?

Danke,
ja die Werte können durchaus stärker schwanken.
Wie sollte man es dann machen?
Dir Frage war ja nun noch..messe ich einfach bei jedem Durchgang den 
Strom und integriere das bei jedem INT also 100ms, oder besser bei jedem 
INT also 100ms messen.
Ich muss zwei Stromwerte erfassen bei 2Mhz Systemtakt

von Dietrich L. (dietrichl)


Lesenswert?

Svenja schrieb:
> ja die Werte können durchaus stärker schwanken.

Die Frage ist nicht wie stark sie schwanken, sondern wie schnell.

> Wie sollte man es dann machen?

Entweder
- häufiger Messen (Abtasten)
- Tiefpass vorschalten
Am besten ist wahrscheinlich eine Kombination von Beidem.

Gruß Dietrich

von M.A. S. (mse2)


Lesenswert?

Svenja schrieb:
> Hoffnungslos viel Blabla aber wieder nichts brauchbares..
Es ist ein Zeichen mangelnder Intelligenz, Fragen auf die Art und Weise 
zu stellen, wie Du es getan hast. Du allein weißt, was Du machen willst 
und was Dein Problem dabei ist.

"Ich will den Abstand messen und den Durchmesser, wie mache ich das am 
besten? Er den Winkel und dann die Paralaxe? Alles in int oder float? 
Oder lieber gleich als Text?"
Ohne die Information, dass ich Abstand und Durchmesser des Jupiter 
messen will, käme mir vielleicht jemand mit dem Vorschlag: 'nimm doch 
einfach einen Zollstock'. Und darüber hätte ich dann auch kein Recht, 
mich zu wundern oder gar aufzuregen.


Svenja schrieb:
> Ignaz: Dein Kommentar enthielt nur blabla aber keinerlei Inhalt, warum
> hälst Du dich dann nicht aus der Diskussion raus?!
Ignaz hat einfach nur Recht!


Svenja schrieb:
> Ich gebs auf, völlig nutzlos hier eine simple Frage zu stellen.
Deine beste Idee heute. Tschüss!

: Bearbeitet durch User
von A. S. (Gast)


Lesenswert?

Wenn Du alle 100ms misst, dann musst Du dafür sorgen, dass keine Signale 
größer 5 Hz durch den Eingangsfilter kommen. Bei einem Einfachen 
Tiefpass mit R-C-Glied brauchst Du ein Tau von >1s. Hört sich erstmal 
viel an, ist jedoch mit den üblichen High-Side-Strom/Strom-Wandlern 
relativ einfach machbar.

Dann bekommst Du 10 AD-Werte pro Sekunde, z.b. 200 = 2mA. Diese solltest 
Du als Integer aufaddieren (größtes Format, also z.B. unsigned long), 
ggf. Zweistufig. Wenn Deine Schaltung z.B. ergibt, dass ein Zahlenwert 
von 478657 einer mAh enstpricht:
1
#define MAH_VALUE 478657
2
3
4
ULong0+=AD_Wert;
5
if(ULong0 > MAH_VALUE)
6
{
7
   mAhCount++;
8
   ULong0-=MAH_VALUE;
9
}

von Axel S. (a-za-z0-9)


Lesenswert?

Jens W. schrieb:
> Du misst alle 100ms eine Stromwert.
> Wenn du 10 Werte aufsummiert hast, dann bist du bei As.

Nein.

Wenn man die 10 Meßwerte für den Strom, die man über eine Sekunde 
gewonnen hat, einfach aufsummiert, dann rechnet man das zehnfache der 
verschobenen Ladung in As aus. Denn jeder Meßwert steht für ein 
Intervall von 100ms = 0.1s. Korrekt müßte man jeden Meßwert mit 0.1 
multiplizieren und die Produkte aufsummieren. Oder eben doch erst 
summieren und dann bei passender Gelegenheit durch 10 teilen.

von Jakob (Gast)


Lesenswert?

Leider hat Svenja recht!
Lauter dusslige Kommentare!

Ein Hinweis hätte gereicht:
Der Messzyklus und die Messgenauigkeit muss dem zeitlichen
Verlauf des Stromflusses angemessen sein - schon kann man die Ah
mit praktisch brauchbarer (Fehler << 10%) Genauigkeit erfassen.

von Wolfgang (Gast)


Lesenswert?

Steve schrieb:
> ähmm...ja...und zwar alls 100ms?!
> Und der Strom darf sich natürlich ändern wie er lustig ist sonst wärs ja
> irgendwie blöd haha

Nein, darf er nicht. Lies dir mal etwas über das Abtasttheorem durch.
https://de.wikipedia.org/wiki/Nyquist-Shannon-Abtasttheorem

von Nop (Gast)


Lesenswert?

Wolfgang schrieb:
> Nein, darf er nicht. Lies dir mal etwas über das Abtasttheorem durch.

Und genau deswegen hatte ich ganz oben nach ner Schaltskizze gefragt. 
Aber "Svenja" weiß es natürlich besser. NOT.

von Jens W. (jensw)


Lesenswert?

@Axel Schwenke:

Ja da hast du Recht. Man muss die Werte nach dem Aufsummieren noch 
gewichten.
Also wenn ich immer 200mA Messe habe ich nach einer Sekunde 200mAs.
Durch einfaches Aufsummieren kommt man aber auf den Wert 2000 (also 10 
Werte). Da muss man noch mit der Abtastzeit multiplizieren, also mit 
0,1s. Dann stimmt es wieder.

Es ist ein mathematisches Problem und hat mit dem verwendeten Controller 
eigentlich nichts zu tun. Das Problem kann man leicht mit einer 
Beispielrechnung erledigen.

Gruß, Jens

von A. S. (Gast)


Lesenswert?

Jens W. schrieb:
> Man muss die Werte nach dem Aufsummieren noch gewichten.
gewichten ist hier der falsche Begriff, eher z.B. skalieren

> Also wenn ich immer 200mA Messe habe ich nach einer Sekunde 200mAs.
> Durch einfaches Aufsummieren kommt man aber auf den Wert 2000 (also 10
> Werte). Da muss man noch mit der Abtastzeit multiplizieren, also mit
> 0,1s. Dann stimmt es wieder.
Ich glaube hier ist es wichtig, die notwendigen Berechnungen nicht im 
Controller zu machen, sondern auf Papier.

1) Umrechnung von AD-Werten in mA (z.B. 255 -> 17mA)
2) Skalierung in mAh, z.B. 17mA*0,1s = 1.7mAh

Zumal Schritt 1 ja meist viele Einflussfaktoren im Schaltplan hat. Die 
Schritte sind dann:


 - Ganzzahlig die Rohwerte addieren (keine Skalierung zwischenzeitlich)
 - Eine sinnvolle Zielgrenze für eine Messeinheit festlegen, berechnen 
und ggf. auch kalibrieren (z.B. 473547 = 1mAh)
 - bei Erreichen die Messeinheit inkrementieren und den Akkumulator um 
diesen Betrag zu reduzieren,  *nicht auf 0 setzen!* (wie oben 
beschrieben)

Da hier z.B. pro Tag rund 1Mio Messungen gemacht werden, ist es wichtig, 
keine Rundungen oder Signifikanzprobleme zu haben.

Ich denke, dass genau darauf die Frage der UPin abzielte

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
Noch kein Account? Hier anmelden.