Самодельный установщик компонентов OpenPnP

в 13:49, , рубрики: pick and place, Производство и разработка электроники, Электроника для начинающих

В далеком 2012 году началась моя деятельность в области электроники, в то время интернет познакомил меня со многими хорошими людьми, с некоторыми из которых мы общаемся и по сей день. Обычно мы делимся опытом, успехами и неудачами, обсуждаем новинки электроники, различные идеи и что нового можно разработать или изучить.

С тех пор, родилась некая традиция в начале каждого года составлять TODO лист, в котором записывались любые идеи, в том числе и бредовые. В процессе лист пополнялся, а в конце года подводились итоги, что получилось что нет.

На новогодних праздниках перебирал старый винт и случайно наткнулся на те самые записи. Обнаружилось, что все так или иначе уже реализовано. Все, кроме одного, SMD установщика.

Идею его создания мы обсуждали неоднократно, но пугала механика — а вдруг не получится. Поэтому это все же это было скорее как не осуществимая мечта.

Под влиянием ностальгии, полез смотреть ролики, вздыхать, осознавая что мечта так и осталась мечтой. Затем чисто из любопытства, посмотрел что предлагает мир opensource и наткнулся на Openpnp. Не скажу что не слышал про него ранее, но как то мало тех, кто повторил конструкцию, это сильно настораживало. В этот раз их сайт был изучен более детально, среди прочего нашелся бом лист, прошивка для контроллера и программа для ПК. Затем, отключив на секунду мозг, я заказал первую деталь из списка и решил что отступать поздно.

Надеюсь, из данного вступления стало понятно, что автор ранее не собирал pick and place станки. Не было цели и делать коммерческий продукт. Поэтому, не исключаю что далее по тексту будут ошибки в терминах и некоторые выводы могут быть неверными. Мне просто было интересно повторить устройство, разобраться с его принципами и попробовать свои силы. Вот этим и хотелось бы поделиться с читателем.

Первое, что вводит в некое заблуждение, это вообще что такое OpenPnP. Даже сегодня сложно ответить на этот вопрос. Железо может сильно отличаться, например в основе моей сборки лежит железо от OpenBuilds и контроллер Smoothieboard, обе фирмы не имеют никакого отношения к OpenPnP. Вы можете с легкостью выкинуть любой компонент железяки и поменять его на другой. Общими остаются принципы: есть одноименная программа для ПК, в которую вы загружаете pick and place из своего трассировщика, далее программа выдает на контроллер команды, едь туда, включи то.

Внешний вид программы.
Самодельный установщик компонентов OpenPnP - 1

Как уже выше упоминалось, основной каркас взят из OpenBuilds, в качестве направляющих используются V-slot рейки. Для меня они были открытием, в двух словах сложно объяснить все их плюсы, но их них очень просто делать любые конструкции.
Самодельный установщик компонентов OpenPnP - 2

Если нужно что то прикрепить к рейке, то в нее сбоку вставляются пластины с резьбой, официальное их название t-nut.
Самодельный установщик компонентов OpenPnP - 3

Они бывают одинарные и двойные. С виду похоже на обычную пластину с резьбой, я даже в начале предполагал найти что то похожее в местных магазинах, так как стоят они не дешево. Однако пусть вас не вводит в заблуждение их кажущаяся простота. У них резьба выступает над пластиной и это оказалось очень важно при затягивании винта. Крепление получается очень добротным.

Как осуществляется движение по осям? Основная идея простая в боковые углубления вставляется каретка, к верхней площадке которой можно уже крепить все что угодно.
Самодельный установщик компонентов OpenPnP - 4

Каретка сама по себе простая — это пластина, с четырьмя роликами. Положение роликов регулируется гайками — эксцентриками, они помогают настроить прижим колесиков к рейке. От этого зависит на сколько туго будет двигаться она.

С каждого конца на рейку одевается концевая пластина.
Самодельный установщик компонентов OpenPnP - 5

Сбоку пластины имеются отверстия, к которым крепится мотор типа Nema17. На мотор одевается зубчатое колесо, которое тянет ремень, ремень двумя концами крепится к каретке. Таким образом когда мотор крутится в одну сторону, каретка едет вперед, когда в другую — назад.
Самодельный установщик компонентов OpenPnP - 6

На втором конце рейки просто вал, по которому скользит ремень.
Самодельный установщик компонентов OpenPnP - 7

