-         

Ergebnis 1 bis 8 von 8

Thema: Richtiger Umgang mit Variablen

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    15.09.2004
    Alter
    38
    Beiträge
    188

    Richtiger Umgang mit Variablen

    Anzeige

    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

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von Willa
    Registriert seit
    26.10.2006
    Ort
    Bremen
    Alter
    37
    Beiträge
    1.269
    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

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    15.09.2004
    Alter
    38
    Beiträge
    188
    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

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    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

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    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.
    #ifndef MfG
    #define MfG

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    15.09.2004
    Alter
    38
    Beiträge
    188
    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

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    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:
    Code:
    Do
    ...
    U = getadc(0)
    I = U/R
    QNeu = I*t (bei 1 sec. einfach QNeu = I)
    QGesamt = QGesamt + QNeu
    ...
    Loop
    #ifndef MfG
    #define MfG

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    15.09.2004
    Alter
    38
    Beiträge
    188
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •