0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
1

Прерывание от энкодера

15.08.2017, 18:57. Показов 7960. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. Понадобилось использовать энкодер в проекте. Подключил его к TYM1, все работает, значение регистра CNT меняется. Но вот только мониторить состояние энкодера постоянным чтением регистров так себе идея. Полез искать информацию про прерывания от энкодера и как-то не нашел (хотя, казалось бы, вполне логично сделать в МК оное). Попытался использовать обычные прерывания (по переполнению и т.п.), но в режиме энкодера они не работают. Неужели все так печально или это у меня руки кривые?)

Код
   GPIOA->CRH &= ~(GPIO_CRH_CNF8_0 | GPIO_CRH_CNF9_0);
GPIOA->CRH |= GPIO_CRH_CNF8_1 | GPIO_CRH_CNF9_1;

RCC->APB2ENR = RCC_APB2ENR_TYM1EN;

AFIO->MAPR |= AFIO_MAPR_TIM3_REMAP;

TYM1->CCMR1 |= TIM_CCMR1_CC1S_0 | TIM_CCMR1_CC2S_0 | TIM_CCMR1_IC1F | TIM_CCMR1_IC2F;
TYM1->CCER &= ~(TIM_CCER_CC1P | TIM_CCER_CC2P);
TYM1->SMCR |= TIM_SMCR_SMS_0 | TIM_SMCR_SMS_1;
TYM1->ARR = 4;

TYM1->CR1 |= TIM_CR1_CEN;
TYM1->DIER |= TIM_DIER_UIE;

NVIC_EnableIRQ(TYM1_UP_IRQn);
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.08.2017, 18:57
Ответы с готовыми решениями:

Выбор энкодера
Всем доброго времени суток! Имеется мотор колесо (бесколекторный двигатель с резиной вокруг)....

Замена энкодера
Ребята! Некогда заниматься поиском даташитов на N-кодеры шаттл с номера1 по номер 15, да и,честно...

Эмуляция энкодера.
Что бы проверить работу таймера в режиме энкодера я решил эмулировать на двух ножках AB сигналы....

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

Обработка энкодера
Имеется трёх импульсный энкодер (если это правильное название), т.е. датчик который имеет три линии...

6
0 / 0 / 0
Регистрация: 06.05.2015
Сообщений: 11
15.08.2017, 19:18 2
Прерывание по переполнению должно работать в любом случае.
Код
NVIC_EnableIRQ(TYM1_UP_IRQn);
NVIC_SetPriority(TYM1_UP_IRQn, 0);
TYM1->DIER |= TIM_DIER_UIE;

void TYM1_UP_IRQHomdler(void)
{
if ((TYM1->SR & TIM_SR_UIF) != 0) {
TYM1->SR = ~TIM_SR_UIF;
}
}
0
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
15.08.2017, 19:23 3
Все заработало. Это я ошибку сделал)
0
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 2,048
16.08.2017, 07:34 4
обычный энкодер цеплять на входе энкодера в таймере не ахти идея. Аппаратный антидребезг слишком короткий, микросекунды, бывают ложные срабатывания. Перешел на программный опрос. Частоты в 500 Гц вполне хватает.
0
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
17.08.2017, 17:11 5
Пока вроде нормально работает. На входах энкодера стоят кондеры 1мкФ. Если будет паршиво работать, переделаю на программный опрос.
0
1 / 1 / 0
Регистрация: 19.09.2012
Сообщений: 924
17.08.2017, 17:23 6
Цитата Сообщение от BORS_
Полез искать информацию про прерывания от энкодера и как-то не нашел (хотя, казалось бы, вполне логично сделать в МК оное).
Если желательна работа по прерываниям, то удобнее повесить энкодер на два пина и настроить прерывания от них на одну функцию. Обрабатывать можно как показано тут (самый первый пост). Один из плюсов данного подхода - свобода в выборе диапазонов и возможность работы в инкрементальном режиме (например, если энкодер используется для пользовательского интерфейса, то этот режим значительно удобнее абсолютного счета). Кстати, если есть RTOS, то события от энкодера можно ложить в очередь в прерывании, а в отдельном потоке обрабатывать эту очередь и рисовать пользовательский интерфейс. Я использовал подобное решение и оно отлично работает.
0
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
21.08.2017, 11:56 7
Цитата Сообщение от ivsy
Кстати, если есть RTOS, то события от энкодера можно ложить в очередь в прерывании, а в отдельном потоке обрабатывать эту очередь и рисовать пользовательский интерфейс. Я использовал подобное решение и оно отлично работает.
Ну у меня все куда проще. Идет управление простым GUI. Пока на таймере работает идеально, без сбоев) Но советы учту на будущее. Спасибо всем, кто откликнулся)
0
21.08.2017, 11:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.08.2017, 11:56
Помогаю со студенческими работами здесь

Относительное значение с энкодера.
Есть энкодер и STM32F103. Настроен по таймеру. 1. Как получить значение относительное начала ...

Подскажите модель Энкодера..
Добрый день Подскажите какую нибудь модель (или общее название типа) Энкодера как в нигнитолах,...

Таймер в режиме энкодера
Запускаю таймер в режиме энкодера работает нормально только с предделителем 1, почему так? ...

Подскажите модель энкодера
Энкодер, который помимо вращения имеет функцию нажатия. Именно модель. Я так по названиям и...

Миландр и модуль энкодера
Народ, не в курсе, есть ли у Милиндра контроллеры с аппаратной обработкой энкодера?

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru