Easyelectronics.ru

Электроника для всех
Текущее время: 26 ноя 2020, 20:41

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: [решено]пример с quadrature encoder
СообщениеДобавлено: 31 янв 2012, 08:45 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 17 янв 2012, 07:53
Сообщения: 51
люди поделитесь примером как завести квадратурный энкодер на stm32f4. сам по себе таймер тикает, прерывание отрабатывает. пины на который приходят импульсы если поопрашивать, там сигнал меняется. а всё вместе не работает никак. и вообще невполне понятно как его настраивать.
как я сейчас пытаюсь делать :


Код:
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8,ENABLE);

  // PA.6,PA.7 for encoder

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  /*GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;*/
  /*GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;*/
  GPIO_Init(GPIOC,&GPIO_InitStructure); 
 
  /* Timer configuration in Encoder mode */
  TIM_DeInit(TIM8);
 
  TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);

  TIM_TimeBaseStructure.TIM_Prescaler = (uint16_t)(168000000/1000000)-1;
  TIM_TimeBaseStructure.TIM_Period = 1000;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
 
  TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure);
 
 
  TIM_EncoderInterfaceConfig(TIM8, TIM_EncoderMode_TI1, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);


  // Initial interuppt structures
  NVIC_InitStructure.NVIC_IRQChannel = TIM8_BRK_TIM12_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = configLIBRARY_KERNEL_INTERRUPT_PRIORITY;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

  NVIC_InitStructure.NVIC_IRQChannel = TIM8_UP_TIM13_IRQn;
  NVIC_Init(&NVIC_InitStructure);

  NVIC_InitStructure.NVIC_IRQChannel = TIM8_TRG_COM_TIM14_IRQn;
  NVIC_Init(&NVIC_InitStructure);

  NVIC_InitStructure.NVIC_IRQChannel = TIM8_CC_IRQn;
  NVIC_Init(&NVIC_InitStructure);

  // Clear all pending interrupts
  TIM_ClearFlag(TIM8, TIM_FLAG_Update | TIM_FLAG_COM | TIM_FLAG_Break | TIM_FLAG_CC1 | TIM_FLAG_CC2 |TIM_FLAG_CC3|TIM_FLAG_CC4);

  TIM_ITConfig(TIM8, TIM_IT_Update | TIM_IT_COM | TIM_IT_Break | TIM_IT_CC1 | TIM_IT_CC2 |TIM_IT_CC3|TIM_IT_CC4, ENABLE);

  TIM8->CNT = 0;
  TIM_Cmd(TIM8, ENABLE);


Последний раз редактировалось unkier 03 фев 2012, 15:30, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: пример с quadrature encoder
СообщениеДобавлено: 03 фев 2012, 15:30 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 17 янв 2012, 07:53
Сообщения: 51
вопрос решил. всё работает. проблема как обычно в кривых руках ) не туда припоялся и небыло сдвига фаз )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [решено]пример с quadrature encoder
СообщениеДобавлено: 06 окт 2012, 16:41 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 10 фев 2012, 16:40
Сообщения: 197
Откуда: Украина г.Кировоград
Можно ли организовать прерывания по каждому
инкременту или декременту таймера, работающего в режиме энкодера ?
Так бы было удобно присваивать значение счетного регистра некоторой глобальной переменной.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: [решено]пример с quadrature encoder
СообщениеДобавлено: 11 окт 2012, 20:03 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 17 янв 2012, 07:53
Сообщения: 51
Koder писал(а):
Можно ли организовать прерывания по каждому
инкременту или декременту таймера, работающего в режиме энкодера ?
Так бы было удобно присваивать значение счетного регистра некоторой глобальной переменной.


на самом деле квадратурный энкодер в этом камне настолько убог что я от него отказался... сам всё считаю в прерываниях.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: пример с quadrature encoder
СообщениеДобавлено: 14 окт 2012, 13:02 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 10 фев 2012, 16:40
Сообщения: 197
Откуда: Украина г.Кировоград
unkier писал(а):
Koder писал(а):
Можно ли организовать прерывания по каждому
инкременту или декременту таймера, работающего в режиме энкодера ?
Так бы было удобно присваивать значение счетного регистра некоторой глобальной переменной.


на самом деле квадратурный энкодер в этом камне настолько убог что я от него отказался... сам всё считаю в прерываниях.


В STM32 действительно нет возможности назначить прерывание по каждому инкр. и декр. ((((
Теперь есть идея просто привязать EXTI событие к ножкам таймера и таким обр. фиксить число счетного регистра (по идиотски как-то выходит).


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB