Как шариковая мышь знает направление?

27

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

Как рассчитывается направление?

ZAF
источник
1
Я давно задумывался над этим, спасибо, что спросил!
mskfisher
3
@ кто бы это ни отрицал - ты мог бы хотя бы сказать Зафу, почему ты это сделал? Это совершенно разумный вопрос
stevenvh

Ответы:

36

Там не просто пара ИК-передатчик / приемник, их две . Между передатчиками и приемниками имеется шлицевое колесо, которое при вращении вызывает последовательность импульсов в приемнике. (Свет от передатчика заблокирован, может пройти, снова заблокирован и т. Д.)

введите описание изображения здесь

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

введите описание изображения здесь

Это означает, что импульсы одного приемника предшествуют импульсам другого на ряд градусов (в идеале 90 °). Если колесо вращается в другом направлении, те же самые импульсы теперь уступают другим.

введите описание изображения здесь

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

edit (об абсолютных кодировщиках)
Я не был полностью удовлетворен моим ответом на комментарий JGord (некоторые неточности), поэтому это повторение
. Описанная выше система известна как инкрементальный кодировщик, потому что она обнаруживает относительные изменения от одной позиции к другой. За полный оборот коды повторяются несколько раз, поэтому вы не можете узнать свою абсолютную позицию, просто взглянув на код.
Для преодоления этого существуют абсолютные энкодеры . Вместо двух каналов в квадратуре у них намного больше каналов, создающих уникальный шаблон для каждой позиции вращения. 10-канальный кодировщик может различать или 1024 различных положения. Датчики вала у роботов еще точнее. 210

введите описание изображения здесь

Конкретный шаблон типичен для кодирования Грея .

о кодировании Грея
Обычный двоичный код имеет тот недостаток, что переходы кода могут создавать ошибочные коды во время перехода. Возьмем, к примеру, изменение с 0111(7) на 1000(8). Если крайний левый бит немного быстрее остальных, вы увидите на мгновение 1111(15), который полностью выключен.
Код Грея преодолевает это, переставляя коды так, чтобы за один раз менялся только 1 бит.

Однако абсолютные энкодеры не помогут вам найти абсолютное положение мыши, потому что колесо вращается несколько раз, пока вы двигаете мышь. «Уникальный» шаблон будет повторяться каждые несколько мм и не так уж уникален. Кроме того, всегда можно перемещать мышь, когда компьютер выключен, или вы можете поднять мышь и опустить ее немного дальше. Оба действия останутся незамеченными.



-

stevenvh
источник
Изображение в ответе сломано.
Заф
Вопрос: Этот двухканальный оптический датчик работает для определения положения и скорости, но что, если вам нужно знать общее расстояние? Так, например, что если вы включите его несколько раз, выключите устройство, включите его позже и включите еще несколько раз. Конечно, вы могли бы записывать расстояние до энергонезависимой памяти каждый раз, но есть ли механический способ решения этой проблемы? Я думаю в направлении ловко размещенного третьего канала ... но я ничего не могу придумать.
НикХалден
@stevenvh - они работают над этим , URL-адреса меняются со стандартного i.imgur.comна stack.imgur.com.
Кевин Вермеер
@stevenvh Хм, интересно, кто-нибудь задумывался над тем, чтобы попробовать использовать последовательности DeBruijn, а не серый код ...
NickHalden
1
@stevenvh хорошо, в основном есть два приемника, размещенные в одном устройстве. Спасибо.
Заф