- Akku Tests und Balkonkraftwerk Speicher         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 27 von 27

Thema: nocheinmal Drehzahlmessung

  1. #21
    Benutzer Stammmitglied
    Registriert seit
    14.09.2005
    Alter
    69
    Beiträge
    77
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    Ich habe meinen Drehzahlmesser jetzt soweit fertig. Und um es vorweg zu nehmen, das klappt auf die Drehzahl genau. (+/- 2 U/M) .ich habe ihn aber noch nicht am Motor getestet. Bis jetzt nur mit Frequenzgenerator die Drehzahl simuliert. Aber ob die Impulse vom Motor kommen oder vom Frequenzgenerator ist ja egal.

    Anfangs war das ganze ziemlich ungenau, aber das lag daran, daß ich den internen Oszillator benutzt habe. Jetzt mit einem externen Quarz ist das genau. Der interne Oszillator scheint ziemlich viel von seiner Frequenz abzuweichen.

    Was ich jetzt nicht verstehe sind Aussagen wie " Bascom verschlingt intern zuviel zeit." Ich habe ja bei 18000 u/minute nur 300 Hz. Da müßte doch jeder Controller locker mit kommen, selbst wenn er nur mit 1 Mhz läuft.

    Ich habe das so gemach, daß ich die Dauer einer Umdrehung messe. Also auf steigender Flanke warten und den Timer starte, auf die nächste steigende Flanke warten und dann den Timer auslesen und auf null setzen. Dann Berechnung durchführen, Drehzahl anzeigen und so weiter. Das kann ruhig einige Zeit dauern, auch wenn da einige Umdrehungen nicht gemessen werden, ist das nicht schlimm, denn ich zeige die Umdrehung ja nur alle 300-400 ms an, damit die anzeige ruhig steht und nicht flackert.

    Von dem Prinzip währen einer gewiesenen Zeit die Impulse zuzählen, hallte ich nicht viel. Zumale wenn sich die Drehzahl in kurzen Abstände oft ändert. Denn dann muß man die Messzeit sehr kurz halten, und wenn da ein paar Impulse fehlen, und man das auf eine Minute hohe rechnet ist die Fehlerquote groß.

    Bei konstanter Drehzahl mach das sicher Sinn. Wo man die Impulse während einer Minute mißt und die dann anzeigt.

    Mit freundlichen Grüßen
    Guy

  2. #22
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    23.12.2004
    Ort
    Ulm
    Alter
    38
    Beiträge
    136
    Hallo,

    toll, dass es bei dir jetzt funktioniert. Könntest du vielleicht deinen Code veröffentlichen?

    Gruss

    Florian

  3. #23
    Benutzer Stammmitglied
    Registriert seit
    14.09.2005
    Alter
    69
    Beiträge
    77
    Hallo Florian,

    Ich werde den Code mal hier rein setzen, das kann aber ein paar Tage dauern. Ich muß nur meinen Loptop mal mit zur Arbeit bringen, denn Zuhause habe ich kein Internet. Ich will kein Internet Zuhause, denn sonst hänge ich zuviel auf dem Computer.

    Bis dann,
    Guy

  4. #24
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    @Guy: Für das kann ich dir nur diese USB-Sticks empfehlen, wie es sie erstens überall und auch manchmal beim Aldi gibt. Wirklich praktisch, das Zeug.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #25
    Benutzer Stammmitglied
    Registriert seit
    14.09.2005
    Alter
    69
    Beiträge
    77
    Ja, ist eine Gute Idee. Ich habe ja erst meinen Computer vor einem Monat gekauft. Und das nur um meinen Datalogger vom Modellauto auszulesen. Ich wolle meine Freizeit nicht mehr wie Früher nur am Computer verbringen. Darum habe ich auch kein Internetanschluß .

    Und da ich eine Schaltung für den Datalogger brauchte, habe ich auch wieder angefangen Controller zu progen.

    Werde mir mal gleich im Supermark so einem USB-Sticks besorgen.


    Danke für die Idee, und einen schönen Tag noch.
    Guy

  6. #26
    Benutzer Stammmitglied
    Registriert seit
    14.09.2005
    Alter
    69
    Beiträge
    77
    Hier mal meinen Code für den Drehzahlmesser.

    Der soll die Drehzahl messen und dann die 5 oder 10 maximal Drehzahlen speichern. Das ist wichtig damit ich sehe ob das Modellauto mit der Übersetzung die Maximale Drehzahl erreicht. (Fehlt aber noch im Programm).

    Dann soll der Drehzahlmesser zwischen z.B. 8000 und 9000 U/m eine Lampe an schalten. (einstellbar) Das ist um die Fliehkraftkupplungs einstellung zu vereinfachen. Denn die Kupplung darf nicht zu früh kuppeln und auch nicht zu spät.

    Ich setzt mal den ganzen Code hier rein, wichtig ist aber nur der Code zwischen dem do –loop. Also die Hauptschleife.

    Das Prinzip ist einfach. Auf Steigende Flanke (oder fallende Flanke) warten dann Timer starten, auf fallende Flanke warten, und wieder auf Steigende Flanke warten. Dann Timer aus lesen. Im Timer steht die Zeit von einer Umdrehung. Umdrehung ausrechnen usw.. Wenn das schneller geht als das Hi von der Steigende Flanke braucht, sollte man wieder auf fallende Flanke warten bevor man neu beginnt.

    Ich arbeite erst seit 2-3 Wochen mit Bascom. Wenn einer was sieht was man besser machen kann, nur zu. Freue mich für jeden Vorschlag.







    Code:
    $regfile = "m16def.dat"
    $crystal = 8000000
    $baud = 19200
    Config Lcdpin = Pin , Db4 = Porta.0 , Db5 = Porta.2 , Db6 = Porta.4 , Db7 = Porta.6 , E = Portc.7 , Rs = Portc.6
    'Config Lcd = 16 * 2
    Config Lcd = 16 * 1
    '$sim
    
    
    Dim Count1 As Single
    Dim Rpm As Word
    'Dim Temp As Single
    Dim Uberlauf As Bit
    Dim Menuselect As Byte
    Dim Zylinder As Byte
    Dim Lampe_an As Word
    Dim Lampe_aus As Word
    
    Config Timer1 = Timer , Prescale = 8
    
    'On Timer1 Timer1_isr
    
    Config Pind.4 = Output
    Portd.4 = 1
    
    Set Portb.0
    Config Pinb.0 = Input                                       ' eingang fur drehzahl
    ' ********* Menu Tasten *************
    Config Pind.2 = Input
    Set Portd.2
    Config Pinb.4 = Input
    Set Portb.4
    Config Pinb.5 = Input
    Set Portb.5
    Config Pinb.6 = Input
    Set Portb.6
    Config Pinb.7 = Input
    Set Portb.7
    ' ********* end Menu Tasten *************
    On Int0 Menu_int0
    Enable Int0
    Enable Timer1
    Enable Interrupts
    Stop Timer1
    
    Do
       Bitwait Pinb.0 , Reset
       Start Timer1
       Timer1 = 0
       Bitwait Pinb.0 , Set
       Bitwait Pinb.0 , Reset
       Stop Timer1
       Count1 = Timer1
       Count1 = 1000000 / Count1
       Count1 = Count1 * 60
    
       Rpm = Int(count1)
       Cls
       Cursor Off Noblink
        Lcd Rpm ; " RPM"
    If Rpm > Lampe_an And Rpm < Lampe_aus Then
        Portd.4 = 0
    Else
        Portd.4 = 1
    End If
       Waitms 300
       Bitwait Pinb.0 , Set
       Loop
    
    End                                                         'end program
    
    
    
    Timer1_isr:
    Cls
    Lcd "Fehler"
    Waitms 100
    Rpm = 0
    Count1 = 0
    Return
    
    
    
    
    Menu_int0:
    Menuselect = 0
    Do
    Waitms 100
    If Pind.2 = 0 Then
    Incr Menuselect
    
    
    Do
    Loop Until Pind.2 = 1
    End If
    If Menuselect > 6 Then
    Menuselect = 1
    End If
      Select Case Menuselect
    Case 1                                                      'Max_drehzahl
       Cls
       Lcd "Drehzahl"
       If Pinb.4 = 0 Then
       Do
       Loop Until Pinb.4 = 1
       Gosub Max_drehzahl
       End If
    Case 2                                                      'Motortype
       Cls
       Lcd "Motortype"
       If Pinb.4 = 0 Then
       Do
       Loop Until Pinb.4 = 1
       Gosub Motor_type
       End If
    Case 3                                                      'Zylinder Zahl
       Cls
       Lcd "Zyl. Zahl"
       If Pinb.4 = 0 Then
       Do
       Loop Until Pinb.4 = 1
       Gosub Zyl_zahl
       End If
    Case 4                                                      ' Lampe an
       Cls
       Lcd "Lampe an"
       If Pinb.4 = 0 Then
       Do
       Loop Until Pinb.4 = 1
       Gosub Lampe_an
       End If
    Case 5                                                      ' Lampe aus
       Cls
       Lcd "Lampe aus"
       If Pinb.4 = 0 Then
       Do
       Loop Until Pinb.4 = 1
       Gosub Lampe_aus
       End If
    Case 6                                                      ' ruruck
    Cls
    Lcd "return"
    If Pinb.4 = 0 Then
    Exit Do
    End If
    End Select
     Loop
    Return
    
    Max_drehzahl:
    'Cls
    'Lcd "Max Drehzahl"
    'Waitms 100
    Return
    
    
    Motor_type:
    'Cls
    'Lcd "Motor type"
    'Waitms 100
    Return
    
    
    '***************************************
    Zyl_zahl:
    Cls
    Do
       Cls
       Lcd "Zylinder"
       Lcd Zylinder
       Waitms 100
       If Pinb.5 = 0 Then
          Incr Zylinder
          If Zylinder > 8 Then
             Zylinder = 1
          End If
          Do
          Loop Until Pinb.5 = 1
       End If
       If Pinb.6 = 0 Then
          Decr Zylinder
          If Zylinder = 0 Then
             Zylinder = 8
          End If
          Do
         Loop Until Pinb.6 = 1
       End If
       If Pinb.4 = 0 Then
           Do
           Loop Until Pinb.4 = 1
       Exit Do
       End If
    Loop
    Return
    
    '*******************************************
    Lampe_an:
    Cls
    Do
       Cls
       Lcd "Lam. An "
       Lcd Lampe_an
          Waitms 100
    
       If Pinb.5 = 0 And Pind.2 = 0 Then
          Lampe_an = Lampe_an + 100
          If Lampe_an > 23000 Then
             Lampe_an = 0
          End If
    
       End If
       If Pinb.6 = 0 And Pind.2 = 0 Then
          Lampe_an = Lampe_an - 100
          If Lampe_an =< 0 Then
             Lampe_an = 23000
          End If
    
       End If
       If Pinb.5 = 0 And Pind.2 = 1 Then
          Incr Lampe_an
          If Lampe_an => 23000 Then
             Lampe_an = 0
          End If
       End If
       If Pinb.6 = 0 And Pind.2 = 1 Then
          Decr Lampe_an
          If Lampe_an =< 0 Then
             Lampe_an = 23000
          End If
       End If
       If Pinb.4 = 0 Then                                       'zuruck
           Do                                                   ' enprellen
           Loop Until Pinb.4 = 1
           Dta1:
           Data Lampe_an
       Exit Do
       End If
    Loop
    Return
    
    '*******************************************
    Lampe_aus:
    Cls
    Do
       Cls
       Lcd "Lam. aus "
       Lcd Lampe_aus
          Waitms 100
    
       If Pinb.5 = 0 And Pind.2 = 0 Then
          Lampe_aus = Lampe_aus + 100
          If Lampe_aus > 23000 Then
             Lampe_aus = 0
          End If
    
       End If
       If Pinb.6 = 0 And Pind.2 = 0 Then
          Lampe_aus = Lampe_aus - 100
          If Lampe_aus =< 0 Then
             Lampe_aus = 23000
          End If
    
       End If
       If Pinb.5 = 0 And Pind.2 = 1 Then
          Incr Lampe_aus
          If Lampe_aus => 23000 Then
             Lampe_aus = 0
          End If
       End If
       If Pinb.6 = 0 And Pind.2 = 1 Then
          Decr Lampe_aus
          If Lampe_aus =< 0 Then
             Lampe_aus = 23000
          End If
       End If
       If Pinb.4 = 0 Then                                       'zuruck
           Do                                                   ' enprellen
           Loop Until Pinb.4 = 1
       Exit Do
       End If
    Loop
    Return

  7. #27
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    16.05.2005
    Alter
    39
    Beiträge
    137
    Ja,
    ich wäre auch an dem Code interessiert, da ich auch eine Drehzahlmessung per CNY70 vor habe.
    Majus

Seite 3 von 3 ErsteErste 123

Berechtigungen

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

Solar Speicher und Akkus Tests