STM32 Timer Encoder Mode mit nur einem Kanal?

OP #7091418
Hi,

Ich versuche auf einem STM32 einen einkanaligen Inkrement-Encoder 
auszulesen, jedoch bekomme ich das einfach nicht hin, ohne den zweiten 
Kanal hinzuzunehmen.

Der Encoder-Ausgang wird direkt über 2 parallele 100Ohm Widerstände auf 
2 GPIO Pins geleitet, welche als Combined Channels Encoder Mode gesetzt 
sind. Wenn ich nun den Encoder auslese über TIMx->CNT, dann bekomme ich 
die doppelte Anzahl an Pulse, die der Encoder eigentlich hätte.

Der Encoder Mode ist als Encoder Mode TI1 gesetzt, es sollte also nur 
ein Kanal ausgewertet werden und der zweite zur Drehrichtungsbestimmung, 
aber dem scheint nicht so zu sein.
1
  htim22.Instance = TIM22;
2
  htim22.Init.Prescaler = 0;
3
  htim22.Init.CounterMode = TIM_COUNTERMODE_UP;
4
  htim22.Init.Period = 65535;
5
  htim22.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
6
  htim22.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
7
  sConfig.EncoderMode = TIM_ENCODERMODE_TI1;
8
  sConfig.IC1Polarity = TIM_ICPOLARITY_RISING;
9
  sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI;
10
  sConfig.IC1Prescaler = TIM_ICPSC_DIV1;
11
  sConfig.IC1Filter = 0;
12
  sConfig.IC2Polarity = TIM_ICPOLARITY_FALLING;
13
  sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI;
14
  sConfig.IC2Prescaler = TIM_ICPSC_DIV1;
15
  sConfig.IC2Filter = 0;
16
  if (HAL_TIM_Encoder_Init(&htim22, &sConfig) != HAL_OK)
17
  {
18
    Error_Handler();
19
  }
20

21
  HAL_TIM_Encoder_Start(&htim22, TIM_CHANNEL_1);

Bin ich da völlig auf dem Holzweg, wenn ich nur einen Kanal auslesen 
will? Ich habe auch schon versucht, den internen Pull-Down für den 
zweiten Kanal anzuwenden und den Kanal vom Encoder-Ausgang durch den 
Widerstand getrennt, jedoch gibt es mir seither nur noch Müll aus.
Gast
Naja, habe ich mir auch gedacht, aber ich möchte keine Pulse verlieren, 
wenn beide Flanken quasi-gleichzeitig ansteigen und somit der Encoder 
evtl. Kanal B als Low statt High erkennt.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 4 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.