РадиоКот >Лаборатория >Цифровые устройства >

Теги статьи:

32 бита для 3D принтера

Автор: Serj_K
Опубликовано 12.02.2018
Создано при помощи КотоРед.

    Для управления 3D принтерами, ЧПУ станками, лазерными гравёрами и некоторыми другими устройствами наиболее часто используют электронику, основанную на Arduino, которая базируется на 8-битном контроллере Atmel. Но в последнее время наблюдается довольно быстрый переход на использование плат, основанных на 32-битных контроллерах, особенно для 3D принтеров, которые работают с достаточно большими скоростями перемещения и использующие кинематические схемы, требующие больших вычислительных ресурсов. В таком случае 32-битные контроллеры имеют преимущества перед 8-битными. Кроме того, 8-битный контроллер Atmel под управлением прошивки Марлин не может обеспечить на аппаратном уровне формирование тактового сигнала достаточно большой частоты для драйверов шаговых двигателей при больших скоростях перемещения, особенно если драйвер работает в режиме микрошага более 1/32. Как вариант описания данной проблемы можно почитать заметку здесь. Ну и в принципе 32-битная архитектура имеет больше перспектив развития.


    Наиболее распространённым вариантом серийно выпускаемых плат с 32-битным контроллером являются варианты открытого проекта Smoothieware. На сайте https://smoothieware.org/ выложена вся документация по проекту, включая исходники прошивки, что позволяет создавать платы под свои задачи. Что самое интересное, в наших краях у официальных поставщиков электронных комплектующих цена чипа LPC1769, который используется в платах Smoothieboard V1, меньше цены чипа Atmega-2560, который используется в платах Arduino для 3D принтеров. С учётом всех остальных комплектующих готовые платы этих двух архитектур будут стоить практически одинаково, поэтому считаю, что самостоятельно изготавливать плату управления для 3D принтера на основе Arduino не имеет смысла. Ещё есть 32-бинтые платы китайского проекта Lerge, выполненного на контроллере STM32F407, но он закрытый.


    Мой 3D принтер находится на работе, соответственно он может работать только в рабочее время и автономность его работы мне не нужна, так как мой компьютер на работе включён постоянно. Поэтому я использую подключение по USB, как наиболее простое. Так как базовая схема Smoothieboard V1 содержит некоторые лишние для меня элементы, то я решил использовать вместо LPC1769 в 100-выводном корпусе LPC1758 в 80-выводном корпусе, так как он у меня был в наличии. Помимо корпуса с меньшим числом портов ввода-вывода, LPC1758 имеет меньшую тактовую частоту – 100МГц вместо 120МГц. В остальном чипы идентичны. Из базовой схемы Smoothieboard V1 я исключил сетевой интерфейс и управление рабочим током шаговых двигателей, так как решил применять стандартные модули управления шаговыми двигателями типа A4988, на которых рабочий ток устанавливается подстроечным резистором на самом модуле. Также я не использую датчики для максимальных координат осей. Такие упрощения позволили уложиться в 80-выводной корпус LPC1758.


    Окончательный вариант схемы процессорной части приведен ниже.

    Я ставил задачу изготовить максимально простую плату с достаточным для меня функционалом плюс небольшой запас на перспективу. Моя реализация поддерживает до пяти шаговых двигателей, три датчика только начальных координат осей, до четырёх датчиков температуры, три слаботочных ключевых выхода, два из которых могут управляться аппаратной ШИМ, и три мощных, один с аппаратной ШИМ. Я пока использую один слаботочный и один мощный выход для управления вентилятором охлаждения модели и хотэндом соответственно. Так же имеется разъём для подключения панели с графическим экраном максимум с семью непосредственно подключаемыми кнопками (разъём PANEL). Через этот разъём можно подключить картридер для SD/MicroSD-карты. В этом случае один из сигналов кнопок заменяется на сигнал выбора SD/MicroSD-карты. Но на сайте Smoothieware написано, что такое подключение SD-карты не рекомендуется из-за возможного возникновения проблем чтения данных, связанных с большой длиной сигнального кабеля. Хотя, если сигнальные линии кабеля будут чередоваться с земляными, то проблем не будет. Ещё я вывел два маленьких разъёма (PWM и P2-8), на которые можно подключить популярный датчик BL-Touch для реализации функции автоуровня стола. У меня такого нет, но на всякий случай пусть эти сигналы будут. На контроллере есть линии группы LEDn, которые у меня не используются. Они используются для подключения светодиодов, отображающих состояние загрузчика. Если кому-то при использовании такого же контроллера не хватит нескольких сигналов, то можно задействовать их, но при этом желательно перекомпилировать загрузчик, исключив из него использование этих светодиодов. Таким образом, можно добавить четыре дополнительных сигнала, два из которых могут иметь аппаратный ШИМ.


    Схема силовой части достаточно простая.

    Здесь можно использовать любые драйверы шаговых двигателей, у которых рабочий ток двигателей устанавливается резистором. Так же по схеме видно, что ножки 2-5 модулей не подключены к основной плате. Я замыкаю эти ножки прямо на модуле и соединяю их с выводом 6, на который подано напряжение 5В. Напомню, что я использую модули на A4988. Для использования других модулей возможно потребуется изменить подключение ножек 2-4 для установки другого режима микрошага. Такое решение позволило упростить печатную плату для возможности провести широкую дорожку цепи +12В под драйверами. Для этой же цели на основную плату не подключаются выходы модулей. Штырьки выходов выпаиваются из модуля и впаиваются в него сверху. Провод от двигателя подключается прямо на эти штырьки. Такое решение дополнительно позволило немного уплотнить монтаж, исключив отдельные разъёмы для подключения двигателей.


    Для надёжного охлаждения драйверов я применил следующее решение. Сплавом Розе хорошо пропаял переходные отверстия под чипом драйвера, что кардинально увеличило площадь сечения металла, по которому передаётся тепло от чипа на нижнюю сторону модуля. Если защитная маска снизу модуля не имеет квадратного пятачка вокруг переходных отверстий под чипом, то нужно такой пятачок очистить и залудить сплавом Розе. Затем из медных полосок обычным припоем спаял небольшой радиатор и припаял его снизу драйвера на сплав Розе, чтобы не перегревать чип. Высота радиатора такая, что он при установленном модуле не касается основной платы.

