Полуавтоматический сверлильный комплекс для печатных плат на arduino и python

КДПВ


Предисловие


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


Концепция


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


Чтобы немного упростить устройство мы решили, что обрабатываемая печатная плата будет перемещаться только по условной оси Х (вдоль корпуса станка), по оси Y же будет двигаться само сверло. Сверло и плата будут перемещаться с помощью шаговых электродвигателей, управляемых Arduino. Команды на Arduino будут отправляться по эмулируемому поледовательному интерфейсу из клиентского приложения, где пользователь будет указывать точки для сверления.


Разработка устройства


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


Механика


Для перемещения по осям Х и Y применены пары винт – гайка с резьбой. Применение резьбы с шагом 1 мм удобно тем, что за один оборот винта осуществляется перемещение на 1 мм. Учитывая, что для примененных шаговых электродвигателей требуется 48 импульсов на один оборот вала, то шаг перемещения по Х и по оси Z составил примерно 0,02 мм. Существует много факторов, из-за которых величина шага может отличаться от расчётного. Например, неровности винта, неточности в изготовлении деталей, люфт некоторых элементов и т.д. Поэтому в конструкции станка были приняты некоторые меры, для уменьшения влияния наиболее существенных из них (дополнительные самодельные полимерные гайки; плавающая посадка электродвигателей, позволяющая им при работе перемещаться в определенных пределах). Каретки для платы и узла сверления перемещаются вдоль осей Х и Y, соответственно, по направляющим из DIN-рейки. Вместе соприкосновения каретки для платы и направляющих для уменьшения трения применена фторопластовая лента.


image


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


image


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


Электроника


Схема 1

schema_2


Схема 2

schema_2


Плата Arduino питается непосредственно от USB порта. Напряжение 5 В с платы Arduino используется в станке для питания датчиков.
Для упрощения схемы и по соображениям электробезопасности для питания электродвигателей использован готовый внешний источник питания от нотбука с выходной мощностью 75 Вт (19 В; 3,9 А).


Для подключения шаговых электродвигателей выбраны типовые микросхемы драйверов (D2, D3) с ключами на составных транзисторах и выводами с открытым коллектором. Аналогичная микросхема D1 применена для согласования выходов платы Arduino с транзисторными ключами. Имеющиеся электродвигатели рассчитаны на различные рабочие напряжения. Для их питания от одного источника были применены гасящие резисторы R9 … R11. Рабочий ток электродвигателя М3 превышает рабочий ток одного канала выбранных микросхем, поэтому для питания каждой из его обмоток задействовано по два канала микросхемы D3, соединенных параллельно.


image


Привод сверления М1 имеет рабочий диапазон напряжений от 6 до 24 В и избыточную мощность и скорость вращения. Для обеспечения нужного режима сверления на ключ VT1 подается не постоянный сигнал, а ШИМ с подобранными параметрами.


Состояние концевых выключателей SB2 … SB7 важно только во время движения вдоль определенной оси, поэтому для экономии входов/выходов контроллера они попарно объединены в матрицу 3х2 и включены между входом и выходом управления одним из каналов. При движении по осям Х и Y сверло должно находится в верхнем положении во избежание поломки. Исходя из этого, концевой выключатель SB1 подключен непосредственно между входом и источником 5В, для контроля во время любого из движений.


Разработка ПО


Прошивка устройства написана на языке Arduino, а клиенское приложение разрабатывалось на Python для GNU/Linux.


Прошивка устройства


Был разработан простой протокол управления станком. Формат команды следующий: <method>: [arg1 [arg2 [...]]]\n. После выполнения команды станок возвращает результат. Обычно это 0 или 1 (False или True).


Система команд:


Команда Описание команды Возвращаемые значения
connect: Команда выполняется в 2 этапа. При получении станок сразу же отправляет в ответ res: 1. это позволяет клиентскому приложению определить, к какому именно COM порту подключен станок. Затем станок инициирует процедуру запуска, по окончании которой отправляет ready: 1. |res: 1 + ready: 1 в случае успеха;res: 1 + error: 1 в случае отсутствия питания
touch: Попытка коснуться платы сверлом. res: 1 при касании; res: 0 если плата не обнаружена
move: x y Перемещает сверло на заданные координаты res: 1 при успешном завершении; res: 0 при ошибке (координаты ошибочны; обрыв питания при выполнении)
drill: x y Перемещает сверло на заданные координаты и сверлит отверстие res: 1 при успешном завершении; res: 0 при ошибке (ошибки команды move; отсутствие платы)
coords: Возвращает координаты местоположения сверла res: x y

Возращаемые ошибки:


Ошибка Описание ошибки
error: 0 Команда не распознана
error: 1 Отсутствует питание

