-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Stromzähler

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.01.2009
    Ort
    Dortmund
    Alter
    23
    Beiträge
    114

    Stromzähler

    Anzeige

    Hi Leute..

    Undzwar will ich mir für ein RC Modell einen Stromsensor bauen, der mir auf einem Display die bereits verbrauchten mA anzeigt..

    Also nicht den aktuell fließenden Strom, sondern wie viel mA seid dem Einschalten verbraucht wurden...

    Der Strom wird über einen Shunt gemessen und mit einem OP so verstärkt, das 0A 0V entsprechen und 20A 5V

    Das ganze kann dann ja über einen ADC in einen digitalen Wert umgewandelt werden..

    Leider habe ich keien idee wie das Programm aussehen muss um nicht den aktuellen Stromverbrauch angezeigt zu bekommen sondern den gesamten Verbrauchten Strom seid dem einschalten....

    Könnt ihr mir Tipps geben oder mir vielleicht sogar kurz ein passendes Beispielprogramm schreiben???

    Wäre sehr dankbar für eure Hilfe

    Mfg Yannik
    Wer Rechtschreibfehler findet, darf sie behalten!

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.09.2005
    Ort
    am Bodensee
    Beiträge
    217
    Hi,

    willst du die El. Arbeit also (Watt Stunden) rausmessen oder die Elektrische Ladung?

    also wenn du die Ladung messen willst (mAh)hast ja( 1A·1h = 3600 C)

    wenn du die Arbeit haben willst wie es beim Stromzähler ist is es halt Arbeit = Leistung * Zeit. also (U * I * t)

    einfaches Beispiel lampe 100 Watt läuft 1 Stunde, heißt die Elektrische Arbeit sind 100 Wh. (gebräuchlicher in kWh) dort ist nun noch zu sagen
    1 kWh = 1 kW · 1 h = 1000 W · 3600 s = 3,6 · 106 J = 3,6 MJ

    gruß
    bluelight

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.01.2009
    Ort
    Dortmund
    Alter
    23
    Beiträge
    114
    Sorry, aber ich habe kein Wort verstanden xD

    Also der Strom verändert sich auch ständig.. Es geht halt darum, das mein Akku 3000mA Kapazität hat, und damit ich weiß, wann ich landen muss, soll da halt etwas rein, was mir anzeigt, wie viel mA ich da bis jetzt rausgesaugt habe..
    Wer Rechtschreibfehler findet, darf sie behalten!

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    30.12.2008
    Beiträge
    1.418
    sollte eigentlich bei dir in der schule dran gewesen sein nagut.
    die kapazität sind sicher 3000mAh
    und du willst wissen wieviel energie schon draußen ist.
    jedoch würd ich dir empflehlen das über die spannung zu machen.
    was ist das für ein akku (lipo, nimh....)? es gibt für jeden akku typ eine bestimmte spannung bei der man sagt er ist leer weil man ihn ja nicht tiefentladen will.
    du könntest den aktuellen stromverbrauch extra angeben.
    ein weiterer tip lies dich bei wikipädia mal über spannung, Strom, Kapatzität und etwas über akkus ein

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.01.2009
    Ort
    Dortmund
    Alter
    23
    Beiträge
    114
    Ich weil sehrwohl was Spannung, Strom usw. ist.... -.-
    Und das man das auch über die Spannung machen kann ist mir sehr wohl klar (Bei mir ein 3S LiPo , also ungefähr bei einer spannung von 9,5V sollte man langsam mit der Landung beginnen..

    Aber mit der herausgenommenen Kapazität wäre es halt genauer.. So weiß ich dann genau, wenn ich z.B. 2500mAh (stimmt, das h habe ich die ganze Zeit vergessen zu schreiben) entnommen habe..

    Hier kannst du mal sehen was ich meine.. Das ganze funktioniert hier über ein OSD (On Screen Display) da wird auch der aktuelle Strom angezeigt und de gesammte bisher entnommene kapazität.. Und da mir so ein OSD zu teuer ist, will ich halt (vorläufig) eine low-budget lösung machen..
    Wer Rechtschreibfehler findet, darf sie behalten!

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    12.02.2008
    Beiträge
    61
    hi,

    Ich denke des sollte so funktionieren:

    Wenn du z.B. alle Sekunde den Stromer in Amper ermittelst und die Messwerte immer aufaddierst sollte die Ladung in As rauskommen.

    Also:
    Summe(aller Strommessungen in A)*T(Periodendauer in s) = Kapazität(in As)


    Rein intuitiv denk ich das des so stimmen müsste. Kann auch durchaus falsch sein!!

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.09.2005
    Ort
    am Bodensee
    Beiträge
    217
    na also steht doch oben *gg*

    das ganz einfach (bei Lipos musst du sowieso ein Tiefentlade Schutz für jede Zelle machen (wenns geht) ansonsten musst zumindest mal schaun dass dein LipoPack auf keinen fall unter 9,3V Entlädst. (Also Die Spannung auf jeden Fall mit messen!)

    so zu deiner Kapazität.


    1000mA·1h = 1000mAh oder auch 3600 C oder auch 3600 As

    Miss den Strom und multiplizier diesen mit der laufzeit (am sinnvollsten Stunden).
    Das halt kontinuierlich.

    Beispiel deine Schaltung bezieht immer 1000mA

    Laufzeit ist 5min also ca 0,083 Stunden

    sind also 30000 mA/Sekunden was n unsinnige Angabe ist also in Stunden

    (1000mA * 0,083 Stunden) = 83mAh.

    Bei 30 min wären dass dann

    (1000mA * 0,5 Stunden) = 500mAh.

    bei 60 min also

    (1000mA * 1) = 1000mAh.

    oder eben bei 2 1/2 Stunden

    (1000mA * 2,5) = 2500mAh.

    hoffe dir ist das nun klarer

    mfg


    // edit ich denke mAh ist in diesem Fall sinvoller für dich als As (Amperesekunden) was gleich mit Coulomb zu setzen ist.

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.01.2009
    Ort
    Dortmund
    Alter
    23
    Beiträge
    114
    So, jetzt tun mir die Augen weh, aber ich glaube ich habs rausbekommen Die Updaterate ist jetzt 0,5Sekunden und es wirrd der Aktuelle Stromverbrauch angezeigt und der gesammte Verbrauchte Strom

    Hier der Code :

    Code:
    $regfile = "m8def.dat"                                      'Definieren des Chips
    $crystal = 8000000                                          'Frequenz
    
    Config Adc = Single , Prescaler = Auto , Reference = Off    'ADC konfigurieren mir Aref als Referenzspannung
    Start Adc
    
    Config Lcd = 16 * 1                                         'LCD konfigurieren
    Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
    Config Lcdbus = 4
    
    Cls
    
    Config Timer1 = Timer ; Prescaler = 256                     'Timer1 (16-bit) konfigurieren
    Start Timer1                                                'Mit dem Prescaler ergibt es 31250Hz
    Stop Timer1
    
    
    Dim Strom2 As String * 5                                    'Strom 0 bis 1.099.511.628.000
    Dim Strom As String * 4                                     'Strom2 0 bis 4.294.967.296
    Dim Strom_wert As Word                                      'Strom_wert 0 bis 65.536
    Dim Verbraucht As Word                                      'Verbraucht 0 bis 65.536
    
    
    Do
    
       Gosub Hauptprogramm                                      ' Verweis auf Subroutine
    
    Loop
    
    End
    
    Hauptprogramm:
    
       Timer1 = 0
       Start Timer1                                             'Timer1 Starten
    
       Strom_wert = Getadc(5)                                   'ADC an Portc.5 auslesen (Werte 0 bis 1024)
       Strom = Strom + Strom_wert                               'Gemessener Wert wird in jedem Durchgang addiert
       Strom2 = Strom * 100000                                  'Umrechnung des Wertes in den realen Amperewert (in mAh)
       Strom2 = Strom2 / 4096                                   'Umrechnung des Wertes in den realen Amperewert (in mAh)
       Verbraucht = Strom2 / 7200                               'Umrechnung wie viel mA in einer halben Sekunde verbraucht werden
    
          If Verbraucht < 10 Then
             Locate 1 , 4
          End If
    
          If Verbraucht < 100 Then
             Locate 1 , 3
          End If
    
          If Verbraucht < 1000 Then
             Locate 1 , 2
          Else
             Locate 1 , 1
          End If
    
          Lcd Verbraucht ; " mAh"                               'die bisher verbrauchten mAh werden angezeigt
    
       Strom2 = Strom_wert * 100                                'Aktueller Stromverbrauch (in A) ausrechnen
       Strom2 = Strom2 / 4096
    
          If Strom2 < 10 Then
             Locate 1 , 14
          Else
             Locate 1 , 13
          End If
    
          Lcd Strom2                                            'Am Ende des Displays wird der aktuelle Stromverbrauch angezeigt
          Locate 1 , 16
          Lcd "A"
    
       Gosub Warten                                             'Jetzt ist der Auswertung fertig und der AVR soll warten bis ne halbe Sekunde rum ist
    
    Return
    
    
    Warten:
    
       If Timer1 > 15624 Then                                   'Wir errinnern uns - am anfang wurde der Timer gestartet, bei 32,25kHz ist er nach genau einer halben Sekunde bei 15625
          Stop Timer1
          Gosub Hauptprogramm                                   'Dann wird das Hautprogramm wieder gestartet und die Werte werden Aktualisiert
       Else
          Gosub Warten                                          'Wenn der Wert noch nicht erreicht ist Wird die Subroutine so lange wiederholt, bis der Wert erricht wird
       End If
    
    Return
    Dabei gibt Bascom mir allerdings noch zwei Errors aus :

    Error : 86 Line : 13
    Error : 242 Line : 38


    Ihr könnts ja mal kopieren und dann könnt ihr genaueres zu den Fehler lesen..

    Was haltet ihr von dem Code?? Meiner Meinung nach müsste das dunktionieren, aber ich hol mir lieber noch einmal eine Expertenmeinung
    Wer Rechtschreibfehler findet, darf sie behalten!

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.01.2009
    Ort
    Dortmund
    Alter
    23
    Beiträge
    114
    So, jetzt tun mir die Augen weh, aber ich glaube ich habs rausbekommen Die Updaterate ist jetzt 0,5Sekunden und es wirrd der Aktuelle Stromverbrauch angezeigt und der gesammte Verbrauchte Strom

    Hier der Code :

    Code:
    $regfile = "m8def.dat"                                      'Definieren des Chips
    $crystal = 8000000                                          'Frequenz
    
    Config Adc = Single , Prescaler = Auto , Reference = Off    'ADC konfigurieren mir Aref als Referenzspannung
    Start Adc
    
    Config Lcd = 16 * 1                                         'LCD konfigurieren
    Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
    Config Lcdbus = 4
    
    Cls
    
    Config Timer1 = Timer ; Prescaler = 256                     'Timer1 (16-bit) konfigurieren
    Start Timer1                                                'Mit dem Prescaler ergibt es 31250Hz
    Stop Timer1
    
    
    Dim Strom2 As String * 5                                    'Strom 0 bis 1.099.511.628.000
    Dim Strom As String * 4                                     'Strom2 0 bis 4.294.967.296
    Dim Strom_wert As Word                                      'Strom_wert 0 bis 65.536
    Dim Verbraucht As Word                                      'Verbraucht 0 bis 65.536
    
    
    Do
    
       Gosub Hauptprogramm                                      ' Verweis auf Subroutine
    
    Loop
    
    End
    
    Hauptprogramm:
    
       Timer1 = 0
       Start Timer1                                             'Timer1 Starten
    
       Strom_wert = Getadc(5)                                   'ADC an Portc.5 auslesen (Werte 0 bis 1024)
       Strom = Strom + Strom_wert                               'Gemessener Wert wird in jedem Durchgang addiert
       Strom2 = Strom * 100000                                  'Umrechnung des Wertes in den realen Amperewert (in mAh)
       Strom2 = Strom2 / 4096                                   'Umrechnung des Wertes in den realen Amperewert (in mAh)
       Verbraucht = Strom2 / 7200                               'Umrechnung wie viel mA in einer halben Sekunde verbraucht werden
    
          If Verbraucht < 10 Then
             Locate 1 , 4
          End If
    
          If Verbraucht < 100 Then
             Locate 1 , 3
          End If
    
          If Verbraucht < 1000 Then
             Locate 1 , 2
          Else
             Locate 1 , 1
          End If
    
          Lcd Verbraucht ; " mAh"                               'die bisher verbrauchten mAh werden angezeigt
    
       Strom2 = Strom_wert * 100                                'Aktueller Stromverbrauch (in A) ausrechnen
       Strom2 = Strom2 / 4096
    
          If Strom2 < 10 Then
             Locate 1 , 14
          Else
             Locate 1 , 13
          End If
    
          Lcd Strom2                                            'Am Ende des Displays wird der aktuelle Stromverbrauch angezeigt
          Locate 1 , 16
          Lcd "A"
    
       Gosub Warten                                             'Jetzt ist der Auswertung fertig und der AVR soll warten bis ne halbe Sekunde rum ist
    
    Return
    
    
    Warten:
    
       If Timer1 > 15624 Then                                   'Wir errinnern uns - am anfang wurde der Timer gestartet, bei 32,25kHz ist er nach genau einer halben Sekunde bei 15625
          Stop Timer1
          Gosub Hauptprogramm                                   'Dann wird das Hautprogramm wieder gestartet und die Werte werden Aktualisiert
       Else
          Gosub Warten                                          'Wenn der Wert noch nicht erreicht ist Wird die Subroutine so lange wiederholt, bis der Wert erricht wird
       End If
    
    Return
    Dabei gibt Bascom mir allerdings noch zwei Errors aus :

    Error : 86 Line : 13
    Error : 242 Line : 38


    Ihr könnts ja mal kopieren und dann könnt ihr genaueres zu den Fehler lesen..

    Was haltet ihr von dem Code?? Meiner Meinung nach müsste das dunktionieren, aber ich hol mir lieber noch einmal eine Expertenmeinung
    Wer Rechtschreibfehler findet, darf sie behalten!

  10. #10
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    So geht das mit dem Code noch nicht. Die Version davor war schon besser.

    Mit Stringvariablen kann man nicht rechnen oder ihnen so einfach Werte zuweisen. Das aufsummieren sollte man besser mit einer variable vom Typ long machen, und dann erst vor der Ausgabe skalieren. Man wird vermutlich auch einen Offset berücksichtigen müssen, denn auch ohne Strom wird der ADC nicht genau 0 geben.

    Man wird auch besser nicht nach jedem ADC-wert eine Ausgange machen: der ADC sollte schon recht schnell abgefragt werden, damit der analoge Filter nicht so aufwendig wird. Die Ausgabe sollte man höchstens etwa 3 mal die Sekunde aktuallisieren, eher noch deutlich langsamer.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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