Такого решения в интернете я не встречал, буду пока считать своим ноу-хау.


    После установки драйвера на плату его радиатор попадает в своеобразный «тоннель», образованный разъёмами. У меня питание силовой части производится от обычного АТХ блока питания и его вентилятор через пирамидообразный воздуховод продувает воздух через эти «тоннели» и отлично охлаждает радиаторы. Причём сам вентилятор работает от 7В (подключен между +12В и +5В).

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

    Плату я закрепил на пластиковых стойках на задней стенке принтера, корпус для неё не делал.


    Для того, чтобы записать прошивку в контроллер, сначала в него нужно записать загрузчик. И загрузчик и прошивку можно взять здесь. Там же находится inf-файл драйвера платы для Винды. Загрузчик можно записать или через UART, замкнув пины BOOT, или через интерфейс SWD. Я пользовался вторым способом, в качестве программатора используя ST-Link и оболочку CoFlash из пакета CoIDE. Сама прошивка размещается на MicroSD карте и записывается в контроллер после очередного запуска загрузчика. Также на этой карте должен находиться файл конфигурации прошивки. Детально это всё расписано на сайте с подробным описанием файла конфигурации для различных применений платы. В качестве датчиков начальных координат можно использовать или механические переключатели или электронные на оптопарах или датчиках Холла. Я использовал оптопары, снятые с разных нерабочих принтеров. Они были рассчитаны на питание от 5В, но на них установлен ограничительный резистор в цепи светодиода, что позволяет использовать их и при питании от 3.3В, подобрав сопротивление этого резистора.


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


    Smoothieware для работы с ПК предлагает использовать pronterface, но можно использовать и Repetier-Host. Для этого нужно произвести следующие настройки соединения. Здесь скорость обмена должна соответствовать скорости, указанной в файле конфигурации прошивки.

    После подключения платы по USВ в системе появится новый СОМ порт. Теперь в pronterface или Repetier-Host нужно соединиться с платой, после чего можно понажимать кнопки управления перемещением всех осей и экструдером. При этом осциллографом проверяем наличие сигналов STEP и DIR на соответствующих разъёмах драйверов шаговых двигателей. Так же нужно «позамыкать» концевики, контролируя логические уровни на соответствующих входах. Правильный логический уровень срабатывания указывается в файле конфигурации. Если все сигналы нормальные, то можно устанавливать драйверы шаговых двигателей.


    В зависимости от типа используемого чипа драйвера используются разные формулы для расчёта величины опорного напряжения для выбранного рабочего тока. Например, для драйвера А4988 ток устанавливается по формуле: I=Vref/(8*Rs), где Rs это сопротивление «токосъёмных» резисторов, установленных на модуле. Обычно они по 0,1Ом. Отсюда Vref=0,8*I. Подаёте питание от внешнего блока питания без подключенных двигателей и устанавливаете требуемое напряжение на движках подстроечных резисторов каждого драйвера, рассчитанное по соответствующей формуле. Для начала можно установить ток около 1А. Затем питание отключаете. Руками устанавливаете печатную головку в положение, отличное от нулевого на некотором расстоянии от рабочего стола и подсоединяете кабели от двигателей. Теперь после подключения к ПК и подаче питания можно подвигать осями в ручном режиме в программе управления и проверить парковку. Обратите внимание на направление движения по осям. Если нужно изменить направление, то это можно сделать либо перевернув разъём двигателя, либо указав инверсию сигнала DIR в файле конфигурации. Также нужно проверить измерение всех подключенных датчиков температур и работу нагревателей. Если всё работает, то можно переходить к проверке и подбору всех величин, прописанных в файле конфигурации, учитывая их размерность – скорости перемещений в мм/мин и число шагов на мм для всех осей и остальные. Достоинство прошивки Smoothieware в том, что для изменения параметров не нужно перекомпилировать и перезаписывать прошивку, редактируется только текстовый файл. Алгоритмы калибровок и настроек являются общими для всех 3D принтеров и здесь я их описывать не буду, для этого есть много соответствующих ресурсов.


    Поработав немного с принтером в таком виде, я решил оснастить его графической панелью. Прошивка Smoothieware поддерживает монохромные графические экраны типоразмера 128х64, реализованные на нескольких вариантах используемых контроллеров. На такие экраны выводится до 8 текстовых строк по 20 символов и иконки типоразмера 16х16. Но все эти экраны выглядят достаточно убого и имеют очень не красивый шрифт. Ещё есть вариант использования достаточно навороченного экрана с тачскрином типа MKS-TFT 2.8” или 3.2”, но мне такой не нужен и цена у него для меня большая. Кроме того, исходники его прошивки закрытые. Поэтому я решил изготовить себе панель самостоятельно из имеющихся у меня не дорогих и распространённых компонентов с нужными мне параметрами. В качестве экранов у меня были несколько TFT экранов от китайских «копий» Айфонов, выполненные на чипах ILI9325, с 8-битным интерфейсом, разрешением 240х320 и диагональю видимой области 80мм, то есть 3,2”. Из телефона можно снять ещё и разъём для MicroSD карты, но у меня на основной плате используется другой. Кстати, цена отдельного экрана может быт дороже цены полурабочего телефона. Такой телефон можно приобрести всего за несколько долларов на какой-нибудь барахолке, главное, чтобы сам экран был целый.

    В качестве контроллера решил использовать дешёвую отладочную плату на контроллере STM32F103C8T6. Так же прикупил несколько энкодеров. На всякий случай заложил две кнопки – одна подключена через контроллер, вторая прямо на интерфейсный разъём. Так как есть возможность передавать состояния кнопок с помощью контроллера, то используется разъём всего на 10 контактов, а узкий шлейф проще прокладывать.


    Максимально простая схема получилась такая

    Для применённого экрана я выбрал шрифт типоразмера 16х24. При этом на экране можно разместить уже 10 текстовых строк по 20 символов. Для работы с новым типом панели написал драйвер для прошивки Smoothieware и добавил её поддержку. Если кто захочет себе такой же, то для его добавления достаточно в исходниках прошивки Smoothieware один файл заменить и два добавить, после чего перекомпилировать прошивку. После записи на SD-карту основной платы новой прошивки нужно в файле конфигурации не забыть указать новый тип панели - tft_glcd_dapter. Пример моего файла конфигурации приложен в архиве.


    При работе с моим контроллером текстовые данные на него передаются в текстовом виде, а не в графическом, как для других графических экранов. Иконки передаются не в графическом виде напрямую, а в одном байте в виде флагов. Это возможно, так как в прошивке Smoothieware положение иконок на экране фиксированное и по их координатам драйвер панели производит взвод соответствующих флагов. Таким же способом передаются флаги включаемых светодиодов. Из светодиодов реально может понадобиться только один – индицирующий нагрев более 55 градусов, состояние которого тоже отображается в виде иконки. Иконки имеют типоразмер 48х48. Передача информации в текстовом виде существенно снижает нагрузку на основной контроллер и значительно уменьшает время передачи пакета данных. В результате на экране мы имеем красивый и легко читаемый шрифт и цветные иконки. Время полного обновления экрана порядка 40мс, что существенно меньше используемой частоты обновления информации, а это позволяет с применённым контроллером спокойно использовать экраны с большим разрешением.


    Так выглядит стартовый экран самой панели

    Изначально основной стандартный текстовый экран выглядит так

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

    Или с тремя

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


    Так же изменил курсор для навигации по меню. Раньше он был в виде символа “>” в первой позиции строки, а теперь выглядит так. Это вид самого длинного меню в 9 строк, которое теперь полностью помещается на экране

