Pull to refresh

Comments 11

автор молодец и заслуженно! спасибо!

PS мы согласны с тем, что с технической точки зрения много что стоило бы доделать и переделать, но цель ставилась подарить новогоднее настроение :) однако замечания учтем в следующем году ;)
я прихраню скрипт :)
Почему бы Вам не заняться управлением из MATLAB шаговыми двигателями через USB, и написать об этом статью?
про управление через LPT мне пока написать нечего. управлять я научился, но пока не закончил собственно устройство.
я могу рассказать и показать, как крутить двигатели вперед/назад из матлаба, но, согласитесь, это не очень интересно. тем более, что делаю я не ЧПУ и не робота-машинку, а гораздо более изощренное устройство.

обещаю, что расскажу, в статье, почему не стоит делать это через USB, а также как это сделать, если все-таки очень захочется.
Ого! Смелое утверждение. Не стоит подключать внешние устройства к компьютеру через USB? И стоит это делать через LPT? Почему-то все производители материнских плат и ноутбуков думают иначе.
я конкретно про шаговые двигатели.
Чем же шаговые двигатели провинились? Почему я не имею права хотеть управлять ими через USB? Нету у меня к примеру интерфейса LPT. Но хочу сделать автоматический сверлильный станок для плат. И MATLAB тоже интересен. Что, нет способа никакого? Только LPT?
Когда у меня в голове только начала зарождаться идея моего будущего устройства, мне пришлось копнуть эту тему. Сначала мне тоже казалось дикостью наличие LPT порта во всех предлагаемых схемах. Но в итоге я понял, почему, и согласился.
Я действительно расскажу об этом подробнее в статье.

Сейчас приведу только один аргумент, самый очевидный и проблемный:
достоинство любого параллельного интерфейса перед последовательным заключается в возможности передавать информацию нескольким устройствам одновременно. Любой последовательный интерфейс, как ни крути, будет передавать ее по очереди.
Представьте, шаговых двигателей всегда несколько, каждый имеет либо четыре обмотки, либо сигналы DIRECTION, STEP, ENABLE. Плюс есть дополнительные датчики/концевики/кнопки экстренной остановки и пр., от которых информацию надо получать, и быстро.
Есть еще реле шпинделя, которое надо замыкать, размыкать. В итоге, в полноценном 4-х осевом станке ЧПУ почти весь параллельный порт будет задействован, как на вход, так и на выход. Напомню, там 25 пинов. Чтобы удовлетворить такие запросы силами USB надо либо иметь их столько на материнской плате (что сомнительно невозможно), либо пытаться изобразить адресацию через USB для каждого устройства, с разбором пакета на железной стороне. А это, мягко говоря, трудоемко и затратно, хоть скорость в теории и позволяет.

Это так, в общем виде, чтобы объяснить на пальцах. В жизни все еще более сложно. А USB-разъем хорош для взаимодействия с одним устройством. Даже разного рода USB-хабы задачи все равно не решат. Есть несколько интересных железок, которые помогают решить отсутствие LPT-порта на материнской плате (разумеется, что урезанные LPT-USB переходники не решат проблемы). Я о них тоже расскажу в статье.
Сейчас приведу только один аргумент, самый очевидный и проблемный: достоинство любого параллельного интерфейса перед последовательным заключается в возможности передавать информацию нескольким устройствам одновременно. Любой последовательный интерфейс, как ни крути, будет передавать ее по очереди.
Ваш параллельный интерфейс 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, сколько бы шаговых двигателей, релюшек, концевиков, энкодеров и кнопок в нем не было. Все еще надеюсь, что это не должно быть запредельно сложно. Про Ваши железки почитать было бы интересно.
Очень приятно встретить в оппоненте серьезно подготовленного специалиста. Я просто не учел хабр-аудитории. Я принимаю большинство из сказанного, хоть это и не меняет сути, но не всё.

Просто чтобы не разводить оффтопик-дискуссии, подчеркну еще раз: этого не стоит делать, это нецелесообразно. Но не невозможно, именно поэтому я расскажу, как это сделать, если очень захочется.

Я предлагаю перенести дискуссию в тематическую статью чуть позже.
Sign up to leave a comment.

Articles