|
MEGA+энкодер |
|
|
|
 |
Ответов
|
Sep 19 2006, 07:47
|
Частый гость
 
Группа: Свой
Сообщений: 75
Регистрация: 7-04-05
Из: Украина
Пользователь №: 3 948

|
Один из сигналов (А или В ) я заводил на внешнее прерывание, второй на любую ногу порта, сконфигурированую как вход. Прерывание - по любому логическому изменению сигнала. В обработчике, исходя из предыдущего и текущего значения сигналов А и В (предыдущее значение - значение А и В, при предыдущем вызове обработчика внешнего прерывания ) принимал решение в какую сторону происходит вращение и соотв. увеличивал или уменьшал значение требуемой переменной. Вот краткий алгоритм работы.. если нужно более подробное описание - обращайтесь...
Сообщение отредактировал XsanyaX - Sep 19 2006, 07:48
--------------------
Метрология - наука о достаточной точности.
|
|
|
|
|
Sep 19 2006, 08:25
|

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

|
Обработка энкодера по прерываниям неудобна, так как требуется давить дребезг. Более того, чтобы корректно реализовать квадратурный декодер 1х (или 2х, 4х), прерывания должны происходить не по фронту или спаду одного из сигналов, а по любому изменению состояния энкодера. Отсюда следует порочность декодера типа "программный D-триггер, один сигнал энкодера на вход D, второй - на C". При такой реализации INC/DEC всегда происходит по фронту одного из сигналов энкодера, что есть неправильно. Если вал энкдера просто пошевелить на месте, может насчитаться куча импульсов. INC/DEC нужно делать по изменению состояния двух сигналов, чтобы и INC, и DEC происходили в одной и той же точке, но при её проходе с разными направлениями вращения. Информацию о построении правильных квадратурных декодеров можно почерпнуть из описания спец. микросхем, например, HCTL-2000. Я обрабатываю энкодер и его кнопку в основном цикле программы. Если программа чем-то занята, то она всё равно не сможет отреагировать на вращение энкодера, а буферизовать проделанный поворот и откладывать его обрботку - это уже слишком. Практика показала, что для комфорного использования энкодера задержки на подавление дребезга не должны превышать 500 мкс, иначе становится заметным пропуск шагов при резком повороте ручки. Я использую 300 мкс. Столь малые времена, к сожалению, не могут быть сформированы системным таймером как большинство других временных интервалов в программе. Поэтому приходится применять "тупую" задержку в виде цикла. Для таких малых интервалов это вполне допустимо, потери производительности процессора будут минимальными. Тем более, что обработка энкодера - это общение с пользователем, который всегда является самым медленным звеном системы  Более того, если какая-то задача в основном цикле захочет временно забрать все ресурсы процессора (за вычетом потерь на прерывания), она сможет это сделать. В это время энкодер обслуживаться не будет. Для кнопки время подавления дребезга должно быть существенно большим, я использую 50 мс. Уж очень разные механические характеристики контактных групп кнопки и энкодера. Сюда выложил пример обработки энкодера на асме для AVR: http://upload.caxapa.ru/Enc.txt
--------------------
|
|
|
|
|
Sep 21 2006, 07:18
|

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

|
Цитата(Леонид Иванович @ Sep 19 2006, 12:25)  Обработка энкодера по прерываниям неудобна, так как требуется давить дребезг. Я обрабатываю энкодер и его кнопку в основном цикле программы. А я наоборот отказался от полинга работы с энкодером когда имеем достаточный загруз контроллера - иногда очень не аккуратно получалось ;-) сейчас работаю по прерыванию как уже говорилось выше... но несколько застраховавшись от дребезга, введя переменную "чувствительности" энкодера - она, кстати, очень полезна.. хотя дребезг есть также последствие мех воздействия и его отметать тоже не стоит - а нужно проанализировать... проблем уже как 3 года не наблюдаю причем даже с нонейм энкодерами, и энкодерами имеющие достаточный мех износ.... плюс ко всему под прерывание все прекрасно ложиться - и ресурсов кушает очень мало... так что вот ещё автору, тема для обмозгования..
--------------------
Вон ПОПОВ, клоун клоуном, а радио изобрел!!
|
|
|
|
Сообщений в этой теме
vetbaston MEGA+энкодер Sep 19 2006, 05:17   Леонид Иванович А какой физический смысл несет переменная "чу... Sep 21 2006, 09:07    Kovrov Цитата(Леонид Иванович @ Sep 21 2006, 13... Sep 21 2006, 15:46   Shurmas Цитата(Kovrov @ Sep 21 2006, 11:18) пробл... Sep 21 2006, 09:17 psw Цитата(vetbaston @ Sep 19 2006, 10:17) Ес... Sep 19 2006, 08:52 Maik-vs Цитата(psw @ Sep 19 2006, 12:52) здесь ку... Sep 14 2007, 11:50  qqqqqq Цитата(Maik-vs @ Sep 14 2007, 17:50)... Sep 14 2007, 15:17   gte Цитата(qqqqqq @ Sep 14 2007, 19:17) Да. Б... May 16 2008, 17:29    777777 Цитата(gte @ May 16 2008, 21:29) Благо, н... May 17 2008, 14:19     gte Ну так порекомендуйте ортронный по сносной цене. May 17 2008, 19:45     _Pasha Цитата(777777 @ May 17 2008, 17:19) Так о... May 18 2008, 06:17     rx3apf Цитата(777777 @ May 17 2008, 18:19) Ну вы... May 18 2008, 10:52      777777 Цитата(rx3apf @ May 18 2008, 14:52) Видел... May 18 2008, 17:04       rx3apf Цитата(777777 @ May 18 2008, 21:04) И что... May 18 2008, 18:03        777777 Цитата(rx3apf @ May 18 2008, 22:03) Основ... May 19 2008, 09:09         rx3apf Цитата(777777 @ May 19 2008, 13:09) Так в... May 19 2008, 18:51          777777 Цитата(rx3apf @ May 19 2008, 22:51) Но ес... May 20 2008, 07:27           gte Цитата(777777 @ May 20 2008, 11:27) Ты пр... May 20 2008, 09:06 vetbaston Спасибо всем! Буду пробовать! Sep 19 2006, 11:12 Nikola Kirov Не невозможно сделат на 2 перервания.
Вот я делал.... Sep 19 2006, 11:16 Shurmas советую апноут микрочип AN696 - там схемотехника и... Sep 19 2006, 11:37 xemul Для устранения дребезга по нескольким входам с оди... Sep 21 2006, 09:42 Vladimir_T Еще есть такое решение:
По тику таймерного прерыва... Sep 21 2006, 11:31 Леонид Иванович Если частота опроса 20 Гц, то получится страшно то... Sep 21 2006, 12:09  Vladimir_T Цитата(Леонид Иванович @ Sep 21 2006, 15... Sep 22 2006, 04:48   qqqqqq Цитата(Vladimir_T @ Sep 22 2006, 10:48) Э... Sep 13 2007, 12:08  sitafern Цитата(Леонид Иванович @ Sep 21 2006, 15... May 18 2008, 11:23   Леонид Иванович Цитата(sitafern @ May 18 2008, 14:23) Про... May 20 2008, 09:03 Kovrov Цитата(Vladimir_T @ Sep 21 2006, 15:31) Е... Sep 22 2006, 07:10  Леонид Иванович С чувствительностью энкодера понятно. Я обычно дел... Sep 22 2006, 08:30   Kovrov Цитата(Леонид Иванович @ Sep 22 2006, 12... Sep 22 2006, 11:57    Леонид Иванович Цитата(Kovrov @ Sep 22 2006, 14:57) Могу ... Sep 22 2006, 21:23     Kovrov конечно же спорить не о чем, да мы и не спорим - о... Sep 23 2006, 04:00      Stas633 Хочу поделиться результатами опытов с энкодером...... Nov 6 2006, 12:20 _artem_ Наверно загадочность заключается в том что :
- при... Sep 21 2006, 17:34 _artem_ Если нужно несколько таймеров а возиться неохота ... Sep 22 2006, 09:25 Kovrov 0.15 это очень много...
попробуйте использовать ин... Nov 7 2006, 07:13 676038 Перечитал эту ветку и хочу предложить свой алгорит... Dec 6 2006, 13:28 wired Цитата(676038 @ Dec 6 2006, 16:28) Перечи... Jun 17 2008, 11:06  676038 Цитата(wired @ Jun 17 2008, 17:06) взял з... Jun 17 2008, 13:45   wired Цитата(676038 @ Jun 17 2008, 16:45) Я счи... Jun 17 2008, 14:11  Палыч Цитата(wired @ Jun 17 2008, 14:06) взял з... Jun 17 2008, 14:51   wired Цитата(Палыч @ Jun 17 2008, 17:51) Достал... Jun 17 2008, 15:01    676038 Цитата(wired @ Jun 17 2008, 21:01) но на ... Jun 17 2008, 15:09     676038 Цитата(676038 @ Jun 17 2008, 21:09) Добав... Jun 17 2008, 15:12      Палыч Цитата(676038 @ Jun 17 2008, 18:12) Может... Jun 17 2008, 15:32    Палыч Цитата(wired @ Jun 17 2008, 18:01) но на ... Jun 17 2008, 15:09     wired Цитата(Палыч @ Jun 17 2008, 18:09) Чего и... Jun 18 2008, 07:54 Kovrov ничего не упустилию
просто процессор лишний раз па... Dec 6 2006, 19:58 aforestman Посмотрите на "хвостатый экодер". Может ... Dec 8 2006, 13:39 OlegIvanov Нарисуйте на бумажке работу энкодера и сгенерируйт... Dec 13 2006, 05:15 _Pasha Ниасилил выделенный участок осциллограммы. Что это... May 17 2008, 05:04 gte Вероятнее всего моя рука дрогнула. Т.е. в этом мес... May 17 2008, 06:34  _Pasha Цитата(gte @ May 17 2008, 09:34) На один ... May 17 2008, 07:21 gte Смотрел на одном. Но исходя из вида плоскости конт... May 17 2008, 07:51 gte Ради справедливости. Оптические есть с фиксацией и... May 19 2008, 05:15 676038 В своем последнем варианте - по изменению состояни... Jun 17 2008, 15:48 Maik-vs Цитата(676038 @ Jun 17 2008, 19:48) Прост... Jun 18 2008, 09:41  wired Цитата(Maik-vs @ Jun 18 2008, 12:41)... Jun 18 2008, 11:36   Maik-vs Цитата(wired @ Jun 18 2008, 15:36) какое ... Jun 18 2008, 14:33    wired Цитата(Maik-vs @ Jun 18 2008, 17:33)... Jun 18 2008, 15:01    wired Цитата(Maik-vs @ Jun 18 2008, 17:33)... Jun 23 2008, 06:39     Maik-vs Цитата(wired @ Jun 23 2008, 10:39) я прав... Jun 26 2008, 12:46      wired Цитата(Maik-vs @ Jun 26 2008, 15:46)... Jun 26 2008, 14:48 Палыч Цитата(676038 @ Jun 17 2008, 18:48) Прост... Jun 18 2008, 12:47  gte Цитата(Палыч @ Jun 18 2008, 16:47) грамоз... Jun 18 2008, 12:58   Палыч Цитата(gte @ Jun 18 2008, 15:58) При испо... Jun 18 2008, 13:10 gte Именно такой. Я смотрел анализатором переключая по... Jun 18 2008, 13:19 Палыч Посмотрел DS. В нём есть рисунок "Quadrature ... Jun 18 2008, 14:25  gte Цитата(Палыч @ Jun 18 2008, 18:25) Посмот... Jun 18 2008, 15:14 ozzy Цитата(wired @ Jun 18 2008, 14:36) ...
и... Jun 20 2008, 20:37 haker_fox Использую датчики от мышки для управления двигател... Jun 24 2008, 03:33 tremor Читать всю тему влом, поэтому просто приведу свой ... Jun 24 2008, 18:08 haker_fox Цитата(tremor @ Jun 25 2008, 03:08) PEC16... Jun 25 2008, 01:44 tremor ЦитатаТолько вряд ли он выдержит вращения на высок... Jun 25 2008, 01:54 haker_fox Цитата(tremor @ Jun 25 2008, 10:54) В ДШ ... Jun 25 2008, 04:27 sansnotfor мой вариант. энкодер опрашиваю в прерывании таймер... Nov 12 2008, 09:51 Genadi Zawidowski Ух ты... А тема ещй жива... Попробую предложиьть и... Nov 13 2008, 16:41 Andrew O. Shadoura Добавлю немного в копилку. Знаю, не самый лучший в... Nov 15 2008, 12:41 Павлик Приложу свою первую подпрограмку для работы с Энк... Nov 15 2008, 14:14 sansnotfor оооо... заметил, что мой код можно сократить в это... Nov 21 2008, 06:43
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|