Pull to refresh

Электроника для 3D сканера

Reading time 5 min
Views 38K
Начну с извинений. Как обидно получилось! Хотел собрать пятый сканер исправив все косяки, добротно все сделать, а тут проекты, ЕГЭ, олимпиады… В общем закрутилось все, так что извините все, кто ждал статей на эту тему. Для тех, кто не в теме, вот нулевая статья. А те, кто в теме и все еще интересуется, добро пожаловать под кат первой части. И будет она, как вы уже поняли, про электронику…




В процессе отлынивания от работы над сканером мне написало более 10 человек о том, что им нужно помочь с 3D сканером, причем большая часть вопросов касалась электроники. Про нее и пойдет речь в этой статье.

Общая идея


Что мы вообще должны сделать? Во-первых нам нужно управлять шаговым двигателем, во-вторых мы должны как минимум включать-выключать лазер, в-третьих мы должны как-то обмениваться данными с компьютером. Вот основные три задачи, которые должна выполнять наша плата. Ничего сложного. То есть мы можем применить практически любой микроконтроллер. Я большей частью программирую под STM32, так что его-то я и взял. Хотя общие принципы работы будут естественного одинаковыми для любого контроллера.

Третья версия


В третьей версии сканера я взял микроконтроллер STM32F030F4. Его отличает более паябельный корпус TSSOP20 (на тот момент платы под LQFP у меня упорно не получались даже фоторезистом). Из интересующих нас вещей — таймер с генерацией ШИМ и аппаратный USART. Думаю проблемы типа «Под мотор ног не хватило» никому не грозят. Вот такая у меня получилась разводка:

image

А вот такая будет схема:



Сразу скажу, что в схеме неправильно проведены проводники к микроконтроллеру, но разводка правильная. Нумерация компонентов на схеме и на плате совпадают, так что номиналы компонентов смотреть в схеме. Не подписан только кварц тактирования. Он располагается в левом верхнем углу платы. Кстати конденсаторы к нему не обязательно 10 пФ. Их номинал должен быть в пределах от 5 до 20 пФ.
Можно заметить, что на разводке нет отверстий под штырьки PLS. Я просто запаиваю их боком. Это видно на самой первой фотографии в начале статьи. Также на разводке видно, что красным я объединил эти штырьки в группы (G1, G2 и т.д.).
G1 — это разъем для общения с компьютером. Слева направо: GND, SWDIO, SWCLK, RX, TX, +5V.
G2 — питание для лазера. Плюс снизу.
G3 — подключение лазера. Плюс слева (ваш кэп).
G4 — подключение мотора.
Как можно догадаться из схемы — драйвим мы именно униполярный шаговый мотор. Для этого используются полевые транзисторы. Мне приглянулась идея поставить SMD сборки. Я применил вот эти сборки. Вы можете взять любые другие. Главное условие — это совместимость корпусов (не то, что ножек и у тех, и у тех 8, а то, что совпадает распиновка). Ну и еще то, что транзисторы должны быть N-канальными.
Для лазера сделан отдельный стабилизатор напряжения (левый нижний угол схемы). Это позволяет регулировать мощность лазера, регулируя выходное напряжение стабилизатора. Для этого необходимо изменять сопротивление резистора R5. Поэтому в качестве R5 лучше всего установить потенциометр. Внимательный читатель спросит: «А почему 9V?». Вообще потому, что лазер нужно запитать отдельно от мотора. Мотор — индуктивная нагрузка, а значит он создает скачки напряжения, которые могут убить лазерный диод. Запитать от 5V не получится из-за того, что падение напряжения на стабилизаторе достаточно велико и нам может банально не хватить напряжения для его нормальной работы. Поэтому поставил поставил блок питания на 9V, ибо он у меня уже был и прекрасно подходил по вольтажу. Стабилизатор установлен на радиатор, но не запаян на плату. Вместо этого он подключается к разъему G2.
ВНИМАНИЕ! Эта схема не является драйвером лазерного диода! Она подключается к нему и регулирует напряжение питания. То есть если вы собрали лазер сами, то хотя бы токоограничивающий резистор и конденсатор вам поставить придется.

В общем по схемотехнике все. Плата легко изготавливается ЛУТом. Вот ссылка на разводку в SprintLayout.

