Валкодер программная реализация опроса

 

В продолжение статьи о валкодере....

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

Рассматриваем самый простой, недорогой и распространенный валкодер - механический инкрементный валкодер серии PEC11 от BOURNS с фиксацией (detent) положения, используемый как ручка управления ..

Encoder

Напомню...

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

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

Если же, как в рассматриваемом случае, валкодер - это ручка управления, то важно точно и четко зафиксировать начальное и конечное положение (один "щелчок"), пропустив при этом все промежуточные.

Это можно сделать так (подсмотрено и адаптировано):

Пусть линия А валкодера - младший разряд, а В - старший. Тогда при вращении получим:

График

Почему линии не в точках перехода? Потому что это именно "точки перехода" и состояние в них не ясно. Именно в этих точках валкодер "дребезжит". Хотя, микроконтроллер реагирует именно на эти точки перехода :) Кстати, конструкция рассматриваемого валкодера такова, что механическая фиксация положения производится именно когда А и В равны "0".

Если взять за начало отсчета положение А и В равное "00", то при вращении вправо получим (вспомните про автомат) - 00, 10, 11, 01, 00; - при вращении влево - 00, 01, 11, 10, 00. Так как начальное и конечное состояние совпадают, то "00" с одной из сторон можно отбросить.

Так как нам необходимо определять только положения фиксации ("щелчки"), то сам сабой напрашивается простой алгоритм:

- фиксация изменения; - опрос состояния; - запись (со сдвигом) сотояния во временную переменную; - сравнение временной переменной с константами "ВЛЕВО", "ВПРАВО"

На Си это может выглядеть так:

Вызывается при изменении состояния выводов.. по прерыванию, например /но не ИЗ прерывания :) /

...опрос выводов

Из ресурсов МК - два вывода с прерванием по изменению состояния. (Таких, как правило, много в МК). Внутренние PullUp резисторы МК и все... Ни каких внешних деталей.. Только МК и валкодер (как и должно быть).

Впечатления.... Срабатывание четкое. Все попытки "похулиганить" в среднем положении ни к чему не приводят. Теоретически, можно добиться пропуска "щелчка", если "подергать" ручку в среднем положении..но у меня не получилось... Возможно конструктивно линии А и В валкодера имеют не "меандровую" форму, и именно для того, чтобы не было пропусков.

Удачи!.

(C)STAS633

05.09.10г.

Главная

Hosted by uCoz