Теперь тонкости которые возникли. Концевая пластина. Мне не известно насколько в оригинале она жесткая, дело в том что цены на openbuilds по большей части адекватные, однако не адекватная цена на доставку. Поэтому практически все покупалось с али. В том числе и эта деталь.

Пластины очень легко гнутся, а нижнее «ухо» так и норовит отломаться. В оригинальной сборке, каркас крепится именно за него, мне же пришлось использовать боковые отверстия. Но в остальном это не сыграло роли, на рейке держится мертво.

По поводу реек. Это одна из немногих деталей, которые я покупал в России, потому что есть мнение что из Китая их везут гнутыми. Проверять так ли это желания не было, но купить их у местных было тем еще квестом. По объявлениям они есть везде, по факту или нет в наличии, или никто не хочет с вами связываться из за 3м. Очень часто под видом V-slot, предлагают T-slot, которые очень похожи и более доставаемые. Есть мнение что они заменяемые в данном случае, однако проверять не решился. В итоге они оказались в наличии только в одном месте, за доставку пришло заплатить больше чем цена самих реек.

Винты. В оригинале весь крепеж с головками под шестигранник. В начале было не понятно зачем. Во первых их сложно достать нужной длины, во вторых они стоят на порядок дороже. Поэтому взял часть крепежа под крестовую отвертку, честно пожалел об этом не раз. Шестигранник в разы проще откручивать, а когда еще не понимаешь как это устроено, то приходилось по 10 раз откручивать прикручивать.

Размер поля. Длина оригинальных реек 400х400. Думаю, многие как и я, редко собирают платы большого размера. Поэтому размер мне показался огромным. На практике это оказалось не так. Хоть и небольшую часть, но отъедают концевики, еще часть уходит на угловые пластины, еще часть на головку и т.п. В итоге реальное поле чуть больше 250х250, а это уже не так и много.

Пружины для натяжения ремней. В начале я их проигнорировал. Показалось что это бесполезная вещь. На практике в первые прогоны по оси Y постоянно была небольшая погрешность. В итоге пришлось разбираться, что такое пружины со странной маркировкой 7/32".
Самодельный установщик компонентов OpenPnP - 8

В остальном с основой вообще не возникло вопросов, механика собирается очень просто. Полный процесс сборки одной направляющей хорошо показан на видео.

Возможно у вас возникнет такой же вопрос, как и у меня, почему было не взять шпильку с резьбой в качестве направляющих? Зачем эти рейки, ремни, зубчатые колеса? Есть мнение, которое попалось на одном из форумов, что вал под собственным весом будет иметь небольшое искривление в центре, которое будет создавать ошибку. А делать точный вал будет намного дороже стоить.

Тут же возникнет следующий вопрос, насколько вся эта конструкция точно ездит? Честно, не знаю как оценить. Субъективно — очень точно, превзошло ожидания. Если поставить железную линейку и кататься вдоль нее, контролируя по камере, то миллиметр в миллиметр. Явного накопления ошибки я не заметил.

Следующая часть повествования — контроллер. В оригинальном OpenPnP стоит Smoothieboard, ориентированная на 3D принтеры, однако это не мешает их приладить к pnp станку. Если глубоко копнуть, то на борту у него стоит микроконтроллер LPC1769 и пара драйверов шаговых двигателей. Пусть некоторые читатели меня осудят, но цена в 150 евро без учета доставки, для платы такого уровня мне показалась неадекватной. Самое интересное, что плата позиционируется как opensource, но вменяемой версии pcb или герберов мне так и не удалось найти.

В итоге, проблема решилась сама собой, обнаружилось что у китайцев есть аналогичная плата.
Самодельный установщик компонентов OpenPnP - 9

Надо сразу оговориться, что платы очень похожи, но не идентичны. Камни одинаковые и расположение GPIO похоже, поэтому софт подходит. И тем не менее мелкие различия есть. Все настройки хранятся в текстовом файле на карте памяти. Настроек очень много и это тема для отдельной статьи. На борту есть Ethernet, если включить который, можно покататься по осям через веб браузер.

В остальном все управление платой осуществляется через USB-UART, на ПК определяется как обыкновенный виртуальный COM порт, т.е. программа кидает по уарту G коды, а контроллер только их исполняет. Всего у станка 3 основных оси: X — верхняя балка, когда головка ездит влево вправо, тянет только один мотор. Y — нижние 2 рейки, вверх, вниз тянут два мотора одновременно. Z — опускание сопла вверх, вниз. При этом станок использует правостороннюю систему координат, т.е. правый нижний угол — дом это 0, 0. Дом определяется концевиками, по сути обычные GPIO. Также используется дополнительная ось С, которая отвечает за разворот компонента.

