ИнтерфейсДо сих пор подобного рода драйверами управляли через LPT порт. Именно для этих целей, готовая плата содержит оптронную гальваническую развязку, чтобы в случае аварии обезопасить очень нежный буфер LPT порта. Это хорошее решение, кроме некоторых нюансов:
- LPT порт стал большой диковинкой
- LPT порт трудно досягаем напрямую, т.к. современные операционные системы оборудованы нулевым кольцом защиты
- LPT порт плохо поддаётся ретрансляции по USB
Короче говоря, LPT порт не из под ДОС-а досягается непросто, а тот-же ДОС с USB-версией уже не работает. Мало того, работа из-под ДОСа ставит крест на параллельном использовании программы-планетария и вэбкаминге на одной машине. То есть, нас это не устраивает абсолютно.
Несмотря на огромное количество реализованных интерфейсов, наиболее гибким с моей точки зрения по прежнему остаётся последовательный порт. Причины следующие:
- Легко доступен програмно как из под ДОС-а, так и Windows/Linux и т.д.
- Хорошо поддерживается микроконтроллерами
- Успешно портирован на USB
- Благодаря com0com легко коммутируется программно, позволяя делать программы-конверторы протоколов с минимальной вознёй, и трудозатратами куда меньшими, чем, к примеру, написание ASCOM-совместимого драйвера
По этому, первым этапом будет плавное слезание LPT и усаживание на СОМ. Как программное, так и аппаратное.
Итак, рассмотрим пациента подробнее.
Краткое описание находим
здесь. Из него можем почерпнуть, что порт имеет 3 выходных линии - TXD, DTR, RTS. Мы-же собираемся управлять двумя двигателями, для кажого из них требуется по два сигнала: STEP1, DIR1, STEP2, DIR2, то есть, сигналов нам недостаточно.
Внедримся в суть процессов. Каждый драйвер, по приходу импулься на сигнал STEP, меняет выходной ток в обмотках мотора таким образом, чтобы ШД провернулся в направлении, определяемом сигналом DIR (0 - в одну сторону, 1 - в другую). Комбинация из двух битов имеет 4 разных состояния, из них только два - значимые, остальные два значения не имеют, но необходимы, иначе невозможно будет сформировать управляющий фронт сигнала. При этом, для сигналов STEP важен фронт, а для DIR - само значение.
Это всё здорово, но у нас нехватает бита, как нам быть? А так: если мы будем управлять всеми 4 битами, мы получим в сухом остатке возможность монтировки сделать шаг одной командой в 8 разных направлениях, условно: вперёд, назад, влево, вправо, вперёд-влево, вперёд-вправо, назад-влево, назад-вправо.
Выбросим диагонали, получится: вперёд, назад, влево, вправо. Как это сделать? Мультиплексированием!
Назначим, что импульс по TXD у нас будет означать выполнение шага, а комбинация DTR, RTS - направление, при этом что один из них будет выбирать ось, которой управляем, второй выбирать направление шага по ней.