Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: A/B энкодер.
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
Jenya7
раньше у меня энкодер сидел на пине с внешним прерыванием. вобщем то довольно удобно.
Код
if (motror_dir == UP)
  position++;
if (motror_dir == DOWN)
position--;

ну и потом проверяем где мы
Код
if (position >= TOP_POS)
    Print(“Top position!”);

сейчас я решил считать аппаратно. скажем я посажу вход энкодера на пин таймера пусть считает за меня.
вопрос как лучше сделать. если взять STM32F1 то у него есть пин TIMx_ETR по моему довольно удобный по функционалу. а битом DIR можно менять направление счета +/-. или есть какие нибудь другие способы?
да и еще, чтоб избежать недоразумений - схемотехнически все решено – A/B декодирование и определение направления – XOR + D-FF.

AlexandrY
Цитата(Jenya7 @ Feb 3 2016, 16:44) *
или есть какие нибудь другие способы?
да и еще, чтоб избежать недоразумений - схемотехнически все решено – A/B декодирование и определение направления – XOR + D-FF.


Да, вот новейший чип от NXP имеет аж два аппаратных декодера A/B
Никаких вычислений не надо делать.
Нажмите для просмотра прикрепленного файла
Jenya7
то что доктор прописал. но не хочется пересаживаться на NXP. все таки есть наработки на STM.
adnega
Цитата(Jenya7 @ Feb 3 2016, 18:15) *
то что доктор прописал. но не хочется пересаживаться на NXP. все таки есть наработки на STM.

И не надо - у STM в таймере есть специальный режим для энкодера.
Подключаете A и B ко входам таймера без всяких XOR и триггеров, а он сам следит за порядком изменения фаз.
Счетчик импульсов бедет в CNT. Читать про регистр SMCR, если нужны подробности.

Полагаю, что xor+d-ff могут неплохо работать при больших перемещениях в одном направлении,
но дребезжание, например, фазы A туда-сюда при постоянном уровне на фазе B будет приводить
к ложным счетным импульсам. Или я чего-то не понимаю? Можно схему?
Jenya7
спасибо. посмотрю. схема не со мной. ближе к вечеру выложу.

воссоздал. R-C цепочки ставим по вкусу.
Jenya7
вот не дожали ребята из ST. могли бы сделать TIMx_CH1/ TIMx_CH2 – encoder1, TIMx_CH3/ TIMx_CH4 – encoder2. а так для двух енкодеров нужно два таймера. я вот только не понимаю - если на CH1/CH2 сидит енкодер то CH3/CH4 можно использовать для PWM?
adnega
Цитата(Jenya7 @ Feb 4 2016, 10:39) *
вот не дожали ребята из ST. могли бы сделать TIMx_CH1/ TIMx_CH2 – encoder1, TIMx_CH3/ TIMx_CH4 – encoder2. а так для двух енкодеров нужно два таймера. я вот только не понимаю - если на CH1/CH2 сидит енкодер то CH3/CH4 можно использовать для PWM?

Конечно, нет. Ибо, CNT на всех один. И в режиме энкодера он будет считать фазы, а не делить тактовую частоту.

PS. Вам как знатоку STM32 должно быть известно, что ребята из STM дожали и пережали: есть модельки с десятком таймеров, так что "фи" не принимается.
Jenya7
Цитата(adnega @ Feb 4 2016, 15:36) *
Конечно, нет. Ибо, CNT на всех один. И в режиме энкодера он будет считать фазы, а не делить тактовую частоту.

PS. Вам как знатоку STM32 должно быть известно, что ребята из STM дожали и пережали: есть модельки с десятком таймеров, так что "фи" не принимается.

CNT один но CCR четыре. sm.gif

проблема то в чем. таймеров то много. ну занял я CH1/CH2 а с CH3/CH4 что делать.
adnega
Цитата(Jenya7 @ Feb 4 2016, 14:16) *
CNT один но CCR четыре. sm.gif

Вам показать таймеры, у которых 1 или 2 CCR ?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.