реклама на сайте
подробности

 
 
6 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> MEGA+энкодер
Vladimir_T
сообщение Sep 22 2006, 04:48
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 7-02-06
Пользователь №: 14 073



Цитата(Леонид Иванович @ Sep 21 2006, 15:09) *
Если частота опроса 20 Гц, то получится страшно тормозной энкодер. При быстром вращении он будет пропускать шаги - это некомфортно. Нужна частота опроса в 100 раз выше.

Эта частота лишь для примера, ее можно и поднять в десятки раз, суть в использовании кольцевого буфера и занесения в него состояния энкодера. Частота опроса влияет на комфортность работы с энкодером: когда требуется менять параметры регулирования энкодером, например в диапозоне 0-1000 нужна частота выше, чем для диапазона 0-100. При большой частоте опроса бывают затруднения при подходе к требуемой точке , приходится балансировать. Вот и получается, что частота опроса должна быть адаптивной и зависеть от скорости вращения.
Все требования к конпоновке органов управления, средствам отображения и удобству работы с органами управления, как и с прибором в целом, определяются эргономикой, как и та не очень высокая частота для "страшно тормозного энкодера", но с которым очень комфортно работать.

Сообщение отредактировал Vladimir_T - Sep 22 2006, 04:57
Go to the top of the page
 
+Quote Post
Kovrov
сообщение Sep 22 2006, 07:10
Сообщение #17


Мастер-фломастер
****

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



Цитата(Vladimir_T @ Sep 21 2006, 15:31) *
Еще есть такое решение:
По тику таймерного прерывания заполняется кольцевой буфер.

интересно придумано :-) почему только таймерного?
как то вот этот подбор времени тика таймера мне не очень нравиться...
мне кажется эффективней анализировать в буфере данные от внешнего прерывания?


--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
Go to the top of the page
 
+Quote Post
Леонид Иванович
сообщение Sep 22 2006, 08:30
Сообщение #18


Местный
***

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



С чувствительностью энкодера понятно. Я обычно делаю так, чтобы на каждый щелчок приходился один инкремент/декремент. Это как раз и обеспечивает 1х квадратурный декодер. Возможно, в ряде случаев чувствительность энкодера можно уменьшить (например, при путешествиях по меню). Но верно ли это с точки зрения эргономики? Пользователь крутит ручку, слышит щелчок, а ничего не происходит. Что ему делать дальше?

Необходимость "балансировать" бывает при неправильно выбранной фазе энкодера. На каждый механический щелчок энкодер проходит 4 разных электрических состояния. На этом и основаны 4х квадратурные декодеры. Если мы делаем из 4х декодера 1х, то в качестве рабочего можно взять любой из 4-х переходов. Лучше брать тот, который находится ровно посередине между точками механической фиксации.

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


--------------------
Go to the top of the page
 
+Quote Post
_artem_
сообщение Sep 22 2006, 09:25
Сообщение #19


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



Если нужно несколько таймеров а возиться неохота то в этом топике есть библиотека для работы по одному апаратному таймеру для нескольких пользователей(в программе), с попеременным вызовом функций через указатели:
http://electronix.ru/forum/index.php?showtopic=10934


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
Kovrov
сообщение Sep 22 2006, 11:57
Сообщение #20


Мастер-фломастер
****

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



Цитата(Леонид Иванович @ Sep 22 2006, 12:30) *
Что касается обработки энкодера по прерываниям: зачем зря тратить ресурсы, вызывая обработчик на каждом периоде дребезга? Запрещать прерывание на время подавления дребезга - это хорошая идея. Период таймера как раз и будет временем подавления дребезга.

Могу сказать обратное...
зачем тратить впустую циклы контроллера, обеспечивая задержку для подавления дребезга, и тем самым увеличивать время основного цикла...
да и обработчик прерывания - всего ничего....
а таймер задействовать для этих целей мне откровенно говоря жалко
их и так мало :-)
а если взять прерывание типа PCint (вектор у него ниже) -вообще красота...
А ещё можно к ногам энкодера прицепить конденсатор - тоже не лишнее будет при борьбе с дребезгом..
Ну и что, что прерывание сработает лишний (ненужный) раз - в любом случае это же какое то действие над энкодером.
не лучше ли это действие проанализировать?...
все таки работа по внеш прерыванию - мне кажется более экономной...


