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

Jul 27, 2004 27 Replies

VB> Рановато вроде как. Сомневаюсь. Проблема возникает именно при медленном VB> вращении, если крутить быстро, то все чисто.

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

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

Здравствуй, Arcady!

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

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

formatting link
Alex

28-Jul-04 08:19 Vladislav Baliasov wrote to Alex Torres:

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

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

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

wbr,

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

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

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

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

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

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

Георгий

Как связь, _Arcady_ ? ;-)

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

До связи, Arcady! /Edward/ LocalDate 02 Aug 04 - LocalTime 11:15 ...

formatting link
мыло на: nеdеliаеv(ухо)мэйл.ру

Привет Vladislav!

Втp Июл 27 2004 22:14, Vladislav Baliasov -> Alex Torres:

VB>>> Дальше закрываю прерывания на время антидребезга. AT>> Постой, что за валкодер? VB> А, я забыл сказать, что это механический контактный (PEC16 от Bourns).

VB>>> все равно при пошаговом переборе не очень надежно. Я имел дело с таким валкодеpом. Использовал опpос пpимеpно 500Гц и пpогpаммное подавление дpебезга по обоим каналам. Все pаботает. Единственный недостаток - в них плохая фиксация позиции, иногда останавливается на пол-шага и от вибpации на одну из соседних позиций слетает.

Hа этом все, пока. Anton Abrosimov. ... Hет повести печальнее на свете, чем повесть о заклинившем Reset'е

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required