Демонстрация работы основных команд станка

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


  • любые команды кроме connect должны игнорироваться, если с момента включения не была выполнена процедура запуска (откат всех осей и сброс координат в ноль)
  • запрещено двигаться по осям X и Y с опущенным сверлом
  • необходимо сразу прекращать движение по оси при достижении концевого выключателя
  • необходимо возвращать error: 1, если на момент получения команды, связанной с работой двигателей, отсутствует питание
  • при исчезновении питании при выполнении команды, связанной с работой двигателей, необходимо завершить команду и вернуть 0 (False)

Клиентское приложение


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


  • пользователь запускает приложение и указывает картинку(чертеж платы) для работы
  • указывает на чертеже 2 любые точки
  • переходит в режим указания точек на станке. В этом режиме можно управлять положением сверла, а также касаться платы. Пользоватль должен последовательно навестись на каждую из точек, указанных ранее на чертеже. Это позволяет сопоставить системы координат чертежа и станка
  • пользователь расставляет точки для сверлния на чертеже
  • приложение составляет программу сверления и начинает управление станком

Для связи со станком использовался модуль pyserial. При запуске приложение получает список всех доступных серийных интерфейсов (/dev/ttyACM*). На каждый из интерфейсов отправляется команда connect. Если в ответ будет получено res: 1, значит станок найден.


GUI реализован при помощи PyQt5.


image


Демонстрация работы основных команд станка

Заключение


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


Ссылка на репозиторий

Поделиться публикацией
Похожие публикации
Ой, у вас баннер убежал!

