|
|
  |
MEGA+энкодер |
|
|
|
Sep 22 2006, 04:48
|
Знающий
   
Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073

|
Цитата(Леонид Иванович @ Sep 21 2006, 15:09)  Если частота опроса 20 Гц, то получится страшно тормозной энкодер. При быстром вращении он будет пропускать шаги - это некомфортно. Нужна частота опроса в 100 раз выше. Эта частота лишь для примера, ее можно и поднять в десятки раз, суть в использовании кольцевого буфера и занесения в него состояния энкодера. Частота опроса влияет на комфортность работы с энкодером: когда требуется менять параметры регулирования энкодером, например в диапозоне 0-1000 нужна частота выше, чем для диапазона 0-100. При большой частоте опроса бывают затруднения при подходе к требуемой точке , приходится балансировать. Вот и получается, что частота опроса должна быть адаптивной и зависеть от скорости вращения. Все требования к конпоновке органов управления, средствам отображения и удобству работы с органами управления, как и с прибором в целом, определяются эргономикой, как и та не очень высокая частота для "страшно тормозного энкодера", но с которым очень комфортно работать.
Сообщение отредактировал Vladimir_T - Sep 22 2006, 04:57
|
|
|
|
|
Sep 22 2006, 07:10
|

Мастер-фломастер
   
Группа: Свой
Сообщений: 611
Регистрация: 29-12-05
Пользователь №: 12 700

|
Цитата(Vladimir_T @ Sep 21 2006, 15:31)  Еще есть такое решение: По тику таймерного прерывания заполняется кольцевой буфер. интересно придумано :-) почему только таймерного? как то вот этот подбор времени тика таймера мне не очень нравиться... мне кажется эффективней анализировать в буфере данные от внешнего прерывания?
--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
|
|
|
|
|
Sep 22 2006, 11:57
|

Мастер-фломастер
   
Группа: Свой
Сообщений: 611
Регистрация: 29-12-05
Пользователь №: 12 700

|
Цитата(Леонид Иванович @ Sep 22 2006, 12:30)  Что касается обработки энкодера по прерываниям: зачем зря тратить ресурсы, вызывая обработчик на каждом периоде дребезга? Запрещать прерывание на время подавления дребезга - это хорошая идея. Период таймера как раз и будет временем подавления дребезга. Могу сказать обратное... зачем тратить впустую циклы контроллера, обеспечивая задержку для подавления дребезга, и тем самым увеличивать время основного цикла... да и обработчик прерывания - всего ничего.... а таймер задействовать для этих целей мне откровенно говоря жалко их и так мало :-) а если взять прерывание типа PCint (вектор у него ниже) -вообще красота... А ещё можно к ногам энкодера прицепить конденсатор - тоже не лишнее будет при борьбе с дребезгом.. Ну и что, что прерывание сработает лишний (ненужный) раз - в любом случае это же какое то действие над энкодером. не лучше ли это действие проанализировать?... все таки работа по внеш прерыванию - мне кажется более экономной...
--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
|
|
|
|
|
Sep 22 2006, 21:23
|

Местный
  
Группа: Участник
Сообщений: 318
Регистрация: 21-07-06
Из: Минск
Пользователь №: 18 986

|
Цитата(Kovrov @ Sep 22 2006, 14:57)  Могу сказать обратное... зачем тратить впустую циклы контроллера, обеспечивая задержку для подавления дребезга, и тем самым увеличивать время основного цикла... да и обработчик прерывания - всего ничего.... а таймер задействовать для этих целей мне откровенно говоря жалко их и так мало :-) Спорить здесь не о чем. Каждый из вариантов имеет право на жизнь. Предпочтительный вариант зависит от особенностей конкретного приложения. Бывает, что и таймер остается неприкаянный, бывает что и основному циклу делать нечего, когда программа ждет действий пользователя. Цитата(Kovrov @ Sep 22 2006, 14:57)  А ещё можно к ногам энкодера прицепить конденсатор - тоже не лишнее будет при борьбе с дребезгом.. Вот этого делать не стоит - конденсатор резко укоротит жизнь энкодера, так как увеличатся импульсные токи при коммутации. Вот RC-цепочку - это можно. Хотя изящнее бороться с дребезгом программно.
--------------------
|
|
|
|
|
Sep 23 2006, 04:00
|

Мастер-фломастер
   
Группа: Свой
Сообщений: 611
Регистрация: 29-12-05
Пользователь №: 12 700

|
конечно же спорить не о чем, да мы и не спорим - обычное обсуждение плюсов и минусов :-) Цитата(Леонид Иванович @ Sep 23 2006, 01:23)  Вот этого делать не стоит - конденсатор резко укоротит жизнь энкодера, так как увеличатся импульсные токи при коммутации. Я вас умоляю ..... :-) я же не предлагаю от 220 вольт запитывать и конденсатор 1000мкф :-))) а вот RC цепочка своей постоянной времени может как раз понизить "быстродействие" энкодера... тогда уж элемент с триггером Шмидта.. -вот что действительно спасет.
--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
|
|
|
|
|
Nov 6 2006, 12:20
|

Частый гость
 
Группа: Свой
Сообщений: 105
Регистрация: 6-01-06
Пользователь №: 12 901

