Archiv verlassen und diese Seite im Standarddesign anzeigen : Richtiger Umgang mit Variablen
Hallo,
ich habe ein Problem mit der Verarbeitung eines Analogwerts in Bascom.
Ich möchte anhand eines gemessenen Stromes die Ah ausrechnen und auf einem LCD darstellen.
Soweit, so gut.
Den Strom messe ich über einen shunt mit nachgeschaltetem OP.
Auch das Einlesen des AD funktioniert und die Umrechnung der Spannung nach Strom.
Meßbereich 150A bei 50mV vom Shunt.
Programmteil dazu:
Dim anain5 as integer
dim multipli5 as single
dim Ergebnis5 as string * 10
do
anain5 = getadc(4)
multipli5 = 150 / 1023
multipli5 = multipli5 * anain5
ergebnis5 = str(multipli5 , 4)
ergebnis5 = left(multipli5, 4)
locate 1,4
lcd ergebnis5, "A"
loop
end
So in etwa.....
Mein Problem ist nun, daß ich die Ah ausrechnen will.
Ich habe da auch schon mal rumprobiert, aber so richtig wills nicht funzen.
Hat jemand einen Vorschlag?
Bin mir nicht sicher, aber schätze ich muß nen Timer konfigurieren, gell?
Gruß
Jens
Ich denke um einen Timer kommst du nicht drum rum. Ah ist ja Strom mal Zeit, den Strom hast du, die Zeit musst du nun mit einem Timer messen bzw. feststellen. Wie du das machen kannst weiß ich grad nicht, dürfte aber mit ein bisschen nachdenken gar nicht so schwer sein.
Du könntest z.B. den Mittelwert deines Stroms während einer festgelegten Zeit ermitteln (z.B. eine Stunde :-D, das wär am einfachsten).
Viele Grüße,
William
Danke für die Antwort,
ja, das wäre es , aber ich möchte den Ah Wert permanent neu gerechnet am LCD darstellen.
Ich habe leider nicht genug Erfahrung im Umgang mit Bascom.
Bin dankbar für jede Antwort.
Gruß
Jens
Bin mir nicht sicher, aber schätze ich muß nen Timer konfigurieren, gell?
Ja, das ist wohl das Beste.
Beispiel: Eine Frequenz des Timers von 1Hz, in der ISR wird ein Flag "Messen" gesetzt, das Hauptprogramm stellt die Ahs nur dar. Wenn das Flag "Messen" erkannt wird, wird ein Unterprogramm zum Strommessen aufgerufen.
Die Berechnung der Ahs geschieht durch Aufsummierung der Sekundentiks multipliziert mit dem Strom.
Gruß Dirk
Du willst praktisch die geflossene Ladung messen? Sowas hab ich mal in nem Akkutester/Kapazitätsmessgerät gebaut. Prinzip: Lastwiderstand, die daran abfallende Spannung wurde gemessen.
Im Intervall von 10 sec wurden jeweils einzelne Spannungen gemessen. Unter der Annahme, dass die Spannungsänderun in diesem Intervall (recht klein) linear ist, ergibt sich als Durchschnittspannung einfach der Mittelwert der beiden Spannungen. Angenommen ich mess einmal 4,5 und einmal 4,7 V, dann ist der Mittelwert 4,6V.
Mit I = U/R komm ich dann auf den durch den Widerstand fliessenden Strom. Annahme: R = 0,1 Ohm, dann sinds 46A.
Da das Messintervall 10sec beträgt, einfaches "integrieren" des Stromes: 46A * 10sec = 460As = 0,127 Ah.
Danke für die Antworten,
ja, ich möchte einen Akkutester bauen.
Auf dem Analogeingang wird der von einem Shunt verstärkte Spannungsabfall eines Shunts gemessen (150A entspr. 50mV)
Die Messung soll im 1 Sekunden Takt laufen, d.h. jede Sekunde ein Stromwert, das entspricht den As. Diese widerum durch 3600 dividiert sind meine Ah.
Was bei mir nicht gelingt ist das vernünftige Aufaddieren der Stromwerte. Hat jemand dafür mal unter Berücksichtigung meines Codes von oben ein Codebeispiel? Muß ich den Timer wirklich nutzen, reicht dafür nicht das Abwarten mit waitms1000 wenn man die Zeit für Befehlsabarbeitung vernachlässigt?
Gruß
Jens
naja waitms 1000 bzw. wait 1 würde schon gehen, mit nem Timer wirds aber genauer. Nur die Frage ist halt: Ist der Rest der Schaltung so genau, dass Wait statt Timer das Ergebnis unzulässig stark verfälscht? Wenns (wie bei mir) nicht auf jedes einzelne Elektron ankommt, sondern nur darauf, ob ein 1700mAh-Akku noch 1600 oder nur noch 800 mAh hat, dürfte Wait bei weitem ausreichen.
Die Ströme aufaddieren musst nicht; sondern nur die geflossene Ladung in der letzten Sekunde.
Also im Prinzip:
... Spannung messen => in Strom umrechnen => mit Zeit multiplizieren/integrieren => Ergebnis (LadungNeu) zu einer Variable addieren (Ladung = Ladung + LadungNeu)
Codemässig etwa so:
Do
...
U = getadc(0)
I = U/R
QNeu = I*t (bei 1 sec. einfach QNeu = I)
QGesamt = QGesamt + QNeu
...
Loop
Hi Jaecko,
ich hatte es bereits ähnlich gemacht, allerdings war mir nicht ganz klar wie der Umgang mit Variablen bei Bascom ist.
Das ganze funzt jetzt wunderbar. Bin dabei ohne den Timer ausgekommen, der Meßfehler mit waitms ist anscheinend fast vernachlässigbar.
Gruß
Jens
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.