Обработка множества инкрементальных энкодеров одновременно
Про инкрементальный энкодер и про обработку его сигналов с помощью МК уже была статья. Вроде-бы ничего сложного — два бита текущего состояния, два бита предыдущего — автомат с 16 состояниями. Рассмотрим эту задачу ещё раз с позиции максимально эффективной (по скорости и размеру кода) обработки сигналов множества энкодеров одновременно.
Обозначим текущее состояние энкодера как «y1» и «y2», а предыдущее, как «x1» и «x2». Всего 4 бита — 16 состояний. Условимся, что направление «Вперёд» у нас будет от первого датчика энкодера ко второму. Запишем все возможные состояния в таблицу.
Таблица 1. № y2 y1 x2 x1 Вперёд Назад Состояние ------------------------------------------------------------------ 0 0 0 0 0 0 0 Стоп 1 0 0 0 1 0 1 Назад 2 0 0 1 0 1 0 Вперёд 3 0 0 1 1 0 0 Не определено 4 0 1 0 0 1 0 Вперед 5 0 1 0 1 0 0 Стоп 6 0 1 1 0 0 1/0 Назад* 7 0 1 1 1 0 1 Назад 8 1 0 0 0 0 1 Назад 9 1 0 0 1 1/0 0 Вперёд* A 1 0 1 0 0 0 Стоп B 1 0 1 1 1 0 Вперёд C 1 1 0 0 0 0 Не определено D 1 1 0 1 1 0 Вперёд E 1 1 1 0 0 1 Назад F 1 1 1 1 0 0 Стоп |
* — строчки 6 и 9 в таблице в принципе означают перемещение назад и вперёд соответственно, в случае если оба датчика энкодера никогда не срабатывают одновременно. Такая ситуация теоретически может иметь место если энкодер это две оптопары и колесо с отверстиями, причем размер отверстия меньше расстояния между оптопарами. На практике это встречается редко, по этому будем иметь этот случай ввиду, но учитывать не будем.
(далее…)