По проблемам контроллера сказать особо нечего, но глобально все болячки присущие COM порту налицо — иногда зависает сам порт до перезагрузки платы. Была бага, что контроллер иногда ехал не в ту сторону, но свежей прошивкой полечилось.

Теперь самое главное, головка. Вот с ней больше всего было непонятностей. Тут стоит объяснить, как вообще захватывается компонент — вакуумом. Для этого используется 12В насос, от него трубка идет к клапану. В оригинале, насос работает только когда подъезжает к компоненту, у меня на плате не оказалось большого полевика, как на оригинальной плате, поэтому временно оставил насос тарахтеть постоянно.

Клапан в нормальном состоянии закрыт, т.е. воздух не засасывается. Когда головка подъезжает к компоненту, подается сигнал, клапан открывается и насос засасывает воздух через трубку. Трубка цепляется к мотору с полым валом, с другой стороны мотора через переходник подсоединяется сопло.

С чем пришлось столкнуться. Трубка должна быть полиуретановая, потому что она достаточно жесткая, чтобы не передавливаться. Моторы Nema8 абсолютно одинаковые на картинке, однако продавец прислал мотор не с гладким валом, из за чего было невозможно закрепить переходник с соплом. Пришлось заказывать новые.

Само сопло в оригинальном боме было такое
Самодельный установщик компонентов OpenPnP - 10

Опыты показали что им пользоваться невозможно, как видно на фото оно представляет собой кусочек трубки. Из-за этого возникает куча проблем с калибровкой, так как сопло все равно жестко упирается в компонент. Между тем на видосе, на который я молился, было другое сопло с пружинкой, которое в итоге пришлось дозаказывать.
Самодельный установщик компонентов OpenPnP - 11

Опускается сопло за счет Z-мотора, т.е. он поворачивается и коромыслом давит на деталь держащую C-мотор (тот самый с полым валом).
Самодельный установщик компонентов OpenPnP - 12

Та в свою очередь, двигается по линейной направляющей и соединена пружинкой, т.е. когда двигатель не давит на Z ось, то за счет пружинки головка возвращается в исходное состояние. Ось C, тот самый мотор с полым валом :) предназначен для того чтобы разворачивать компонент.

Теперь самое главное как же эта вся конструкция работает в сборе? Запускается программа на ПК. В нее загружается pick and place из вашего трассировщика. Вы выбираете нужные компоненты и указываете fiducial point, т.е. точки привязки на плате. Они на плате выглядят как медные кругляши.
Самодельный установщик компонентов OpenPnP - 13

Едете в «дом», т.е. в правый нижний угол до концевиков, чтобы станок понял свои координаты. Далее нужно указать, где расположена плата. Для этого, нужно руками подъехать к нижнему левому углу платы, весьма приблизительно. Запускаем поиск fiducial point, эта процедура нужна чтобы понять точное начало координат и угол наклона платы. Поиск производится камерой, которая расположена на головке — верхнее зрение. Распознавание точек производится с помощью opencv.

Итого, известно положение платы, за счет верхнего зрения и компонентов, за счет относительных координат, выгруженных из pick and place. Остается только запустить процесс расстановки.

Вот тут наступает момент, на котором пока я остановился. Как выяснилось запустить движение по осям и опускание сопла не самое главное в этом деле.
Самодельный установщик компонентов OpenPnP - 14

Проблемой оказалась подача компонентов. Самый простой вариант предполагает, что лента с компонентами будет наклеена где то рядом с платой. Так же как и в случае с координатами платы, для каждого компонента нужно указать, где находится лента. Сказать по правде, процесс получается довольно таки утомительным, поэтому нужно сразу делать автоматическую подачу компонентов, однако это совсем другая история.

Итак, чтобы подвести черту к всему вышесказанному. Опыт был интересный. И да он стоил того, хоть пока это еще не законченное решение. Механика не так страшна, как ее малюют. Мир opensource хоть все еще и не такой приветливый, но все таки нужно сказать спасибо всем, кто самоотверженно трудится на благо народа. Очень надеюсь, что будет еще что рассказать по этой тематике в будущем.

Первые тесты со старым соплом

Тесты с новым соплом

Автор: Артур Тележкин

Источник


  1. Андрей:

    Продолжение есть. Закончил станок? Сейчас вожусь с таким же. Пока механика собирается.

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js