STM32 Timer Encoder Mode mit nur einem Kanal?

#7091418
Lesenswert?

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.

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