ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
770909 Топик полностью
Evgeniy1294 (27.07.2017 07:55 - 08:02, просмотров: 230) ответил IBAH на STM32, Таймер2 в режиме обработки энкодера. Какое событие генерируется по изменения состояния счетчика? по приходу фронта от энкодера? перерыл весь рефернс, моего знания аглицкого не хватает...
Делаю сейчас девайс на stm32, работающий одновременно с 3-мя энкодерами. Все прекрасно работает. При использовании энкодеров нужно учесть, что на один отсчет энкодера счетчик считает 4 импульса: А(2 фронта)+В(2 фронта). Т.е. если у энкодера 50к отсчетов на оборот, счетчик насчитает 200к. При переполнении таймера в режиме энкодера срабатывает стандартное прерывание. Также в регистрах таймера есть флаг направления TIM_CR1_DIR, благодаря которому можно подсчитывать значения больше 65535 (таймер 16-бит). Пример (мне не хватило разрешения 16-бит, поэтому я использую доп. переменную, инкремент и декремент которой выполняю через функции upCount и downCount): extern "C" void TIM1_UP_TIM10_IRQHandler(void) { // Прерывание по переполнению таймера if (TIM1->SR & TIM_SR_UIF) { TIM1->SR &= ~TIM_SR_UIF; // Обработка показаний энкодера if (TIM1->CR1 & TIM_CR1_DIR) { // Значение <0 enc->downCount(); } else { // Значение >65535 enc->upCount(); } } return; }