|
Хочу поделиться результатами опытов с энкодером...
Главное в работе с последним - это борьба с дребезгом. Для борьбы с ним общепринято вводить паузу (задержку) после обнаружения первого изменения уровня (фронта)...
Так я и делал (делал это в прерывании). Но что обраружилось: или происходили ложные срабатывания (если задержка мала) или (при значительном увеличении времени задержки) происходил пропуск срабатываний (при быстром вращении). Оптимальной, но не решившей проблему (возможно из-за свойств конкретного экземпляра энкодера), оказалась задержка в 300мкС, как и советовал ув. 'Леонид Иванович'.
Идея с подключением конденсатора, предложенная 'Kovrov', показалась мне весьма правильной, а проведенный опыт доказал полную состоятельность такого решения.
Таким образом, считаю, что для "победы" над дребезгом контактов, возникающим при работе энкодера, достаточно подключить параллельно выходам энкодера конденсаторы емкостью 0,1...0,15 мкФ (я поставил 0,15). При этом дребезг "пропадает" полностью (задержка не нужна совсем). Срабатывания отрабатываются правильно не зависимо от скорости вращения ручки энкодера.
Удачи! З.Ы. Подключение конденсатора безусловно снижает надежность конструкции (как минимум из-за введения новых деталей) и для СЕРЬЕЗНЫХ изделий такое решение не является правильным. Однако в бытовых условиях такое решения полностью оправдано.
|
|
|
|
|
Dec 6 2006, 13:28
|
Участник

Группа: Участник
Сообщений: 31
Регистрация: 25-07-06
Пользователь №: 19 070

|
Перечитал эту ветку и хочу предложить свой алгоритм подавления дребезга. Обкатал его на макете с двумя разными энкодерами (оптический из старой мышки) и механический ALPS - работает четко. Исходные даные - один выход энкодера заводим на вход INT0 (PIND_Bit2), второй выход на другую ногу (в данном случае PIND_Bit3). Настраиваем прерывание INT0 по любому фронту. Есть глобальная переменная "Volume", которая изменяет свое значение при вращении энкодера. Обработчик прерывания: Код #pragma vector=INT0_vect __interrupt void handler_int0(void) { static char flag;
if (flag == PIND_Bit2 ) return;
flag=PIND_Bit2;
if ((PIND_Bit3 == PIND_Bit2) && (volume <255)) volume++; if ((PIND_Bit3 != PIND_Bit2) && (volume > 0)) volume--; } И не используется никаких конденсаторов, таймеров или задержек, при этом все работает как должно. Что я упустил?
|
|
|
|
|
Dec 8 2006, 13:39
|
Участник

Группа: Свой
Сообщений: 63
Регистрация: 3-05-05
Пользователь №: 4 696

|
Посмотрите на "хвостатый экодер". Может пригодится. Mechanical mouse
|
|
|
|
|
Dec 13 2006, 05:15
|
Участник

Группа: Новичок
Сообщений: 38
Регистрация: 12-09-05
Пользователь №: 8 464

|
Нарисуйте на бумажке работу энкодера и сгенерируйте вариант работы который вас устроит. Меня вполне устраивает (правда со спец условиями) - энкодер механический, работает сносно. с оптическим не пробовал но думаю будет лучше и надежней - необходимости нет
Прикрепленные файлы
enk.txt ( 565 байт )
Кол-во скачиваний: 712
|
|
|
|
|
Sep 13 2007, 12:08
|
Участник

Группа: Свой
Сообщений: 65
Регистрация: 17-01-06
Пользователь №: 13 277

|
Цитата(Vladimir_T @ Sep 22 2006, 10:48)  Эта частота лишь для примера, ее можно и поднять в десятки раз, суть в использовании кольцевого буфера и занесения в него состояния энкодера. Частота опроса влияет на комфортность работы с энкодером: когда требуется менять параметры регулирования энкодером, например в диапозоне 0-1000 нужна частота выше, чем для диапазона 0-100. При большой частоте опроса бывают затруднения при подходе к требуемой точке , приходится балансировать. Вот и получается, что частота опроса должна быть адаптивной и зависеть от скорости вращения. Все требования к конпоновке органов управления, средствам отображения и удобству работы с органами управления, как и с прибором в целом, определяются эргономикой, как и та не очень высокая частота для "страшно тормозного энкодера", но с которым очень комфортно работать. Единственная светлая мысль на всю тему... И не обязательно частоте опроса быть адаптивной. Я сделал на плисе 80МГц. Отлично работает!
|
|
|
|
|
Sep 14 2007, 11:50
|
Местный
  
Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101

|
Цитата(psw @ Sep 19 2006, 12:52)  здесь кусок обслуживающий кодер, кнопку сам допишешь. Полностью согласен с Леонидом Ивановичем ..... Вот здесь, в самом начале обсуждения, и был приведён правильный алгоритм, и соображения начёт скорости опроса. Сам я категорически не люблю программных задержек и фильтрации дребезга по времени. Сегодня дребезг один, затра другой. Сегодня енкодер - ручка пользователя о 16 позициях, завтра - мышка какая-нибудь быстробегающая... Поэтому. Если рассмотреть все фазы енкодера (00 01 10 11) то видно, что последовательность фаз в одну сторону 01320132... в другую 10231023.... Другие переходы (0132-3-2-3-20) есть дребезг. Т.е. нужен fifo на 3 двухбитных числа (1 байт/регистр) и анализ его 64 состояний (всего 2 значимые - шаг влево и шаг вправо). А уже как отслеживать - по прерыванию, поллингом - это каждый сам порешает.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|