Плата позволяет читать датчики IGR и ЛИР. Поддерживает работу с тремя датчиками одновременно для контроля трёх осей X, Y и Z. Но в нашем случае контролируется только одна ось, подключенная к разъёму X3. Остальные два входа (X4 и X5) заглушены специальной перемычкой.
Как устроен датчик:
Короче говоря, шкала непрерывная, прямоугольной формы и в зависимости от датчика между двумя нулевыми импульсами, должно быть например 1000 импульсов. Ещё есть матрица, которая достаточно плотно прилегает к диску. На матрице так же расположены фрагменты шкалы, но они не вращаются как круг, а располагаются статично. Матрицы смещены относительно друг-друга. Таким образом возникают моменты когда оба рисунка совпадают и в этот момент сигнал меняется. Четыре матрицы расположены так чтобы на выходе получались 2 парных сигнала. Два сигнала прямых и два сигнала инверсных. Но между двумя прямыми и двумя инверсными есть небольшое смещение. Такая смещённая структура позволяет организовать двоичный счёт.
Как читается датчик:
Изначально на вход с датчика подаётся 6 сигналов:
- Счётчик-1
- Инверсия счётчика-1
- Счётчик-2
- Инверсия счётчика-2
- Нулевой импульс
- Инверсия нулевого импульса
В дальнейшем счётчики и импульсы разделены. Счётчики идут на микросхему 7495, а нулевой импульс идёт сразу на PIO-21, где он обрабатывается через прерывание. Из кода стало ясно что при обработке нулевого импульса нужен только прямой сигнал K. Если инверсный сигнал не работает, то и фиг с ним.
Сигналы же счётчиков нужны оба, как прямой так и инверсный. Во-первых так запрограммирована ПЗУ, которая их декодирует, а во-вторых инверсные импульсы счётчиков нужны для работы заглушки. Если их жёстко посадить на ноль, то данный порт отключается. Технически это будет код 0b0101, который на выходе ПЗУ даёт 04.
Расшифровка декодирующего ПЗУ:
- 01 - Вращение вперёд. Подаём высокий уровень для увеличения счётчика.
- 02 - Вращение назад. Подаём высокий уровень для уменьшения счётчика.
- 04 - Нейтральная позиция. Контакт никуда не подключен. Но это позволит сбросить уровень с 01 или с 02.
- 40 - Промежуточный импульс 120 нСек. Сигнализирует об ошибке. На следующем такте переброса данных переведёт адрес во вторую четверть ПЗУ.
- 80 - Аналогично с предыдущим, но переведёт адрес в первую четверть ПЗУ и подаст сигнал на PIO-21 порт B (D5..D7 в зависимости от порта).
Вот эти 40 и 80 (D6 и D7 на ПЗУ) это вероятно идёт на прерывание, которое сигнализирет о том что есть ошибка по датчику. Например если датчик полностью отключен или один или несколько сигналов работают не правильно. Так же эта ошибка возникает если нарушена последовательность 0-1-3-2. Вероятно что схема работает так: в начале идёт импульс на 01 или 02, затем идёт проброс данных, после которого включается 04. Во всём этом шуме всё же проскакивают импульсы 40 и 80, но это не влияет на работу.