ARM Encoder не в счет - PullRequest
       101

ARM Encoder не в счет

0 голосов
/ 28 апреля 2018

Я пытался работать с кодировщиком на моем чипе ARM STM32F0, и мне не повезло.

Сначала я пошёл вниз по InputCapture, используя CaptureCallback и некоторое вычитание, но это дало почти случайные результаты. Так как я узнал, что внутри кода HAL есть библиотека кодировщиков, так что я должен быть в состоянии ударить это в счастливые дни. Пример 1 2 3

Я реализовал каждый из этих разных методов, и все они наносят ущерб одному и тому же факту. TIMx->CNT не возвращает счетный регистр, а вместо этого возвращает состояние вывода. Это как если бы библиотека HAL неправильно настраивала Внутренний счетчик, но также возможно, что я просто ошибаюсь. Если бы кто-то мог направить меня, я был бы очень признателен. Ниже я вставил некоторые из моих настроек / примеров, чтобы показать, что я делаю.

Настройка

  Tim_ENCHandle.Instance = TIMENC;
  Tim_ENCHandle.Init.Period = 0xFFFF;
  Tim_ENCHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
  Tim_ENCHandle.Init.Prescaler = 0;
  Tim_ENCHandle.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;

  encConfig.EncoderMode = TIM_ENCODERMODE_TI12;

  encConfig.IC1Filter = 0x0F;
  encConfig.IC1Polarity = TIM_INPUTCHANNELPOLARITY_RISING;
  encConfig.IC1Prescaler = TIM_ICPSC_DIV1;
  encConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI;

  encConfig.IC2Filter = 0x0F;
  encConfig.IC2Polarity = TIM_INPUTCHANNELPOLARITY_FALLING;
  encConfig.IC2Prescaler = TIM_ICPSC_DIV1;
  encConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI;


  if (HAL_TIM_Encoder_Init(&Tim_ENCHandle, &encConfig) != HAL_OK) {
    Error_Handler();
  }

  if(HAL_TIM_Encoder_Start_IT(&Tim_ENCHandle,TIM_CHANNEL_ALL)!=HAL_OK){
    Error_Handler();
  } 

определяет:

/* Definition for TIMENC clock resources */
#define TIMENC                           TIM2
#define TIMENC_CLK_ENABLE()              __HAL_RCC_TIM2_CLK_ENABLE()

#define TIMENC_CHANNEL_GPIO_PORT()       __HAL_RCC_GPIOA_CLK_ENABLE()
#define TIMENC_GPIO_PORT                 GPIOA
#define TIMENC_GPIO_PIN_CHANNEL1         GPIO_PIN_1
#define TIMENC_GPIO_AF_TIMx              GPIO_AF2_TIM2

#define TIMENC_IRQn                      TIM2_IRQn
#define TIMENC_IRQHandler                TIM2_IRQHandler

MSP:

void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef *htim) {
 GPIO_InitTypeDef GPIO_InitStruct;
  TIMENC_CLK_ENABLE();
  TIMENC_CHANNEL_GPIO_PORT();

  GPIO_InitStruct.Pin = GPIO_PIN_1 | GPIO_PIN_2;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  GPIO_InitStruct.Alternate = TIMENC_GPIO_AF_TIMx;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  HAL_NVIC_SetPriority(TIMENC_IRQn, 0, 1);

  HAL_NVIC_EnableIRQ(TIMENC_IRQn);
}

Получить данные, которые только возвращают состояние вывода

transmitBufferSize = snprintf((char *)aTxBuffer, 64, "cnt: %d\n\r", TIMENC->CNT);

Таблица данных для моего конкретного чипа

1 Ответ

0 голосов
/ 12 июня 2018

Для тех, кто сталкивается с подобной проблемой, я нашел решение.

GPIO_InitStruct.Pin = GPIO_PIN_1 | GPIO_PIN_2;

Вместо этого должно быть

GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1;

Из таблицы данных STM и примечаний библиотеки HAL.

PA0 - TIM2_CH1_ETR

PA1 - TIM2_CH2

PA2 - TIM2_CH3

PA3 - TIM2_CH4

HAL_StatusTypeDef HAL_TIM_Encoder_Start (TIM_HandleTypeDef * htim, Канал uint32_t)

Запуск интерфейса энкодера TIM. Параметры: htim: TIM Encoder Дескриптор интерфейса Channel: TIM каналы должны быть включены Этот параметр может принимать одно из следующих значений: • TIM_CHANNEL_1: TIM Channel 1 выбран
• TIM_CHANNEL_2: выбран канал 2 TIM
• TIM_CHANNEL_ALL: TIM Channel 1 и TIM Channel 2 выбраны

Очевидно, что эта заметка в библиотеке HAL пыталась сказать мне, что модуль кодера работает только на каналах 1 и 2. Каналы 3 и 4 не работают с библиотекой кодера. Однако, кажется, что это ограничение произвольно ограничено в реализации библиотеки HAL, потому что это единственное упоминание о поддержке кодировщика в таблице данных STM32.

Эти таймеры способны обрабатывать квадратурный (инкрементный) датчик сигналы и цифровые выходы от 1 до 3 датчиков Холла

...