Четвертый сканер


Тут ни фоток, ни схемы: все было собрано на макетной плате (breadbord). Микроконтроллер взял STM32F401RE. Нет, мощность такая конечно не нужна. Просто он установлен в STM32F401-Nucleo. Эта плата понравилась мне тем, что на ней есть не только штырьки, но и гнезда (как в Arduino), а еще тем, что на ней установлен ST-Link V2.1. Что же в нем хорошего? А то, что на нем помимо программатора присутствует еще и USB->UART адаптер. Это значит, что будет меньше проводов и меньше плат. Из минусов можно отметить то, что он определяется в системе как флешка, так что постоянно выскакивает «Проводник» в Windows. Но это так. Мелочи. Лучше он, чем провода. Схема в принципе остается той-же. Три микросхемы можно заменить одной ULNкой (ULN200x; x=1,2,3,4). Правда транзисторы там расчитаны на меньший ток и вообще биполярные, зато корпус один.
А вот про управление лазером нужно сказать отдельно. В четвертой версии я решил сделать мощность регулируемой программно. В смысле мы можем настроить мощность по UARTу. Для управления мощностью лазера загоним ШИМ на TDA2030. Схема этого блока будет такая:

image

Говоря нечеловеческим языком это неинвертирующий повторитель сигнала на операционном усилителе. Он нужен для усиления тока. Питание ему можно дать любое от 5 до 18V — повторитель повторяет не только форму, но и амплитуду сигнала (усиливается только ток), так что беспокоиться не о чем. Разве что о том, что на выходе STM32 максимальное напряжение будет 3,3V. А значит мы не сможем выжать полную мощность из лазеров, питаемых Li-ion аккумуляторами — их максимальное напряжение 4,2V. Зато точно не спалим по программной ошибке. Фильтр на выходе такого усилителя лучше конечно поставить, но зачастую в лазерах и так имеется фильтрующий конденсатор, так что выбор за вами.
ВНИМАНИЕ! Если вы вдруг решили сделать полноценный усилитель, а не повторитель, то помните, что управляем мы при помощи ШИМа, а значит напряжение будет скакать от минимального значения до максимального. Лазерному диоду нужно совсем немного времени чтобы сгореть, так что если напряжение превысит максимальные 4,2V (даже кратковременно), то диод сгорит!

А как сделать лучше?


Существует много плат для управления моторами в RepRap 3D принтерах. Например такая. Подобные платы легко ищутся по названию чипа. Так чем же она хороша? Во-первых она может управлять биполярными двигателями, а любой униполярник превращается в биполярник банальным отключением средних отводов обмоток (вернее их неподключением). Во-вторых она легко управляется: один пин задает направление, а на второй мы подаем импульсы. Каждый импульс — шаг. И последняя фича — это деление шагов (микрошаг). То есть микросхема может сделать не полный шаг, а например 1/2. Не 5 градусов, как сделал бы шаговик предыдущих сканеров, а 2,5. И это не предел! Она поддерживает деление на 16. Но на самом деле оно не нужно.
Так что настоятельно рекомендую к применению. Экономит время, ноги (микроконтроллера конечно же), но не деньги. Но она того стоит.
Плату управления я бы лучше спаял на все том же STM32F030, ибо он дешевый и мелкий. Хотя последнее в такой огромной коробке роли не играет, но может стать скорее минусом для некоторых людей.
В управлении лазером менять особо нечего. Все и так хорошо работало на четвертом сканере, и что либо менять не имеет смысла. Разве что DAC прикрутить, но это скорее лишняя головня боль.

И что теперь?


А теперь печатать, травить, паять и кодить, кодить, кодить! Но про кодить в следующей статье. И на этот раз мне забить уже не дадут. Надеюсь на большую часть вопросов по электронике я ответил. Вроде тут ничего особо сложного и пугающего нет. Постараюсь как можно скорее написать про код (выкинув все неприличные комментарии и удалив неработающие и ненужные куски).
Удачи всем с проектами/дипломами/посиделками в гараже, где пригодилась данная статья!

P.S. На схеме опечатка — конденсаторы возле кварца — 10 пФ, а не 10 нФ.
Tags:
Hubs:
+17
Comments 10
Comments Comments 10

Articles