Kapazitätsmessung mit Interrupt wie am sinnvollsten?

Gast #4753606
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?
Gast #4753619
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.
Gast #4753665
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.
Gast #4753701
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
Gast #4753765
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
Gast #4753771
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.
Gast #4753786
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?!
#4753795
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
Gast #4753853
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
#4753927
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!
Gast #4754082
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
}
#4754282
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.
Gast #4754338
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.
#4754582
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
Gast #4755051
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

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