--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
Go to the top of the page
 
+Quote Post
Леонид Иванович
сообщение Sep 22 2006, 21:23
Сообщение #21


Местный
***

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



Цитата(Kovrov @ Sep 22 2006, 14:57) *
Могу сказать обратное...
зачем тратить впустую циклы контроллера, обеспечивая задержку для подавления дребезга, и тем самым увеличивать время основного цикла...
да и обработчик прерывания - всего ничего....
а таймер задействовать для этих целей мне откровенно говоря жалко
их и так мало :-)


Спорить здесь не о чем. Каждый из вариантов имеет право на жизнь. Предпочтительный вариант зависит от особенностей конкретного приложения. Бывает, что и таймер остается неприкаянный, бывает что и основному циклу делать нечего, когда программа ждет действий пользователя.

Цитата(Kovrov @ Sep 22 2006, 14:57) *
А ещё можно к ногам энкодера прицепить конденсатор - тоже не лишнее будет при борьбе с дребезгом..


Вот этого делать не стоит - конденсатор резко укоротит жизнь энкодера, так как увеличатся импульсные токи при коммутации. Вот RC-цепочку - это можно. Хотя изящнее бороться с дребезгом программно.


--------------------
Go to the top of the page
 
+Quote Post
Kovrov
сообщение Sep 23 2006, 04:00
Сообщение #22


Мастер-фломастер
****

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



конечно же спорить не о чем, да мы и не спорим - обычное обсуждение плюсов и минусов
:-)
Цитата(Леонид Иванович @ Sep 23 2006, 01:23) *
Вот этого делать не стоит - конденсатор резко укоротит жизнь энкодера, так как увеличатся импульсные токи при коммутации.

Я вас умоляю ..... :-)
я же не предлагаю от 220 вольт запитывать и конденсатор 1000мкф :-)))
а вот RC цепочка своей постоянной времени может как раз понизить "быстродействие" энкодера...
тогда уж элемент с триггером Шмидта.. -вот что действительно спасет.


--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
Go to the top of the page
 
+Quote Post
Stas633
сообщение Nov 6 2006, 12:20
Сообщение #23


Частый гость
**

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



Хочу поделиться результатами опытов с энкодером...

Главное в работе с последним - это борьба с дребезгом. Для борьбы с ним общепринято вводить паузу (задержку) после обнаружения первого изменения уровня (фронта)...

Так я и делал (делал это в прерывании). Но что обраружилось: или происходили ложные срабатывания (если задержка мала) или (при значительном увеличении времени задержки) происходил пропуск срабатываний (при быстром вращении). Оптимальной, но не решившей проблему (возможно из-за свойств конкретного экземпляра энкодера), оказалась задержка в 300мкС, как и советовал ув. 'Леонид Иванович'.

Идея с подключением конденсатора, предложенная 'Kovrov', показалась мне весьма правильной, а проведенный опыт доказал полную состоятельность такого решения.

Таким образом, считаю, что для "победы" над дребезгом контактов, возникающим при работе энкодера, достаточно подключить параллельно выходам энкодера конденсаторы емкостью 0,1...0,15 мкФ (я поставил 0,15). При этом дребезг "пропадает" полностью (задержка не нужна совсем). Срабатывания отрабатываются правильно не зависимо от скорости вращения ручки энкодера.

Удачи!

З.Ы. Подключение конденсатора безусловно снижает надежность конструкции (как минимум из-за введения новых деталей) и для СЕРЬЕЗНЫХ изделий такое решение не является правильным. Однако в бытовых условиях такое решения полностью оправдано.
Go to the top of the page
 
+Quote Post
Kovrov
сообщение Nov 7 2006, 07:13
Сообщение #24


Мастер-фломастер
****

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



