Валкодер для "домашнего" применения.

 

В общем-то, целесообразность использования валкодера для регулировки обсуждать бессмысленно... На мой взгдяд, при переходе от управления кнопками на управление валкодером существует лишь один недостаток - это ЗАТРАТНОСТЬ такого "перехода"... Все остальные моменты только со знаком плюс: удобство, "привычность" (всю жизнь мы крутим водопроводные краны, ручки газовых (электрических) плит...и т.д.), эстетичность внешнего вида всей конструкции....и еще, еще, еще... :-)

Однако, после принятия решения о применении валкодера в своем устройстве, возникает вопрос - какую конструкцию выбрать? Самой главной характеристикой валкодера является его разрешающая способность (количество... или число импульсов на оборот). И возможность применения валкодера в том или ином устройстве определяется именно этим параметром... Так, если предполагается применение валкодера для перестройки частоты трансивера, да еще с шагом 1...3 Гц, то число импулсов на оборот должно быть максимально возможным ... и совсем другие требования к разрешающей частоте валкодера при использовании последнего для регулировки громкости в муз.центре или настройке FM приемника с шагом 50 кГц.

И если, для трансивера могут применяться валкодеры с разрешением >200 имп/об (датчики положения станков с ЧПУ, например ВЕ-178А у которого z=1000 или 2500!!!... правда, этот датчик размером с банку от кофе... и схема питания и синхронизации еще должна быть) или должно вводиться программное "умножение" разрешающей способности, то для второго случая, вполне подходят "обычные" конструкции (датчики от "мыши", шаговые двигатели ....) с разрешением от 30...до 100 (чаще 60) импульсов на оборот. Кстати, валкодеры, применяемые в муз.центрах имеют близкое к 60 имп/об разрещение.

Рассмотрим второй вариант применения валкодера...

Что же такое, в моем понимании, ВАЛКОДЕР? Валкодер - русское "обозначение" ENCODER - кодека, схемы кодирования (от encode - кодировать, шифровать..), т.е. буквально это - устройсво кодировки... ИМХО: при заимствовании слова в русский язык, к слову "КОДЕР" была добавлена приставка "ВАЛ" (хотя скорее всего, ВАЛКОДЕР - это двукоренное слово), которая все "расставила" на свои места.... и получилось, что ВАЛКОДЕР это - устройство кодировки перемешения "вала" (штурвал парусника IXX века - это, тоже, своего рода, валкодер..:-) ). Слова ВАЛКОДЕР и ЭНКОДЕР - синонимы и употребление любого из них правильно...:-) В электротехнике, разумеется, перемещение вала кодируется в электрические сигналы (импульсы).. :-)

Каковы же принципы работы валкодера? Как закодировать угловое перемещение?... Конечно, можно сделать валкодер на несколько дискретных положений - галетный переключатель, например..., но при этом число положений вряд ли будет больше 25..30 (самый-самый из "галетников", известный мне, это - ПГК-21П1Н ..21 положение...), а для перестройки FM приемника нужно (108-88)/0,05+1=401 положение..., а сколько "положений" нужно для перестройки трансивера с малым шагом?....ясно что "механика" тут не пройдет... :-)

И поэтому предложено (кем не знаю) следующее - две импульсные последовательности (меандры), смещенны относительно друг друга на 90 град... при этом один из сигналов используется для подсчтеча импульсов, а другой для определения направления вращения.

Принцип работы

... итак, допустим, что производить подсчет числа импульсов, будем по фронту посделовательности S1, и в этот же момент, будем определять состояние последовательности S2 (определение направления вращения)...

.. из рисунка понятно, что при вращении влево - фронт S1 всегда будет соответствовать уровню "1" S2.. (M1 или M2 на рисунке), и, наоборот, при вращении вправо - фронту S1 соответствует логический "0" S2..(M3 на рисунке)... заметим, что начальное положение валкодера (Р1 или Р2) не может повлиять на "результат"... :-)

Разные валкодеры отличаются друг от друга лишь способом формирования этих последовательностей..(механический (контактный)- как правило в муз.центрах, оптический - "мыши" ...и механические, и оптические)...

Возможно применение в качестве валкодера шагового двигателя, например от флопи дисководов... (для 5,25 inch дисководов применялся ПБМГ-200-265Ф - 200 имп/об) однако, для формирования последовательностей S1 и S2 необхомо двигатель "дополнинить" схемой формирования... например:

Схема формирования

(сайт автора схемы)

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

..в заключение, приведу пример программной реализации опроса валкодера, подсмотренный на форуме у (С)sov1178:

 

"......Разделим задачи на части (и запишем в порядке убывания приоритета):
1. подсчет импульсов от валкодера
2. пересчет числа импульсов в частоту и программирование синтезатора.
3. индикация частоты на индикаторе.

Подсоединяем один выход валкодера на вход прерывания, а второй на любой порт ввода в контроллере. В прерывании (по фронту или по спаду) считываем состояние этого порта (1-вправо, 0-влево или наоборот, как подключите ), и изменяем счетчик и устанавливам флаг изменения частоты. На этом обработка прерывания заканчивается. Если не крутить валкодер дрелью , то любой контроллер подсчитает все импульсы.

interrupt(PORT1) Port1Int(void)
{
if(PORT1 & 0x1)counter++;
else counter--;
freq_changed=1;
}

Это на случай нормального валкодера с большим Z - здесь нет надобности учетверять или удваивать.

В основной программе делается что-то типа такого:

for( ; ; )
{
Sleep(); //Ждем прерывания (это не обязательно)
while(freq_changed)
{ //Частота была изменена
freq_changed=0; //Сбрасываем флаг
RecalcFreq(); //Пересчитываем частоту в код для ситезатора
ProgSynth(); //Программируем ситезатор
}
UpdateScreen(); //Обновляем экран
}

Пояснения:
Если мы быстро крутим валкодер, то обработчик прерывания подсчитывает импульсы быстро, но частота пересчитывается один раз на несколько импульсов поступивших с валкодера.
Поверьте, что при перестройке 10кГц в сек. нет большой разницы между шагом в 10 Гц или 100Гц, главное, что как закончите крутить частота перестроится точно туда, куда надо.

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

Самое главное - разбить задачу на подзадачи и определить приоритеты для них, а далее обеспечить по возможности соблюдения этих приоритетов.

То, что я здесь написал я не испытывал, так как вопросы распределения времени процессора у меня решает ОС реального времени (поскольку когда забот у контроллера становится очень много это пожалуй единственное эффективное решение, кстати в Айкоме хвастаются тем, что они для ic7800 написали свою ОС реального времени, ну не одни они ) и все делается немного по-другому, но принцип очень похож....."

Вот еще советы, которые помогут в эксплутации валкодера... Привожу свой "пост" на форуме:

..............................

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

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

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

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

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

Удачи!

З.Ы. Подключение конденсатора безусловно снижает надежность конструкции (как минимум из-за введения новых деталей) и для СЕРЬЕЗНЫХ изделий такое решение не является правильным. Однако в бытовых условиях такое решения полностью оправдано.

.................................

Огормное спасибо Alies'у , который "заставил" меня разбираться в валкодерами..:-)

(C)STAS633

27.05.06г-06.11.06г..

Главная

Hosted by uCoz