-
        

Ergebnis 1 bis 9 von 9

Thema: Drehzahl messen - Oszilloskop

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    26.11.2004
    Beiträge
    13

    Drehzahl messen - Oszilloskop

    Anzeige

    Hallo,

    ich kann meine errechnete Drehzahl nicht am Oszilloskop ablesen. Leider werde ich aus der Anleitung des Oszi nicht schlau und bräuchte mal Hilfe.
    Mein Motor (aus CDROM 9Volt) läuft ab 10% PWM-Duty-Cycle.

    Eine Encoderscheibe 120 Löcher liefert mir Interrupts. Diese lese ich alle 0,0335 Sekunden aus.
    Code:
     
    // *** Setup Timer0-Interrupt  ***
        OPTION = 7;  //Vorteiler 256:1
        TMR0 = 125;  //256-131=125
        T0IE = 1;   /* enable TMR0 interrupt */
    Code:
    if (T0IF)  				// Ursache des Interrupts feststellen
      {						/* TMR0 overflow interrupt */
    	TMR0 = 125;
    	ist_rpm=impuls*15; //  (impuls*30*60)/120
    	impuls=0;
        T0IF = 0;  			/* reset flag */
      }
    Die Drehzahlen sind auch plausibel zwischen 270 (10%) und 2745 U/Min (100%). Wenn ich mir nun jedoch am Oszilloskop das Signal der Lichtschranke ansehe errechne ich 1200 U/Min. Ich habe es auf 50 usec eingestellt und lese an der Einteilung 4 Low und 4 High-Bits ab. Also 8 von 10 Zeiteinheiten auf der x-Achse.
    Wie errechne ich daraus die Drehzahl?

    Vielen Dank für Eure Hilfe

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    14.01.2006
    Ort
    Hattingen
    Alter
    52
    Beiträge
    984
    8 x 50µs = 400µs
    1/400µs = 2500Hz
    2500/12 = 20,83U/s
    20,83U/s * 60 = 1250 U/min

    Ich würde normalerweise dem Oszi eher trauen, als der Software, solange diese nicht verifiziert wurde.

    Evtl. noch kontrollieren, ob evtl. eine Spreizung der Ablenkung aktiv ist?

    Sigo

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    26.11.2004
    Beiträge
    13
    Danke Sigo,

    nun gut, also habe ich die Drehzahl am Oszi richtig interpretiert. Das heisst mein Programm rechnet falsch...
    Mein Pic läuft mit 4 MHz und ich nutze Timer0.
    Die Ticks kommen nach dieser Formel: http://www.sprut.de/electronic/pic/g...mer.htm#timer0
    Tick = 1/(4MHz/(4*256)) alle 0,00025 s.
    Nun zähle ich bis 131, also 0,00025*131= 0,033536 sek.

    Der Interrupt tritt demnach 30-mal in der Sekunde auf. Dort berechne ich nun die Drehzahl (Umdrehungen pro Minute) wie folgt:
    ist_rpm= anzahl_impulse * 30 * 60 / 120= anzahl_impulse*15

    Ich finde den Fehler einfach nicht...

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    14.01.2006
    Ort
    Hattingen
    Alter
    52
    Beiträge
    984
    Schau doch mal nach, ob du vielleicht auf jede Flanke einen Interrupt bekommst. Bei einigen Controllern kann man bei jeder Transition einen Interrupt bekommen.

    Just a thought. I´m no Pic Expert..

    Sigo

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    14.01.2006
    Ort
    Hattingen
    Alter
    52
    Beiträge
    984
    Die Lichtschranke erzeugt ca. 2500Hz.
    Wieso kommt dein Interrupt denn dann nur 30mal pro Sekunde?
    ????

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    26.11.2004
    Beiträge
    13
    Ich arbeite mit zwei Interrupts. Ein externer, der an der Lichtschranke anliegt und einem internen zum messen der Zeit.

    Der externe Interrupt wird bei jeder steigenden Flanke erzeugt. Wenn ich die Events zähle, also die Welle von Hand bewege wird korrekt gezählt.

    Die Lichtschranke erzeugt also einen Interrupt. Dort zähle ich die Impulse. In einem weiteren Interrupt der alle 0,33536 Sekunden aufgerufen wird lese ich die gezählten Impulse aus und errechne mir die Drehzahl pro Minute.
    Die Lichtschranke liefert mir High-Low-Signale, die sind OK (sehe ich ja am Oszi). Sie ist für bis zu 5000 U/Min ausgelegt.

    Es muss am Code liegen. Irgendwas ist an meinen Timern faul.

  7. #7
    Neuer Benutzer
    Registriert seit
    31.07.2006
    Ort
    Luzern
    Alter
    32
    Beiträge
    4
    du hast schon berücksichtigt dass schlussendlich der pic intern nur mit 1mhz arbeitet (OSC/4)?!
    oder hast du nen 16mhz quartz angeschlossen?

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    26.11.2004
    Beiträge
    13
    @piclover: Ja habe ich berücksichtigt.
    Tick = 1/(4MHz/(4*256)) alle 0,00025 s.
    Meine Variablen haben auch 16Bit Breite.
    Hast Du vielleicht noch ein Stück Code um einen Timer0-IRQ zu erzeugen?
    Ich habe nur was für 1ms Timer gefunden. Ich finde es aber doof 1000 mal pro Sekunde die Drehzahl zu bestimmen...

    Ist das denn so richtig?
    Code:
    // *** Setup Timer0-Interrupt  ***
        OPTION = 7;  //Vorteiler 256:1
        TMR0 = 125;  //256-131=125
        T0IE = 1;   /* enable TMR0 interrupt */
    Kommen da 0,0335 raus?

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    26.11.2004
    Beiträge
    13
    Zum debuggen hab ich den IRQ eine LED toggeln lassen und messe, das er diesen alle 10 ms aufruft. Nach meiner Rechnung sollten es aber alle 33,5 ms sein.

    Wäre toll wenn jemand eine Erklärung dafür hat.
    Ich benutze einen PIC 16F627 mit 4Mhz und CC5x als Compiler.

Berechtigungen

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