0.15 это очень много...
попробуйте использовать интегратор с постоянной времени не более 5 мс
инегратор можн рассмотреть как RC цепь
и будет вам счастье...
на счет З. Ы. тут я полностью не согласен :-)
дополнит рс цепь ни есть пентиум4 -))))))))))


--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
Go to the top of the page
 
+Quote Post
676038
сообщение Dec 6 2006, 13:28
Сообщение #25


Участник
*

Группа: Участник
Сообщений: 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--;
}


И не используется никаких конденсаторов, таймеров или задержек, при этом все работает как должно. Что я упустил?
Go to the top of the page
 
+Quote Post
Kovrov
сообщение Dec 6 2006, 19:58
Сообщение #26


Мастер-фломастер
****

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



ничего не упустилию
просто процессор лишний раз парится на обработку инт0 на момент дребезга
на глаз это не заметно.


--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
Go to the top of the page
 
+Quote Post
aforestman
сообщение Dec 8 2006, 13:39
Сообщение #27


Участник
*

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



Посмотрите на "хвостатый экодер". Может пригодится.
Mechanical mouse
Go to the top of the page
 
+Quote Post
OlegIvanov
сообщение Dec 13 2006, 05:15
Сообщение #28


Участник
*

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



Нарисуйте на бумажке работу энкодера и сгенерируйте вариант работы который вас устроит. Меня вполне устраивает (правда со спец условиями) - энкодер механический, работает сносно. с оптическим не пробовал но думаю будет лучше и надежней - необходимости нет
Прикрепленные файлы
Прикрепленный файл  enk.txt ( 565 байт ) Кол-во скачиваний: 712
 
Go to the top of the page
 
+Quote Post
qqqqqq
сообщение Sep 13 2007, 12:08
Сообщение #29


Участник
*

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



Цитата(Vladimir_T @ Sep 22 2006, 10:48) *
Эта частота лишь для примера, ее можно и поднять в десятки раз, суть в использовании кольцевого буфера и занесения в него состояния энкодера. Частота опроса влияет на комфортность работы с энкодером: когда требуется менять параметры регулирования энкодером, например в диапозоне 0-1000 нужна частота выше, чем для диапазона 0-100. При большой частоте опроса бывают затруднения при подходе к требуемой точке , приходится балансировать. Вот и получается, что частота опроса должна быть адаптивной и зависеть от скорости вращения.
Все требования к конпоновке органов управления, средствам отображения и удобству работы с органами управления, как и с прибором в целом, определяются эргономикой, как и та не очень высокая частота для "страшно тормозного энкодера", но с которым очень комфортно работать.


Единственная светлая мысль на всю тему... И не обязательно частоте опроса быть адаптивной.
Я сделал на плисе 80МГц. Отлично работает!
Go to the top of the page
 
+Quote Post
Maik-vs
сообщение Sep 14 2007, 11:50
Сообщение #30


Местный
***

Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101



Цитата(psw @ Sep 19 2006, 12:52) *
здесь кусок обслуживающий кодер, кнопку сам допишешь. biggrin.gif
Полностью согласен с Леонидом Ивановичем .....

Вот здесь, в самом начале обсуждения, и был приведён правильный алгоритм, и соображения начёт скорости опроса.
Сам я категорически не люблю программных задержек и фильтрации дребезга по времени. Сегодня дребезг один, затра другой. Сегодня енкодер - ручка пользователя о 16 позициях, завтра - мышка какая-нибудь быстробегающая... Поэтому.
Если рассмотреть все фазы енкодера (00 01 10 11) то видно, что последовательность фаз в одну сторону 01320132... в другую 10231023.... Другие переходы (0132-3-2-3-20) есть дребезг. Т.е. нужен fifo на 3 двухбитных числа (1 байт/регистр) и анализ его 64 состояний (всего 2 значимые - шаг влево и шаг вправо). А уже как отслеживать - по прерыванию, поллингом - это каждый сам порешает.
Go to the top of the page
 
+Quote Post

6 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 07:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01497 секунд с 7
ELECTRONIX ©2004-2016