Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Сейчас приведу только один аргумент, самый очевидный и проблемный: достоинство любого параллельного интерфейса перед последовательным заключается в возможности передавать информацию нескольким устройствам одновременно. Любой последовательный интерфейс, как ни крути, будет передавать ее по очереди.Ваш параллельный интерфейс LPT является «параллельным» до известного предела. "Управлять одновременно" на выход Вы можете только восемью ножками LPT (D0..D7), когда будете писать байт в регистр данных его порта. На остальные сигналы (SELIN, INIT, AUTOF, STROBE) Вам придется подавать информацию, увы, также последовательно по отношению к другим сигналам (D0..D7). Причем задержку между последовательными записями в порт Вы не можете надежно контролировать, ибо будете записывать данные в порты не под MS-DOS, работая на языке ассемблера, а через вызовы API операционной системы, которая кроме Вашей программы занимается еще кучей очень нужных вещей.
Представьте, шаговых двигателей всегда несколько, каждый имеет либо четыре обмотки, либо сигналы DIRECTION, STEP, ENABLE. Плюс есть дополнительные датчики/концевики/кнопки экстренной остановки и пр., от которых информацию надо получать, и быстро.Не получите Вы гарантированно информацию от концевиков, датчиков, кнопок и т. д. быстрее, чем через 50 мс. Задержка будет непрогнозированно скакать в интервале 0.001… 50 мс (а иногда и более). Так устроена операционная система, она Вам не обязана обеспечить реалтайм через свое API. Это Вы называете «быстро»? Шаговые двигатели у Вас будут работать либо неровно, с дребезжанием, либо очень медленно. Теперь давайте сравним с интерфейсом USB. Если у Вас самый простейший, распространенный случай — USB HID, то Вы можете передать сразу 64 байта (то есть одновременно 512 бит, а не 8 и даже не 12 бит). И можете делать это раз в 1 милисекунду, причем эта задержка ГАРАНТИРОВАННАЯ. По ней можно сверять часы.
Есть еще реле шпинделя, которое надо замыкать, размыкать. В итоге, в полноценном 4-х осевом станке ЧПУ почти весь параллельный порт будет задействован, как на вход, так и на выход. Напомню, там 25 пинов. Чтобы удовлетворить такие запросы силами USB надо либо иметь их столько на материнской плате (что сомнительно невозможно), либо пытаться изобразить адресацию через USB для каждого устройства, с разбором пакета на железной стороне. А это, мягко говоря, трудоемко и затратно, хоть скорость в теории и позволяет.Напомню Вам в свою очередь, что в LPT хоть и "25 пинов", но на самом деле там только 17 сигналов, из которых 12 выходы, и 5 входы (остальные пины замкнуты на землю). Действительно, в случае использования LPT у нас есть жесткие ограничения как по аппаратуре (мало ножек на вход и на выход), так и по быстродействию, накладываемые операционной системой. Если же использовать USB, то можно применить специальные микроконтроллеры с аппаратным интерфейсом USB, и при этом не нужно использовать несколько портов USB, достаточно одного. Такие микроконтроллеры сейчас достаточно дешевы и доступны. Ограничений по ножкам/портам практически не будет, и быстродействие системы возрастет на порядок. Можно действительно спроектировать реалтаймовую систему, если использовать firmware микроконтроллера.
Это так, в общем виде, чтобы объяснить на пальцах. В жизни все еще более сложно. А USB-разъем хорош для взаимодействия с одним устройством. Даже разного рода USB-хабы задачи все равно не решат. Есть несколько интересных железок, которые помогают решить отсутствие LPT-порта на материнской плате (разумеется, что урезанные LPT-USB переходники не решат проблемы). Я о них тоже расскажу в статье.В жизни я хотел бы подключить свой станочек не к LPT, а к USB, и поуправлять им программой на MATLAB. И только через один порт USB, без всяких хабов USB, сколько бы шаговых двигателей, релюшек, концевиков, энкодеров и кнопок в нем не было. Все еще надеюсь, что это не должно быть запредельно сложно. Про Ваши железки почитать было бы интересно.
Matlab-бот, тёплый ламповый