www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Drehgeber: Funktion


Autor: Jochen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,


hab eine Frage zu dem Drehgeber-Code von Peter Danegger:


void ISR(void)
{
  enc_input1 = GPIOE->IDR &  0x00002000;     //PE13
  enc_input2 = GPIOE->IDR &  0x00004000;       //PE14
  
  if((enc_input1 & PHASE_A) == PHASE_A)
      enc_new = 3;              

  if((enc_input2 & PHASE_B) == PHASE_B)  
      enc_new ^= 1;

   enc_new -= enc_last; 

  if (enc_new & 1)
  {
      enc_last += enc_new;
      enc_delta += (enc_new & 2)-1;
  }

}

/*
  drehgeber init function 
*/
void init(void)
{
  enc_input1 = GPIOE->IDR &  0x00002000;
  enc_input2 = GPIOE->IDR &  0x00004000;

  if( (enc_input1 & PHASE_A) == PHASE_A )
    new = 3;
  if( (enc_input2 & PHASE_B) == PHASE_B )
    new ^= 1;                   
  
  enc_last = new;                  
  enc_delta = 0;

}


Wenn ich das Prinzip richtig verstanden habe, sollte in enc_delta 
entweder 0x00 (wenn der Drehgeber nicht betätigt worden  ist), oder 0x01 
/ 0xFF enthalten sein (je nachdem in welche Richtung der Drehgeber 
gedreht worden ist).

Momentan verwende ich einen Drehgeber von Alps aus der EC11 Serie mit 
(Anschläge 30 und Auflösung 15ppr). Wenn ich von einem Anschlag auf den 
nächsten den Encoder bewege, wird die if() Bedingung in der ISR immer 2x 
ausgeführt.
if (enc_new & 1)
  {
      enc_last += enc_new;
      enc_delta += (enc_new & 2)-1;
  }

Liegt diese Tatsache auch wirklich am Aufbau des Drehgebers, oder hat 
das einen anderen Hintergrund? Wird mit Anschläge die Rasterung vom 
Encoder - Rasterpunkte - bezeichnet? Was bedeutet in diesem Zusammenhang 
dann die Auflösung?
Wäre schön, wenn mir das jmd kurz erklären kann bzw. in Zusammenhang 
setzen könnte.

Des Weiteren bin ich mir nicht sicher, was genau ein 2 oder 4 step 
encoder ist?
http://www.mikrocontroller.net/articles/Drehgeber

Dachte, dass so ein Encoder stets zwei Pins von einem µC benötigt und 
beide beim Drehen des Encoders sich zwischen 0 und 1 bewegen können; so 
wie die Abbildung das in dem Link ganz oben zeigt; ist das dann ein 2 
step encoder?

Gruß
Jochen

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jochen (Gast)

>Momentan verwende ich einen Drehgeber von Alps aus der EC11 Serie mit
>(Anschläge 30 und Auflösung 15ppr). Wenn ich von einem Anschlag auf den
>nächsten den Encoder bewege, wird die if() Bedingung in der ISR immer 2x
>ausgeführt.

Eben weil die meisten Encoder 2 Schritte pro Rastung machen.

>Liegt diese Tatsache auch wirklich am Aufbau des Drehgebers,

Ja.

>das einen anderen Hintergrund? Wird mit Anschläge die Rasterung vom
>Encoder - Rasterpunkte - bezeichnet?

Ja.

>Was bedeutet in diesem Zusammenhang dann die Auflösung?

Die Schritte pro Umdrehung.

>Des Weiteren bin ich mir nicht sicher, was genau ein 2 oder 4 step
>encoder ist?

Einer der 2 oder 4 Schritte pro Rastung macht.

>Dachte, dass so ein Encoder stets zwei Pins von einem µC benötigt

Das ist auch so.

> und
>beide beim Drehen des Encoders sich zwischen 0 und 1 bewegen können;

Das tun sie auch.

>so wie die Abbildung das in dem Link ganz oben zeigt; ist das dann ein 2
>step encoder?

Das "Problem" ist halt, dass die meisten halt mehr Schritte als 
Rastungen haben, daher die Irritation. Siehe Artikel.

MfG
Falk

Autor: Jochen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Das "Problem" ist halt, dass die meisten halt mehr Schritte als
>Rastungen haben, daher die Irritation. Siehe Artikel

Vielen Dank für deine Antworten, Falk. Du meinst sicherlich den letzten 
Part in diesem Artikel.... werd ich versuchen, ob`s mit der halben 
Auflösung besser passt
int8_t table[16] PROGMEM = {0,0,-1,0,0,0,0,1,1,0,0,0,0,-1,0,0}; 

und den unteren Code verwenden.

Gruß
Jochen

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Schrittzahl zwischen den Rastungen wird erst in der Auslesefunktion 
berücksichtigt, deshalb stehen da ja 3 Auslesefunktionen.

Der Interrupt muß aber jeden Schritt zählen, sonst funktioniert die 
Entprellung nicht.


Peter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.