Encoder stm32

Gast #4398696
Lesenswert?

Hallo zusammen,

ich habe eine Frage bezüglich des Encoder-Interfaces beim stm32f4.
Ich möchte mit einem Rotary-Encoder eine Variable hoch bzw. 
runterzählen, also z.B. wenn man nach rechts dreht => inkrementieren, 
wenn man nach links dreht => dekrementieren.
Ist es möglich das Encoder Interface so einzustellen?
Ich habs bis nur soweit gebracht dass er, egal welche Richtung immer 
hochzählt.

Danke schonmal
Moderator (Firma: Titel) Persönliche Seite #4398736
Lesenswert?

stm schrieb:
> Ist es möglich das Encoder Interface so einzustellen?
Ja. In Hardware:
http://www.micromouseonline.com/2013/02/16/quadrature-encoders-with-the-stm32f4/

Und dann gibt es noch die "PinChange-Interrupt-Fraktion", die hierüber 
"Hurra" rufen wird:
http://stm32f4-discovery.com/2014/08/library-26-rotary-encoder-stm32f4/

Alle Anderen nehmen die übliche Peter-Danegger Geschichte, die z.B. in 
einem 1ms Systic laufen kann...
Gast #4398755
Lesenswert?

Lothar M. schrieb:
> Alle Anderen nehmen die übliche Peter-Danegger Geschichte, die z.B. in
> einem 1ms Systic laufen kann...

Er nun wieder!

Auf die Schnelle für STM32F411 mit dem Hardware-Decoder.

void init_t2(void)
{
  RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;  // GPIOA freigeben
  GPIOA->MODER |= 0x0a;         // AF1 PA0 und PA1
  GPIOA->PUPDR |= 0x05;         // pullup PA0 und PA1
  GPIOA->AFR[0] |= 0x11;        // AF PA0 und PA1 TIM2_CH1/TIM2_CH2

  RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;   // Timer2 freigeben
  TIM2->SMCR |= 0x03;           // Encode mode 3
  TIM2->CCMR1 |= 0x05;          // CH1 + CH2 -> Encoder
  TIM2->CR1 |= TIM_CR1_CEN;     // T2 starten
}

Der Zählerstand findet sich in TIM2->CNT.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren