snaut

Простая И Сложная Штука Инкрементальный Энкодер

82 сообщения в этой теме

snaut    8

Можно обойтись и без них. Как пишет NebsteR — „Мы не ищем легких путей”. Но если поставить конденсаторы, то можно сократить время задержки для подавления дребезга, а соответственно увеличить скорость обработки, что в свою очередь приведет к снижению тормозов (всяких там проскоков и несрабатываний).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
korsaj    34

При задержке в 5мС для подавления дребезга получим обработку порядка 200 изменений уровня с энкодера. Обычно энкодер выдает 24 импульса за 1 оборот. Так о каких проскоках речь? Вы сможете энкодером сделать 7 оборотов в секунду?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
NebsteR    743
Мы не ищем легких путей
Покажи пальцем, где я такое сказал :)

Я сказал - это не наш метод, а это разные вещи :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
snaut    8

Вы сможете энкодером сделать 7 оборотов в секунду?

Спасибо — убедительно. Конденсаторы не нужны.

Мы не ищем легких путей
Покажи пальцем, где я такое сказал :)

Ой…

А вот у меня еще идея возникла. А что, если энкодер обрабатывать отдельным (так сказать, дополнительным) МК, например 8-ми выводным Тини? А с него уже подавать управляющий сигнал на основной МК?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
UTSource

Найдите миллионы труднодоступных

электронных компонентов

NebsteR    743

Ну и нафига городить кучу корпусов, когда обработка энкодера - вообще простейшая задача :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
snaut    8

Почему же тогда куча форумов заполнена данной темой с активными обсуждениями?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
korsaj    34

Потому что его боятся как огня, а когда разберутся что к чему, и думать о нем забывают ))

Ну и потому что уж очень популярная и удобная вэсчь

Изменено пользователем korsaj
  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
snaut    8

Вот и я побаиваюсь видимо. Начну уже пожалуй в железе. Решено обрабатывать по внешнему прерыванию INTx. Руководствуюсь статьей DI HALTа. Только вот это не понятно: «Но тут надо будет заблокировать прерывания INT0 на несколько миллисекунд. И НИ В КОЕМ СЛУЧАЕ нельзя делать это в обработчике.» Объясните пожалуйста, почему нельзя блокировать прерывания в обработчике?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
NebsteR    743

Видимо ограничения AVR какие то. У пиков пофиг, в какой момент будет поставлено/снято разрешение выставления флага для вектора...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
korsaj    34

Первый раз такое слышу. Хотя в Атмелах я новичек, но случаев с неправильной отработкой запрета в обработчике прерываний одного из прерываний еще не было.

Изменено пользователем korsaj

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    555
Объясните пожалуйста, почему нельзя блокировать прерывания в обработчике?
Блокировать можно, но не ждать этот период в обработчике. Наверное, это имелось в виду.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

При входе в обработчик прерывания флаг I регистра SREG сбрасывается и восстанавливается при выходе из обрабочика АППАРАТНО, т.е. запрещаются другие прерывания. Смысл в одном обработчике ставить CLI и SEI?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
snaut    8

И так решил возобновить тему. Мучился, но так ничего и не вымучил…

Пытался сделать от прерываний. По логике программа должна работать, но совсем не работает. Начал прозванивать мультиметром энкодер (осцилографа к сожалению не имею) и выяснилось следующее обстоятельство: в любой тик энкодер замыкает канал (А или В) на землю как хочет. То есть на каждый тик должно формироваться четкое состояние, такое, что канал А и В не на земле. А получается, что каналы после тика оказываются то на земле, то не наземле. Причем пробовал два энкодера и везде такая ситуация. Вывод: механические энкодеры за 180 - 250р. полное г... Нужен оптический. Или я не прав?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    555
на каждый тик должно формироваться четкое состояние, такое, что канал А и В не на земле.
С чего Вы это взяли ? На землю они должны замыкаться поочереди, сначала один, потом другой, потом оба не на земле...
сначала один, потом другой
А вот в какой последовательности - зависит от направления вращения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
snaut    8

Я понимаю так:

e6930188aa12c9af5038c3df0c3bfda7.jpg

