- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 44

Thema: Wechselstrom mit Bascom messen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    21.04.2011
    Beiträge
    9
    hallo
    Wenn 2,5V 0A sind , und du willst ein Wechselstrom messen täte ich einfach viele messungen in eine for schleife machen und alle werte in ein variablen array speichern danach mit min und max funktion von Bascom die spitzenwerte raussuchen , danach der grösste wert - kleinster wert = Sptizenstrom , dann der adc wert auf die ampere skalieren und mit wurzel 2 Dividieren und dann hast du ein effektivwert , in der for schleife muss natürlich ein wait , oder du machst es in einen timer isr die messungen . in Bascom sollte ungefähr so aussehen
    For A = 1 To Tastmessungen
    W(a) = Getadc(0) 'analogwert lesen und in W array speichern
    Next A
    Max(w(1) , M1 , Idx) 'aus W array Maximum wert raussuchen und speichern
    Maxi = M1 'Maximum wert in Variable maxi speichern
    Min(w(1) , M1 , Idx) 'aus W array Minimum wert raussuchen und speichern
    Mini = M1 'Minimum wert in Variable Mini speichern
    Spitzenstrom = Maxi-Mini
    jetzt deine variable skalieren und dann
    Effektiv= Spitzenstrom /(2)*(1.41)
    Geändert von Carlos76 (12.02.2012 um 01:24 Uhr)

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von Neutro
    Registriert seit
    28.10.2007
    Ort
    Ostfriesland
    Alter
    45
    Beiträge
    642
    Hallo Carlos,
    vielen Dank für deine Antwort, ich werde das mal ausprobieren sobald die ich Zeit dazu habe. Den Stromverlauf müsste ich eigentlich mit meinem Frequenzgenerator simulieren können.
    Leider fehlt mir bei den Umgang mit Arrays immer noch der Durchblick, obwohl ich die grundsätzliche Funktion schon verstehe.
    Wie muss ich denn in deinem Beispiel die Variablen deklarieren?
    Dim A as Byte
    Dim Tastmessungen as Byte
    Tastmessungen =20 '20 Messungen sollen gemacht werden
    dim W (20)as Single
    Dim Maxi as Single
    Dim Mini as single
    Dim spitzenstrom as single
    Dim Effektiv as Single ( wobei ich die Berechnung ja auf mehrere Zeilen aufteilen muss)


    Als Wait würde sich dann ja ein Wert von ca. 1ms oder kleiner anbieten.

    Das Programm an sich würde ich wohl in ein Unterprogramm verpacken was aus der Haupschleife heraus angesprochen wird, denn es sollen ja noch andere Sachen gemacht werden.

    MFG
    Neutro
    Jemand mit einer neuen Idee ist ein Spinner, bis er Erfolg hat.
    (Mark Twain)

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    21.04.2011
    Beiträge
    9
    Hallo Neutro
    Lass alle variablen as word bis deine effektivberechnungen , du solltest noch deine ausgabe zum lcd oder print noch formatieren mit z.b. print Fusing(effektiv , "#.##")
    dim tastmessungen as Byte 'sollte die gleiche grösse wie w haben
    dim w(20) as word ' getadc mag kein single
    dim Maxi as word '
    dim mini as word
    dim Spitzenstrom as word
    dim Effektiv as Single 'und alle andere variablen für die Berechnungen als single deklarieren
    Poste mal dein funktionierendes Bascom code
    Gruss Carlos

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von Neutro
    Registriert seit
    28.10.2007
    Ort
    Ostfriesland
    Alter
    45
    Beiträge
    642
    Hallo Carlos,
    das Prog muss ich erst noch schreiben, das kann also noch ein paar Tage dauern bis ich soweit bin. Mir ging es hier ja zunächst mal
    um den grundlegenden Code wie eine ACV einzulesen ist. Aber da hast du mir schon mal auf jeden Fall weitergeholfen.
    Ob der Code dann auch wirklich mit der Hardware läuft wird dann wohl auch noch mal eine gewisse Zeit dauern, da ich ja noch erst
    Den Schaltplan und Layout erzeugen muss, dann nöch ätzen.....Das ganze befindet sich ja momentan noch alles erst in Planung.
    Ich werde mal versuchen das ganze vorab auf meinem Testboard auszuprobieren.
    Wie ich die Werte anzeigen und formatieren muss ist mir aber bekannt, das habe ich für Gleichspannungen schon öfters gemacht.
    auf jeden Fall werde ich euch weiterhin auf dem Laufenden halten. Darf ich dir bei Bedarf eine PN zukommen lassen?

    Viele Grüße
    Neutro
    Jemand mit einer neuen Idee ist ein Spinner, bis er Erfolg hat.
    (Mark Twain)

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    19.07.2011
    Beiträge
    66
    Hallo Neutro,
    habe gerade keine Hardware hier, also ist der Code ungetestet - kannst ja mal versuchen.

    Analogeingang0 wird alle 800µs eingelesen.
    wenn der Wert größer 2,5V also größer 512 ist, wird er zur Variable Mittelwert gerechnet.
    gleichzeitig wird gezählt, wie oft gemessen wurde.

    ist der Analogeingang0 gleich 512 oder kleiner, wird mit den vorher gemessenen Werten gerechnet,
    d.h. Variable Mittelwert / Zaehler(wie oft gemessen wurde)

    Danach wird das Ergebnis über RS232 ausgegeben($baud = 19200 )



    Code:
    'Wechselspannung messen / STFan 12.02.2012
    
    
    '-------------------------------------------------------------------------------
    'Konfiguration µC:
    $regfile = "m8def.dat"                                      'AT-Mega8
    $crystal = 8000000                                          '08 MHz
    $baud = 19200
    
    '-------------------------------------------------------------------------------
    '8Bit Timer0: 50Hz bei 1Sekunde -> 20ms -> 25 Messungen in 20ms -> alle 0,8ms eine Messung also 1250 Messungen pro Sekunde
    Config Timer0 = Timer , Prescale = 64
    On Timer0 Timer0_isr
    Const Timer0vorgabe = 156
    Enable Timer0
    Enable Interrupts
    
    
    '-------------------------------------------------------------------------------
    'Ein- Ausgänge:
    Config Portc = Input
    
    
    '-------------------------------------------------------------------------------
    'Analogmessung
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    
    
    '-------------------------------------------------------------------------------
    'Variablen
    Dim Analog0 As Word
    Dim Zaehler As Byte
    Dim Mittelwert As Integer , Mittelwert2 As Single
    Dim Merker As Byte                                          'Merker = 0 = analogwerte werden eingelesen
                                                                 'Merker = 1 = Werte wurden berechnet
                                                                 'Merker = 2 = Werte wurden ausgeben
    Dim Spitzenwert As Single
    Dim Effektivwert As Single
    
    
    '-------------------------------------------------------------------------------
    'Programm
    
    
    Do
    
    If Merker = 1 Then
    Print "Mittelwert2: " ; Mittelwert2                         'Ausgabe des Mittelwert2
    
    Spitzenwert = Mittelwert2 * 1.571                           'berechnen Spitzen wert
    Print "Spitzenwert: " ; Spitzenwert
    
    Effektivwert = Spitzenwert / 1.414                          'berechnen Effektivwert
    Print "Effektivwert: " ; Effektivwert
    
    Merker = 2
    End If
    
    
    Loop
    
    '_______________________________________________________________________________
    
    
    
    
    
    '...............................................................................
    Timer0_isr:
    Timer0 = Timer0vorgabe
    
    
    Start Adc
    Analog0 = Getadc(0)                                         'Analogwert messen
    Stop Adc
    
    
    
    If Analog0 > 512 Then
       Incr Zaehler
       Mittelwert = Mittelwert + Analog0
       Merker = 0
    
    Else
    
       If Merker = 0 Then
          Merker = 1                                            'Damit nach den Messungen nur einmal der Mittelwert berechnet wird!
          Mittelwert2 = Mittelwert / Zaehler                    'Effektivwert berechnen
          Zaehler = 0                                           'Variable zurücksetzen
          Mittelwert = 0                                        'Variable zurücksetzen
       End If
    
    
    End If
    
    Return

  6. #6
    Erfahrener Benutzer Roboter Experte Avatar von Neutro
    Registriert seit
    28.10.2007
    Ort
    Ostfriesland
    Alter
    45
    Beiträge
    642
    Hall Carlos,
    wenn ich deinen Code richtig verstehe werden also 20 Messungen gemacht weil das Array auf 20 Stellen begrenzt ist?
    wenn die 20 Stellen voll sind werden also die Min und Max werte bestimmt?
    Ich habe das ganze mal in einen vollständigen Code als unterprog eingebunden, allerdings lässt sich dein Abschnitt nicht fehlerfrei Compilieren, das Problem liegt in dieser Zeile:
    For A = 1 To Tastmessungen

    @Stfan1409:
    Danke für deinen Code, ich werde auch den mal Checken
    Jemand mit einer neuen Idee ist ein Spinner, bis er Erfolg hat.
    (Mark Twain)

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    21.04.2011
    Beiträge
    9
    Hallo
    Klar Kannst du mir eine PN schicken


    Zitat Zitat von Neutro Beitrag anzeigen
    Hall Carlos,
    wenn ich deinen Code richtig verstehe werden also 20 Messungen gemacht weil das Array auf 20 Stellen begrenzt ist?
    wenn die 20 Stellen voll sind werden also die Min und Max werte bestimmt?
    Ja so sollte der ablauf sein.
    Ich hab keine ahnung wieso du ein fehler bekommst , du solltest kompielierbaren code hier reinstellen, kann es sein das vergessen hast a as byte für die for schleiffe zu definieren?

  8. #8
    Erfahrener Benutzer Roboter Experte Avatar von Neutro
    Registriert seit
    28.10.2007
    Ort
    Ostfriesland
    Alter
    45
    Beiträge
    642
    Ja, die Definition fehlte tatsächlich, aber dann wird die Zeile :
    Max(w(1) , M1 , Idx) Als fehler markiert (asignment error)

    Hier mal der ganze Code:


    $regfile = "m8def.dat"
    $crystal = 4000000
    $baud = 9600

    '-------------------------------------------------------------------------------
    'LCD Config

    Config Lcd = 16 * 2
    Config Lcdbus = 4
    Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , Db7 = Portb.0 , E = Portb.4 , Rs = Portb.5

    '-------------------------------------------------------------------------------


    'Variable setzen

    'print Fusing(effektiv , "#.##")
    Dim A As Byte
    Dim Tastmessungen As Byte
    Tastmessungen = 20 'sollte die gleiche grösse wie w haben
    Dim W(20) As Word ' getadc mag kein single
    dim Maxi as word '
    dim mini as word
    dim Spitzenstrom as word
    Dim Effektiv As Single 'und alle andere variablen für die Berechnungen als single deklarieren


    '-------------------------------------------------------------------------------
    'ADC Einstellungen

    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Start Adc

    '-------------------------------------------------------------------------------
    'Hauptprogramm

    Cls
    Cursor Off
    Upperline
    Lcd " ACV "
    Lowerline
    Lcd " Spannung "

    Wait 3
    Cls


    Do

    Gosub Spannungsmessung

    Loop


    Spannungsmessung:

    For A = 1 To Tastmessungen
    W(a) = Getadc(0) 'analogwert lesen und in W array speichern
    Next A
    Max(w(1) , M1 , Idx) 'aus W array Maximum wert raussuchen und speichern
    Maxi = M1 'Maximum wert in Variable maxi speichern
    Min(w(1) , M1 , Idx) 'aus W array Minimum wert raussuchen und speichern
    Mini = M1 'Minimum wert in Variable Mini speichern
    Spitzenstrom = Maxi-Mini
    'jetzt deine variable skalieren und dann
    Effektiv = Spitzenstrom / 2.82

    Upperline Fusing(effektiv , "#.##") 'hier ist jetzt der Spannungswert der umgerechnet werden muss!

    Return
    Jemand mit einer neuen Idee ist ein Spinner, bis er Erfolg hat.
    (Mark Twain)

Ähnliche Themen

  1. Gleich- oder Wechselstrom?
    Von freaky44 im Forum Elektronik
    Antworten: 10
    Letzter Beitrag: 26.01.2012, 20:26
  2. Wechselstrom Zähler ?
    Von Enten Züchte im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 08.01.2009, 13:38
  3. Gleichstrom --> Wechselstrom
    Von Haki im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 28.08.2008, 17:00
  4. Spannung Messen mit Attiyn26L und Bascom??
    Von Brantiko im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 12.01.2007, 06:06
  5. Schrittmotor mit Wechselstrom ansteuern!
    Von Frank im Forum Motoren
    Antworten: 6
    Letzter Beitrag: 26.05.2004, 20:41

Berechtigungen

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

Solar Speicher und Akkus Tests