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?
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.
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.
??!? 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
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.
"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
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.
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?!
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
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
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
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
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 | }
|
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.
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.
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
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.
@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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.