Ну. И что?
Реклама
Комментарии 39
  • +5
    Я полный нуб в плане автоматизации изготовления PCB, но разве нельзя экспортировать координаты отверстий из программы для разработки PCB, а не распознавать их с картинки? Или все дело в унификации?
    • +3
      Можно с гербера взять уже готовый слой с отверстиями.
      • +1
        да все программы позволяют, как и сделать траектории изоляционного фрезерования
        либо сами либо давно вылизанными скриптами к ним, тот же «народный» Eagle.

        Кому нужна унификация когда нет никакой гарантии точности сканирования картинки, позиционирования и пр, неточность в 0.5% приведет к уходу на 0.5мм на плате 100*100мм, т.е. дофига даже для грубых плат, все дырки по дальнему краю будут запороты.
        • 0
          Офисным сканером (для бумаг который) получаете очень точный, субмиллиметровый, растр платы, без искажений линзы вебкамер.
          • 0
            точный абсолютно или точный относительно?
            сосканируй стальную линейку и сравни результат с ней.
            • 0
              не понимаю вопроса… конечно калибровка сканера нужна… производители офисных сканеров не ставили целью выдавать изображение с точными метрическими значениями размеров, в т.ч. соотношение сторон. С другой стороны для этого достаточно 1-2 измерений, или положить линейку-уголок вместе со сканируемой платой

              Но никакая (с адекватной ценой) веб камера не даст такого качественного результата, как сканер. Получаем изображение платы, измеряем в цифре расстояния от края платы (или от точки крепежа), закрепляем плату на станке и сверлим.
              • 0
                дык мне не понять нафига все эти навороты в зоопарке?
                есть исходная плата, она в чем то, на худой конец гербер, из этого всего можно сразу вытащить координаты все отверстий и не делать проблемы через печать и сканирование.
                • 0
                  это если есть ;) но я подумал что это слишком по капитански, предлагать исходник для расстановки точек ;)
                  • 0
                    дык именно для этого и есть гербер, что б как можно меньше спалить исходник платы, иначе выходит что то в стиле «украсть маишну водки, водку вылить, бутылки сдать, деньги пропить» :)
        • 0
          присоединяюсь к вопросы. Почему не попробовали файл NC Drill заюзать? А что с выставкой координат по X и Y? И какая точность и повторяемость выставки по Z?
        • +2
          приятно читать подобные статьи. к сожалению не увидел результата работы станка, можно фото просверленной платы?
          • +1
            Мегапроетище.
            У мебельных полозьев не великоват люфт. Может направляющие от 3D принтера поставить? Хотя цена изделия возрастет
            • +1
              Это не мебельные полозья, а DIN-рейка, на них еще электрооборудование (автоматы и тп.) часто крепят. Штука достаточно жесткая.
              Интересно- как автор реализовал подвижное (скользящее?) соединение частей станка? По фото и описанию непонятно…
              • 0
                По фото видно, будто по DIN рейке идёт обычное скольжение. Без видео понять вообще трудно.

                Мебельные направляющие не все сильно люфтят, есть шариковые, вот пример моих попыток собрать ось X станка:
                youtu.be/mY6fB5BOUpU
                но немного ошибся в креплении движка и (возможно) ходовой гайки, поэтому при подходе ходовой гайки к движку — клинит :(
            • +3
              каждый раз, когда я сверлил свои платы у меня было ощущение что я их порчу… это одна из причин почему я полностью перешел на SMD
              • +6
                > Был разработан простой протокол управления станком. Формат команды следующий: : [arg1 [arg2 [...]]]\n
                Вы изобрели G-code :)
                • 0
                  Как долго живёт фреза?
                  • 0
                    карбидные сверла живут долго, 2-5000 дырок, как и карбидные фрезы-«кукурузы» — многие десятки метров реза по текстолиту
                  • +1
                    а почему нельзя было взять нормальные драйверы шаговиков? либо старушку L297/L298, либо A4983 или A4988 за копейки.
                    • 0
                      Немного оффтоп: а почему не делают типа 3-д печати оловом по нефольгированному текстолиту? Как бы плоттер, но вместо грифеля — сопло+экструдер для олова.
                      • +1
                        Боюсь, что олово просто не будет липнуть к текстолиту. Я вот сколько не паял — ни разу такого не видел.
                        • +1
                          А как должно держаться ваше олово на поверхности нефольгированного текстолита?
                          • 0
                            Ну… как-нибудь :) или не на тектолите…
                            В принципе, если найти подходящую поверхность вместо текстолита, идея жизнеспособная?
                            • 0
                              на кикстартере было пару проектов для такого, но они все вроде каким то клеем печатают
                            • 0
                              Глупейшее но жизнеспособное предложение — смешать клей с оловянным/медным (любым другим металлом, с хорошей адгезией к расплавленному олову) порошком и покрыть им поверхность платы (тут уже чего угодно можно использовать). Именно так решают проблемы с адгезией — смесями.
                            • 0
                              Для массового производства слишком сложно. Хим процессы в больших ваннах проще и дешевле.
                              А для хобби есть вот такой проект печаталки проводящими чернилами (и как бонус — тот же станок может сверлить и наносить надписи): www.kickstarter.com/projects/voltera/voltera-your-circuit-board-prototyping-machine
                              Эх, вот бы они на годик раньше компанию стартанули, а не в начале 2015, когда $1200 оказались конским ценником даже для хобби, на которое вроде как ничего не жалко ;]
                              • 0
                                На то есть две причины:
                                1. Просто так металл на стеклотекстолит не осадишь. Первоначально вели приклейку медной фольги на стеклотекстолит и вытравливание промежутков между дорожками, сейчас платы делают аддитивным методом. Сначала стеклотекстолит по рисунку будущих дорожек покрывается тонким слоем соединений с высокой адгезивной способностью, а потом на этот слой осаждается медь электрохимической способом.
                                2. Физические свойства припоя (говорить олово неправильно, это все равно что борщ назвать водой, на том основании, что она есть в составе. Припой — это сплав олова с другими металлами) не позволяют делать прочные длинные соединения с приемлемым удельным сопротивлением соединения. Медь прочнее и вызывает меньше потерь за счет более низкого удельного сопротивления.
                                Если хочется дома делать платы без травления и общения с заводами-изготовителями печатных плат — купите лазерный гравер помощнее и выжигайте лишнюю медь со стеклотекстолита.
                              • +1
                                Прикольно, конечно. А почему не взяли grbl? Это сильно бы упростило программную часть.
                                • 0
                                  А с чем связана такая низкая скорость перемещения по XY?
                                  И второй вопрос. Примерно на 1:30 на видео демонстрация сверления. Видно сильный перекос вертикальной направляющей — сверла не ломаются?
                                  • 0
                                    у него «драйверы» шаговиков без стабилизации тока и микрошага, ну и ramp для плавного разгона нет, так каких либо скоростей не получить, только минимум.
                                  • +1
                                    Узнал #БГУИР с первого предложения…

                                    To Samal: Однако, справедливости ради — действительно неплохо для студента.

                                    Автору предлагаю смазать шпильки и направляющие — не скрипит, легче ход, не подъедает резьбу, меньше люфт. Электроника снизу — не здорово, тут не только текстолитовая стружка, но и медная.
                                    В схеме особенно умилил R2, чувствуется серьезный подход и внимание к мелочам. )
                                    Практическая ценность сомнительна, как студенческая работа — на отлично!
                                  • 0
                                    А что на счет стружки? Как она собирается?
                                    • 0
                                      там слева кровать, стружки аккуратно туда ссыпаются
                                    • 0
                                      Будет полезно — Cyclone PCB factory
                                      • 0
                                        Отдельно отмечу выбор КДПВ. Очень хорошая фотография.
                                        • 0
                                          Не совсем понял как происходит калибровка станка. Оператор предварительно должен установить сверло на какую-то точку? Указать пару точек?
                                          • 0
                                            А не проще определить для станка некоторый стандарт размещения платы — например по одному из углов, использовать стандартный файл сверловки, и уже просверленную плату покрывать фоторзистом -> светить -> травить?

                                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                            Самое читаемое