- Labornetzteil AliExpress         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: IQ Signal (Drehgeber) Auswertung

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    07.07.2008
    Beiträge
    29

    IQ Signal (Drehgeber) Auswertung

    Hallo
    Ich möchte gerne einen Dreggeber auswerten der mir ein klassisches IQ Signal liefert. (Also auch vor- rückwärts bestimmen)
    Hat jemand damit Erfahrungen gemacht, oder kann mir ein paar Tipps geben?

    Gruß Jens

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.02.2006
    Ort
    3. Planet eines kleinen Sonnensystems in einem Seitenarm der Milchstraße
    Alter
    69
    Beiträge
    622
    Only entropy comes easy. - Anton Checkhov

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    07.07.2008
    Beiträge
    29
    Hi
    Ja, mit der Drehrichtungsauswertung das hab ich jetzt verstanden, mit den möglichen Zustandwechseln usw.
    Aber wie mach ich die Geschwindigkeits Bestimmung? Genügt es wenn ich dazu eine der beiden Spuren nutze und einfach die Flanken "zähle" in einem bestimmten Zeitintervall. Oder ist das zu unsauber?

    gruß

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.02.2006
    Ort
    3. Planet eines kleinen Sonnensystems in einem Seitenarm der Milchstraße
    Alter
    69
    Beiträge
    622
    Hallo,

    die beste Technik ist das Abfragen der Zustände in Intervallen (z.B. mit Hilfe eines Timers). Die Geschwindigkeit ergibt sich dann aus der Anzahl der (validen) Zustandsänderungen pro Zeiteinheit.

    Gruß

    Fred
    Only entropy comes easy. - Anton Checkhov

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    07.07.2008
    Beiträge
    29
    hi
    also bis jetzt verfolge ich folgende Taktik.
    Ich lasse einen Timer laufen.
    Bei einer pos. Flanke speichere ich den Timerwert.
    Bei der nächsten pos. Flanke speichere ich wieder den timerwert und bilde die Differenz. Damit kann ich mir dann die Zeit berechnen.
    Das müsste so doch auch funktionieren oder hat das einen Nachteil?
    Hier mal der Code:

    Code:
    _interrupt(9) void PCA0(void){				 // Interrupt PCA0 P0_0 Drehzahl
    	char temp = SFRPAGE;	
    	SFRPAGE   = PCA0_PAGE;
       
    	  P1_4=LED; 	    		//Kontrolle ob Interrrupt ausgeführt wird
    	  x++;						//Zählen wie oft der Interrupt ausgeführt wird
    
    	  wert_alt=wert_neu;		//Speichern des alten Werts
    
    	  low =PCA0L;       		//Lowbyte auslesen
    	  high=PCA0H;	   			//Highbyte auslesen
    	  high=high<<8;	   			//Highbyte um 1Byte nach rechts schieben 
    	  wert_neu=high+low;	    //High und Lowbyte addieren
    
    	 time=wert_neu-wert_alt;    //Berechnung der Zeitdifferenz
    
    	CLR_CF;
    	SFRPAGE =temp;
    }
    Mein Problem ist jetzt nur das der Interrupt aus irgend einem Grund viel öfter ausgeführt wird als ich Flanken auf dem eigentlichen Interrupt pin hab und dadurch die zeitdifferenz immer 0 ist

    gruß

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    07.07.2008
    Beiträge
    29
    ... also das Problem mit dem Interrupt ist gelöst.....
    bleibt nur noch die Frage ob das ganze vom Prinzip her richtig ist, oder ob es da was besseres gibt

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.02.2006
    Ort
    3. Planet eines kleinen Sonnensystems in einem Seitenarm der Milchstraße
    Alter
    69
    Beiträge
    622
    Hallo,

    handelt es sich um einen optischen Encoder? Dann sollte es mit der Flankenmethode gehen. Bei einem mechanischen wäre es wegen des Prellens wesentlich besser, einfach etwa alle 10 ms nachzusehen, welches Signal anliegt und nur bei unverändertem Signal zu agieren.

    Den Controller, den Du verwendest, kann ich nicht aus Deinem Code erkennen.

    Gruß

    Fred
    Only entropy comes easy. - Anton Checkhov

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    07.07.2008
    Beiträge
    29
    Hi
    Es ist ein C8051F040 von Silabs (vorgabe).
    Verwendet wird ein Optischer Encoder.

    gruß

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    31.05.2006
    Beiträge
    23
    Hallo,

    ich stehe vor dem selben Problem. Aber ich fürchte eher, ich seh den Wald vor lauter Bäumen nicht.

    Könnte mir bitte jemand in ein paar einfach Worten erklären wie das funktioniert mit dem Timer ?

    Ich benutze eine C-Control Mega 128 und hab die Abschnitte über die Timer geschichten bestimmt schon 20 mal gelesen, bekomm das aber einfach nicht in den richtigen Zusammenhang um eine Routine programmieren zu können.

    Danke und Gruss, Endress

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.02.2006
    Ort
    3. Planet eines kleinen Sonnensystems in einem Seitenarm der Milchstraße
    Alter
    69
    Beiträge
    622
    Hi Endress,

    Da sagt nicht, welches Material Du schon gelesen hast. Ich kann es sicher nicht so gut erklären wie die Tutorials:
    https://www.roboternetz.de/wissen/index.php/Timer/Counter_(Avr) (C Beispiele)
    http://www.mikrocontroller.net/artic...utorial:_Timer (Assembler Beispiele)
    http://winavr.scienceprog.com/avr-gc...th-winavr.html
    Eigentlich geben auch die entsprechenden AVR-Datenblätter alle Informationen zu den Timern her.

    Gruß

    Fred
    Only entropy comes easy. - Anton Checkhov

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

12V Akku bauen