То есть в состоянии покоя на землю замыкания нет и на пинах каналов А и В 1,1. Когда на канале ноль, это значит, что канал замкнут на землю. По моему пониманию получается, что в момент покоя на каналах всегда 11, то есть после каждого тика. Но при прозвонке получается, что после тика состояние далеко не всегда 1,1. Бывает и 0,0 и 1,0 и 0,1. То есть фиксации состояния от щелчков нет

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
NebsteR    743

Подтяжка A и B на питание есть хоть?

И кстати, ВОТ один тик...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
snaut    8

Да, подтяжка есть. Пробовал и с внутренней подтяжкой и внешние ставил на 10 кОм. То есть я не правильно понимаю 1 тик? За один тик не меняется 4 состояния? Что обозначают красные стрелочки на вашем рисунке?

Изменено пользователем snaut

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
NebsteR    743

Красные стрелки и есть - два соседних состояния - один тик...

За один тик не меняется 4 состояния?
За один тик меняется 1 состояние...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
snaut    8

Ого, тогда буду переделавать. Это получается, что постоянно нужно менять int то на срабатывание по фронту, то по спаду? Кстати, я имею ввиду тик — один физический щелчок энкодера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
NebsteR    743

Разумеется один щелчок...

менять int то на срабатывание по фронту, то по спаду
Да, на противоположное от последнего...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
snaut    8

Вот ссылочка где написано, что „при повороте энкодера на одно деление, состояние на выходах меняется четыре раза”. Не знаю кому верить. Но больше придерживаюсь описания по ссылке, ибо прозвонка не подтверждает Вашего описания одного щелчка.

Вот ссылка: http://avrdevices.ru/podklyutchaem-enkoder-k-avr/

p.s. Извините, наболело.... Перечитал несколько статей про обработку энкодера и везде одно и тоже. Статья начинается примерно так. Существует два способа - по прерываниям и по опросу. И все авторы дружно начинают кричать, что расход такого ценного ресурса, как int нецелесообразно и все выбирают второй способ с опросом. Да какое нафиг не целесообразно. Int По-моему как раз и создан для таких целей, как кнопка и энкодер. А вот запускать опрос каждую милисекунду это целесообразно....? Если уж взялись писать статью, так не копируйте друг у друга. Все вот говорят, что по прерыванию вообще все легко, а вы напишите рабочий код-то! Однако все легко, а исходников на асме нет почему-то.... Извините, наболело

Изменено пользователем snaut

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
korsaj    34

.. а исходников на асме нет почему-то....

А это вы смотрели http://forum.cxem.ne...ttach_id=196143

У меня такое ощущение что вы читаете тему выборочно, задаете вопросы которые уже обсуждены..

Изменено пользователем korsaj

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
snaut    8

Не выборочно. Извиняюсь, если повторяюсь. Кстати, код этот тоже не рабочий. Вернее работает не стабильно

Все. Проверил энкодер. За один тик состояние на одном выводе меняется два раза, на двух выводах четыре раза. Могу снять видео. Проверял на светодиодах. Читал порт на котором прицеплен энкодер и выводил состояние этого порта на другой порт на светодиоды. Медленно крутишь и все прекрасно видно. Проблема в том, что после остановки энкодер может остановиться не только на щелчке, но в произвольном состоянии.

Изменено пользователем snaut

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
NebsteR    743

Вот любит народ искать проблемы и основываться на домыслах... Какие сложности сделать обработчик КАЖДОГО изменения состояния? И затем, если энкодер окажется на несколько смен за щелчок - фильтровать каждое второе и т.п. срабатывание? Заодно получится универсальный алгоритм под любой тип энкодеров...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
korsaj    34

.. код этот тоже не рабочий. Вернее работает не стабильно

....

Медленно крутишь и все прекрасно видно. Проблема в том, что после остановки энкодер может остановиться не только на щелчке, но в произвольном состоянии.

Чет совсем не понятно, что значит не стабильно? Какая у вас тактовая частота, на сколько мС задержка для подавления дребезга?

И приведенному примеру абсолютно все равно в каком состоянии остановится энкодер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас