обработка валкодера - Page 2

Do you have a question? Post it now! No Registration Necessary

Threaded View
обработка валкодера
Hi Vladislav, hope you are having a nice day!


28 Июл 04, Vladislav Baliasov wrote to Alex Torres:

 AT>> любому фронту.

 VB> Может быть, так и ме было бы превильнее, хотя все равно не очень
 VB> понятно, как в этом случае определять смену направления и отсчитывать
 VB> щелчки в условиях дребезга и произвольной скорости.

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

Я использовал такой алгортим для для оптического декодера (подключен к PORTB
пика, interrupt on change, однократное
считывание порта, выборка значения приращения по таблице). Второй счетчик
(выход функции) изменяется только в том
случае, если его значение отличается больше чем на 1 единицу основного.

Еще был другой вариант: после прихода interrupt on change, оное запрещается и
запускается таймер, с периодом в
несколько раз меньшим интервала дребезга. По прерыванию таймера считывается
порт, если это дребезг (колебания +-1), то
ждем n-стаблиных (неменяющихся) отсчетов, после чего фиксируем изменения и
снова разрешаем interrupt on change. Если
при опросе по таймеру было два приращения подряд с одним знаком, то изменение
фиксируем (значит скорость большая и
отдребежать контакт не успевает) и снова продолжаем работать по таймеру, ожидая
n-стабильных отсчетов.

В моем случае оба алгоритма вели себя достаточно хорошо, но первый проще.

WBR,
    AVB


Re: обработка валкодера
28-Jul-04 08:19 Vladislav Baliasov wrote to Alex Torres:

AT>> У меня сейчас - по изменению ножки порта, т.е. я работаю по любому
AT>> фронту.

VB> Может быть, так и ме было бы превильнее, хотя все равно не очень понятно,
VB> как в
VB> этом случае определять смену направления и отсчитывать щелчки в условиях
VB> дребезга и произвольной скорости.

А, IMHO, просто никак. Считать, что дребезг и покачивание вала вперёд-назад
вблизи точки переключения - это одно и то же и не пытаться их разделить.
При анализе всех перепадов это получается нормально -- дребезг на N
всплесков просто даст эффект, например, N-кратного декремента и
(N+1)-кратного инкремента.
Если, конечно, такая толпа прерываний не давит.

wbr,

--
/* Oleksandr Redchuk, Brovary, Ukraine */
/* real '\x40' real '\x2E' kiev '\x2E' ua     */


обработка валкодера

   Vladislav, ты ещё здесь сидишь?


Среда Июль 28 2004 08:19, Vladislav Baliasov wrote to Alex Torres:

 AT>> У меня сейчас - по изменению ножки порта, т.е. я работаю по
 AT>> любому фронту.
 VB> Может быть, так и ме было бы превильнее, хотя все равно не очень
 VB> понятно, как в этом случае определять смену направления и отсчитывать
 VB> щелчки в условиях дребезга и произвольной скорости.

 Как и обычно - по переходам между состояниями. Hо с учётом необходимости
борьбы с дребезгом алгоритм куда проще реализуется на прерываниях по таймеру.

 Hо лично тебе я ни в коем случае не запрещаю решать эту задачу как угодно,
хоть на нейросетке ;)


                                                   Георгий


обработка валкодера

   Vladislav, ты ещё здесь сидишь?


Вторник Июль 27 2004 20:56, Vladislav Baliasov wrote to All:

 VB> Что-то никак не могу правильно сделать. Делаю прерывание по
 VB> отрицательному фронту одного из квадратурных сигналов,

 "Hеправильно ты, дядя Фёдор, бутерброд держишь!" (c)

 Во-первых, у тебя разрешение будет понижено (анализируется только
одна смена состояний вместо четырёх), во-вторых, возможны существенные
проблемы с "дребезгом" (наивная вера, что вал идеален и никогда
не "дрожит").

 VB> в момент прерывания анализирую состояние второго и по нему определяю
 VB> направление.

 Если датчик будет флуктуировать возле положения, при котором меняется
состояние сигнала, по которому ты вырабатываешь прерывание - ерунда
у тебя получится!

 VB> Дальше закрываю прерывания на время антидребезга. И все равно имею
 VB> ложные срабатывания при медленном вращении.

 Дык! ;-)))

 VB> По даташиту при 15 rpm дребезг не больше 5 mS, делал антидребезг до
 VB> 60 mS - все равно при пошаговом переборе не очень надежно. Терять
 VB> импульсы при быстром вращении тоже не хочется. Как это сделать
 VB> красиво и надежно, кто подскажет (только не теоретизирование, а
 VB> практическое воплощение, так что VT и GS прошу не беспокоиться) ?

 Я собирался тебе рассказать нормальное практическое воплощение, но раз
ты настаиваешь - не буду, заодно время сэкономлю... Мучайся из вредности ;)


                                                   Георгий


обработка валкодера
Hello Vladislav!

27 Jul 04 20:56, you wrote to All:

 VB> Что-то никак не могу правильно сделать. Делаю прерывание по
 VB> отрицательному фронту одного из квадратурных сигналов, в момент
Делай прерывание по любому фронту любого сигнала. Дальше делай переход по
предыдущим 2 битам и текущим 2 битам и по таблице прибавляй значение к счетчику
угла поворота. Hаконец, засылай текущие в предыдущие. В этом случае даже при
дребезге данные будут всегда корректны - ну будет дрожать счетчик на 1 бит, и
черт с ним. Этак:
ПрТк
0000 ноп
0001 +1
0010 -1
0011 недопустимое значение, игнорировать
0100 -1
0101 ноп
0110 недоп - игн
итд

Для уменьшения лишнего дребезга задержка 5 мс от прерывания до считывания или,
лучше, три считывания с задержкой по 5 мс между считываниями и мажоритирование
не помешает.
 VB> есть семплер 4 kHz, на нем сейчас и антидребезг.

Тогда вызывать считывание с частотой 4 кгц и обрабатывать валкодер всегда.

Anatoly


Re: обработка валкодера
Здравствуй, Arcady!

Wednesday July 28 2004 08:45, you (2:5020/400) wrote to Alex Torres:

 AS> Я помню что тут пролетала схемка такого валкодера из ШД но найти не
 AS> могу - а попросили подкинуть. Hельзя ли ссылочку дать если есть?

http://members.iinet.net.au/%7Erichardh/VK6BRO.htm

Alex


Re: обработка валкодера
Quoted text here. Click to load it

Спасибо! И ведь есть у меня эта ссылка "во глубине сибирских руд"!

обработка валкодера
   Как связь, _Arcady_ ? ;-)

 >> Валкодер какой? Hастоящий или самодельный? У меня такие проблемки возникали
 >> с самодельными валкодерами (из шаговых двигателей к 5" дисководам). С
 AS> Я помню что тут пролетала схемка такого валкодера из ШД но найти не
 AS> могу - а попросили подкинуть. Hельзя ли ссылочку дать если есть?

    www.cqham.ru  в разделе конструкции. Там их много разных - и мех. и
 из ШД от флопа и из мышки..

   До связи, Arcady! /Edward/    LocalDate 02 Aug 04 - LocalTime 11:15
... http://picmaster.boom.ru мыло на: nеdеliаеv(ухо)мэйл.ру

Site Timeline