На много нагляднее и удобнее. Все эти изменения внешнего вида производятся контроллером панели, прошивка Smoothieware выводит данные без изменений.


    Плата крепится в корпусе на два самореза

    А это она же сзади

Перемычки – это доработки, сделанные позже для возможности программной регулировки контраста (фактически яркости подсветки) и добавленный бузер. Изначально я его даже не закладывал, так как он имелся на основной плате, но потом решил добавить. Причём, какой бузер использовать определяется в файле конфигурации. Если указать номер порта на основной плате, будет использоваться основной, если написать «nc», то будет использоваться бузер пенели. Кнопки пока не поставил. В принципе на контроллер можно установить до 8 кнопок, добавив их обработку в прошивку контроллера панели.


    В исходниках прошивки контроллера панели в файле defines.h есть опция ONE_HOTEND, которая определяет, сколько хотэндов используется - один или несколько. От этого зависит отображение иконок и текста над ними, как на фотках выше.


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


    В приложенных архивах находятся эта статья в Word, схемы в PDF формате, исходники прошивок и проекты под Altium Designer.


Файлы:
Эта статья в Word
Проект под Altium и исходники прошивки контроллера экрана
Проект под Altium основной платы
Исходники драйвера панели для прошивки Smoothieware
Схемы в PDF формате


Все вопросы в Форум.