Модуль отключения питания 3d принтера своими руками

Добавил пользователь Дмитрий К.
Обновлено: 05.10.2024

Началось всё грустно. У меня в очередной раз сдохла Дельта. Это, честно говоря, уже не смешно. Это переходит все разумные границы. Но тем не менее. Она сдохла. На этот раз - блок питания отключил все розетки в квартире, выбив автомат. Проверка показала, что в нём пробило силовой биполярный транзистор. Причём транзистор - огого какой. 150 ваттный. У нас в Радиодеталях продаются только максимум 100 ваттные. В общем, пока ищу подходящий транзистор (или пару, если не точно такой, а совместимый), вместо штатного блока питания было решено поставить ATX блок от обычного компьютера.

В наше время, когда видеокарты - одна мощнее другой, у блоков питания чуть ли не основной веткой стала линия +12 вольт, так что этот абзац пригодится не всем. Но у меня нет свободных современных ATX блоков, есть только 10-15 летней давности. В те времена ветка +12 вольт была чуть ли не вторичной. Поэтому первый блок при проверке показал неприятные результаты. Вроде, крутой, фирменный (ThermalTake, ещё тех времён), 480 ваттный. По маркировке, по крайней мере. Просто когда шёл прогрев стола и сопла одновременно, линия +12 вольт просела до 9.5 вольт, а линия +5 - взлетела до 6.5 (в компьютерных блоках используется групповая стабилизация, так что это - нормальное явление). Пришлось его отставить в сторону. Кто его знает, какие там конденсаторы на пятивольтовой линии стоят. Ещё окажутся на 6.3 вольта. Да и просадка до девяти - это круто. Другой блок был 500-ватный. PowerMan (тоже ещё тех времён, когда это имя что-то значило). У этого просадка была всего на 0.2 вольта, а линия +5 - наоборот, выросла на 0.2 вольта. Но на проводах просадка была нехилая, поэтому пришлось припаяться старыми проводами от принтера напрямую к плате, а не использовать штатные разъёмы. Но то - мелочи. Лишь бы всё работало.

Ну, а раз около принтера нарисовался блок питания ATX - я решил осуществить свою давнюю мечту, заставив принтер самостоятельно выключаться по окончании печати. Чтобы если на ночь оставил печать - он бы сам заглох. Да и вообще, зря что ли у блока сделана функция выключения?

Смотрим исходники "прошивки". Нас интересует команда M81

* M81 - Turn off Power Supply. (Requires POWER_SUPPLY > 0)

inline void gcode_M81()

OUT_WRITE(PS_ON_PIN, PS_ON_ASLEEP);

Отлично. Осталось найти, что это за порт PS_ON_PIN и что это за константа PS_ON_ASLEEP.

Моя плата, которая шла с Дельтой, совместима с RAMPS 1.4. Смотрим файл pins_RAMPS.h

К сожалению, эквивалента Ардуиновской ножки D12 на моей плате нет. Долго рыская, нашёл ножку D49. Меняю строку на

Перед тем, как искать засылаемую в порт константу, подумаем, как подключить ножку к ATX источнику. Логичнее всего - напрямую. Но не спешите!

Беда номер раз: Если мы подключим её напрямую, то кто её взведёт в активное состояние? Придётся городить питание от линии +5SB (Standby - дежурное напряжение) на разъём USB, чтобы через неё питался процессор, который всё будет включать. То есть, процессор всё время будет работать. И ещё он будет питаться от дежурки. Но о ней - чуть ниже.

Вторая проблема - это то, что линия включения подтянута всё на ту же линию дежурного напряжения. Чего я к дежурке прицепился? Ооооо! Кто ремонтировал ATX блоки питания (а я их ремонтировал), тот знает про волшебный электролитический конденсатор. Он подсыхает, его ёмкость уходит, система идёт вразнос, напряжение на выходе трансформатора дежурного напряжения - растёт. И у нас повышенное напряжение пойдёт в процессор AtMega. И сожжёт его! Причём пойдёт и по питанию, и через этот порт. Оно нам надо? Само собой, блоки питания так дохнут не часто, но я этот эффект последний раз наблюдал буквально на прошлой неделе. Хотя, предыдущий раз - лет 5 назад. Но закон Мерфи никто не отменял (сказал я, грустно глядя на то, как часто мрёт моя Дельта), так что лучше подстраховаться. В общем, вы как хотите, а я на дежурное напряжение завязываться не стал, а вытащил из ближайшей дохлой мышки первый попавшийся NPN транзистор и сделал вот такую схемку:


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

Теперь та самая константа, которая шлётся в порт. Она объявлена в файле Conditionals_post.h.

При выбранной мною схеме, включать нужно единицей, а выключать нулём. Ну что, в выделенной красным строке меняем 1 на 2? Как бы не так! Не поможет. И виной тому строка, выделенная синим. Дело в том, что константа уже объявлена! Так что менять следует именно первичное объявление в файле Configuration.h. Единицу на двойку меняем именно в этом файле

Ну вот. Осталось сделать скрипт выключения. Вставляем M81? Нет, нет и ещё раз нет! В этом случае, мы остановим вентилятор, охлаждающий термобарьер, на горячем хотэнде. Термобарьер прогреется, пластик в нём - расширится. И при следующем включении, его может заклинить. Сначала следует дождаться остывания хотэнда. Для этого есть замечательная команда M109 Rxxx. При таком варианте, принтер будет дожидаться не только нагрева, но и охлаждения хотэнда до заданной температуры. Поэтому в скрипт окончания печати добавляем строки:

M109 R40 ; Cool hotend

M81 ; Switch power off

Запускаем пробную печать. Получаем подставочку для паяльника TS100 и подтверждение, что механизм работает.

''Заключение

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

БП для 3D-принтера

3D-принтеры бывают разные, но электроника подавляющего большинства любительских аппаратов делается на основе связки плат Arduino + RAMPS, либо одной платы MKS Gen. В качестве блока питания обычно служит БП для светодиодных лент. Он служит источником для питания электроники, шаговых двигателей, нагревателя(лей) экструдеров и термостола. И тут возникает ряд проблем:

  1. Импульсные БП для светодиодных лент выдают напряжение с кучей импульсных помех.
  2. Мощность подогревателя стола - около 300 Вт, при его включении/выключении тоже создаются помехи
  3. Мощность нагревателя экструдера на порядок ниже, но он управляется ШИМ-контроллером, и также создаёт помехи по питанию.

Эти помехи не лучшим образом влияют на работу электроники, приводя к порою загадочным и непонятным проблемам.

Собрав принтер BiZone Prusa i3 Steel (он имеет стальную раму, к которой крепится БП - 24 В, 350 Вт) я заметил, что на экране появляется “мусор”, а при печати принтер может зависнуть. Тогда я напаял пару дополнительных электролитических конденсаторов на плату дисплея и SD-карты. Но это не помогло. Зато, помогло отвинчивание БП от корпуса принтера и удаление на пару сантиметров. Помехи исчезли, и я забыл на некоторое время о проблеме.

Затем, вышел из строя дисплей (на плате которого оставались напаяные электролиты), после замены платы внезапно появилась новая проблема - прошивка не могла стабилизировать температуру экструдера - она начала скакать где-то на 5-7 градусов. Замена терморезистора и калибровка ПИД-параметров прошивки не помогли. Причина, как выяснилось, была в помехах - после замены платы дисплея ушли дополнительные электролиты по питанию 5В, в результате выросли помехи и погрешность измерения температуры. Проблема решилась после добавления электролита 1000мкФ х 9В на шину питания (электролит воткнул через разъём прямо в плату MKS Gen).

Спустя некоторое время проблема установки температуры начала возвращаться - добавленный “электролит” начал вздуваться. Что свидетельствует о налчии больших импульсных всплесков напряжения на линии 5В. Заменил него на новый - снова всё ок. Но сама проблема требовала более кардинального решения.

В итоге решено было переделать схему питания принтера:

  1. Питание на плату MKS Gen подавать через LC-фильтр
  2. Питание на экструдер и нагреватель стола подавать отдельной линией
  3. Добавить ампервольтметр и светодиоды индикации нагрева экструдеров и термостола

Фильтр питания использовал свой “стандартный” - по два дросселя и три электролита на каждый провод (т.к. по "земле" такие ИБП тоже выдают сильные помехи). Вот проект на EasyEDA. Периодически использую его в разных БП, поэтому, заказал партию плат

Схема фильтра

Платы фильтра

Все электролиты ставил 470uF x 50В. На схеме ещё не показаны фильтрующие конденсаторы на 100nF в корпусе 1206 (с обратной стороны платы).

Питание на нагреватели подаётся с платы MKS Gen, через установленные на ней ключи на полевых транзисторах. Разъём питания на MKS Gen имеется только один, питание "цифровой" и "силовой" части не раздельное. Для его отделения придётся ставить свои ключи и питать их непосредственно от БП. Подключать проще всего через оптопары. В итоге нарисовалась следующая схема:

Схема ключей

На схеме видно три одинаковых канала. Первый - для подогрева стола, второй - для экструдера, третий - на всякий случай, если в будущем появится второй экстудер, либо, если одного китайского полевика на нагрев стола окажется мало. Через разъёмы J1-J3 они подключаются к клеммам MKS Gen. Для индикации состояния на плате установлены светодиоды, плюс, сделан разъём J4 для подключения внешних светодиодов.

Ключи собраны на печатной плате (делалась ЛУТ-ом, силовые дорожки дополнительно пропаивались медным проводом)

Плата ключей

Общая схема питания выглядит так

Модифицированная схема питания 3d-принтера

В заключении об ампервольтметре. Использовался китайский измеритель со светодиодными индикаторами и внешним шунтоом на 50А

Ампервольтметр

Схема его подключения:

Подключение ампервольтметра

Судя по заверяниям разработчиков, данный ампервольтметр можно питать напрямую от 24В, но я добавил резистор 1 кОм 1 Вт в разрез питания, чтобы сильно не нагружать встроенный стабилизатор измерителя - добавленный резистор при работе ощутимо (но не сильно) греется. Напряжение подавал уже отфильтрованное.

Теперь при работе можно видеть, сколько потребляют нагреватели и двигатели. И что основной потребитель - подогреватель стола.

Всё это дело решено было смонтировать в фанерный корпус. Спереди вырезано отверстие для воздуха и закрыто решёткой под 80мм-вентилятор. Сверху выведены клеммы для подключения нагрузок и сетевой разъём.

Блок питания в сборе

Блок питания в сборе

Блок питания в сборе

В результате проблема питания была решена, темепература устанавливается без проблем и ничего не глючит.

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

Я использую 3д-принтер Wanhao Duplicator i3 Plus на прошивке Marlin , однако статью постараюсь сделать универсальной, с изложением базовых принципов. Это должно быть применимо и для других FDM принтеров.

Краткая теория

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

На старых станках в качестве контроллера использовались десктопы с LPT портом, тоесть контроллер фактически был вынесен из станка. Однако сейчас роль контроллера может выполнять даже Arduino Uno с её atmega328 . Это решает ряд проблем при использовании компьютера в качестве контроллера.

Надо понимать что обычно, роль контроллера – всего лишь выполнять команды, такие как сделай перемещение по оси X на столько-то , включи подогрев стола , используй текущую позицию как начало координат и тд. Закономерно, это привело к созданию абстракции (общего протокола численного программного управления (ЧПУ)) – G-code . Программа-slicer (например Cura , Fusion 360 ) создает управляющую программу как раз в формате G-code , однако не стоит забывать, что у G-code есть диалекты, тоесть каждый производитель прошивки, может немного поменять значения тех или иных команд, добавить функционал и тд. Для того, чтобы понимать чтоже самом деле происходит при посылке той или иной команды в станок, нужно:

  1. Узнать что именно за прошивка у вас установлена.
  2. Найти описание G-code команд на сайте производителя прошивки или просмотреть исходный код из которого прошивка собрана.

Восстановление печати

image

В моей версии прошивки Marlin на данный момент не реализована функция сохранения последней команды (youtube) или координат инструмента в энергонезависимую flash-память. А также нет алгоритма который мог бы рассчитать текущую позицию проведя инструмент до концевика. Ввиду этого, после перезагрузки, принтер не знает где у него находиться инструмент и какая должна быть следующая команда. И для того, чтобы исполнить любую операцию (и понимать где она будет сделана), нам нужно взять какую-то точку за начало координат и дальше проводить относительно неё все перемещения.

Поиск системы координат

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

  1. Аккуратно снять мешающуюся модель, точно запомнив место её нахождения;
  2. Добавить в G-code операцию паузы (такие используются для смены пластика) или приостановить принтер из его меню после обнуления координат и поднятия инструмента на рабочую высоту;
  3. Установить вашу модель назад (например с помощью клея);
  4. Продолжить печать.

Редактирование G-code

Все манипуляции нужно произвести в файле G-code текущей модели вручную. Он представляет из себя текстовый файл, зачастую большого размера. При попытке открытия такого обычным блокнотом у вас могут возникнуть проблемы, тк алгоритм данного редактора не рассчитан на работу с большими файлами и то и дело, то пытается весь файл прочитать, то весь файл записать и тд. Мне очень нравится редактор Visual Studio Code , который советую и вам.

G-code файл (FDM принтера) можно разделить на две части:

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

Повторяющиеся по своему виду наборы комманд для печати слоёв. При использовании, в качестве slicer’a, программы Cura , в G-code все слои любезно прокоментированы.

У нас получается примерно следующий алгоритм:

Смотрим всё что находится в шапке и разбираем, что это означает.

Например, мб такая ситуация, использования датчика уровня стола BLTouch – команда G30 . Её нужно заменить на использование концевика.

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

Затем нужно максимально точно измерить высоту напечанной модели.

image

В моём случае получилось 143.5 мм. Поделив данную высоту на толщину слоя можно получить номер слоя на котором прервалась печать: 143.5 мм / 0.15 мм = 956.[6].

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

Теперь следует удалить из файла G-code все операции печати слоёв влоть до 956 (не совсем так).

Имейте ввиду, что нумерация слоёв в Cura идёт с нуля, а не с единицы, поэтому в комментариях ищите 955 слой.

Найти нужный вам слой можно воспользовавшись поиском (ища по слову ;LAYER:955 ). В месте откуда вы хотите удалить код, установить курсор и не меняя его положении прокрутите до начала файла, зажав Shift и установив курсор в новом месте, у вас выделится весь кусок для удаления.

Печать каждого слоя начинается с команды перемещения инструмента на новую высоту, однако в случае, с Cura эта команда содержится в конце предыдущего слоя, соотвественно её нужно тоже сохранить.

image

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

Кстати проверить правильно ли вы определили слой можно как раз исходя из значения Z в этой команде.

Поэтому после операции обнуления координат (шапки G-code), я добавляю команду перемещения в точку над уже напечатанными моделями – G0 F0 X0 Y0 Z145 . Подробнее можно прочитать здесь.

 UPS Модуль V2.0, модуль для непрерывной печати при отключении питания, модуль датчика SKR V1.3 PRO MKS Gen V1.4

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

Рабочее напряжение: 12 В, максимальный ток: 25A

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

1. Он может работать только нормально при напряжении 12 В. Когда рабочее напряжение выше 13 в, модуль перегорит. Когда рабочее напряжение ниже 10 В, модуль выдает сигнал отключения питания.

2. Не Поворачивайте положительный или отрицательный сигнал, иначе он сгорит модуль

Инструкция по эксплуатации:

Для atmega2560 и других чипов, работающих на материнской плате 5 В (например: SKR PRO, SKR V1.3, GEN_V1.0, KFB3.0), переключатель модуля установлен на 5 В, для lpc1768 и других чипов рабочее напряжение 3,3 В материнской платы (пример: MKS SBase), поверните тумблер на 3,3 В.

Марлина изменение Учебное пособие:

Шаг 1: загрузите нашу подходящую прошивку marlin. Предоставленная нами прошивка изменена на основе Marlin 1.1.8, которая добавляет функцию повторной печати после отключения питания.

Шаг 2: конфигурация микропрограммного обеспечения по умолчанию является нашим принтером плюс Delta. Если это наша машина плюс, вы можете обновить прошивку непосредственно на материнскую плату без модификации. Если это другая модель, необходимо изменить соответствующие конфигурации. h и файлы конфигурации _ adv.h в соответствии с определенной моделью.

Шаг 3: найдите файл biqu. h. Если порт обнаружения отключения питания подключен к порту Y_Min материнской платы, включите YMIN_PLUG, как показано на рисунке 1, и установите порт POWER_FAILED_PIN на Y_MIN_PIN.

Могут использоваться такие порты, как X_Min, X_Max, Y_Min, Y_Max, Z_Min и Z_Max. При вставке разных портов, только

Сегодня я решил поделиться универсальным корпусом для блока питания, который можно напечатать на 3D принтере / вырезать частями на ЧПУ станке и за 30 минут соберем готовое к работе устройство.


Эта первая публикация в теме DIY, поэтому я не совсем понимаю в каком виде лучше всё оформить, так что будем экспериментировать =)

Начитавшись обзоров решил приобрести себе преобразователь DPS5020 и собрать более-менее человеческий регулируемый блок питания. Вот только модуль стоил $48, блок питания еще $22, так что было решено не тратить еще $20 на корпус и сделать его самому бесплатно, нужно же отбивать стоимость 3д принтера )
Идея не нова и в thingiverse можно найти похожий образцы, но плагиата нет — модель была построена с нуля с учетом особенностей конструкции. Получилось действительно компактно. На фото видны швы, потому что я не переделывал пробную модель, которая создавалась поэтапно кусками.

Комплектующие.



Я немного переплатил и взял "USB-BT" комплект, который включает в себя дополнительные модули для подключения через шнурок microUSB или Bluetooth.


Средняя стоимость $48

С учетом возможности регулировки напряжения от 0,01 до 50 Вольт и тока от 0,01 до 20 Ампер, нужно было брать вот этот блок


Но он стоит $50, так что на собрании хомяка и жабы было решено, что нам такой большой диапазон напряжения не нужен и нужно экономить. Второй вариант несколько меньше, ток 17 Ампер, есть активное охлаждение и максимальное напряжение ограничено 24 Вольтами.


Зато стоит $21.5 и будет занимать меньше места. Это я себя так успокаиваю.

Кстати, всегда проверяйте селектор входного напряжения, у меня было 110 Вольт. Надо сделать так:


На этом растрата денег практически закончена. Для удобства я докупил еще разъем 220 Вольт за $2.5


Распаял так, чтобы индикатор кнопки загорался только при включении питания


Вот примеры вариантов подключения


Ну и клеммники еще. Я остановился на этих за $1.7. Можно как зажимать провода диаметром до 2 мм, так и пользоваться banana разъемом в верхней части.


Покупки сделаны, можно создавать модель, опираясь на размеры комплектующих в описании


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


Чтобы не потратить весь пластик на отбраковку, было решено печатать модель частями


Кстати, пока шли клеммники, я наткнулся на вот этих красавцев в радиолавке и не смог устоять.


Плата фиксируется на задней стенке четырьмя винтами М3


Далее блок для модуля экрана и элементов управления


В него же вставляется и разъем питания



Первый запуск на 5 Вольтах. Всё работает. Кстати, ни модуль, ни блок до этого не проверял )


10 Вольт. Смысла устраивать масштабное тестирование нет, уже был обзор и не один.


Максимальное выходное напряжение с используемым блоком можно выставить только до 23 Вольт, при этом на выходе оно ограничено 22 Вольтами.


Вот такой франкенштейн у меня получился, зато никаких лишних проводов. Думаю или зашкурить и покрасить, или напечатать финальную бесшовную модель. С учетом строения, внутренности разместятся без особых проблем, главное соблюдать последовательность: Плата питания(с проводами) — разъем питания(с проводами) — клеммники — модуль экрана — основной блок питания. Ну и поролонками можно заклеить изнутри вентиляционные отверстия, дабы пылюка особо не копилась.


Подведем итоги.

На создание оригинального устройства ушло около $70, т.к. пришлось заказывать все комплектующие:

DPS5020: $47.99
Блок питания: $21.49
Banana зажимы: $1.69
Разъем питания 220В: $2.47
Модель корпуса(STL и исходники): 1-2$ в зависимости от стоимости пластика.

Был блок на 12 Вольт, но это совсем мало, так что сэкономить не получилось. Модуль работает только наполовину, потому что я пожадничал денег, но мне этого напряжения вполне хватает для повседневного использования. Да и при желании всегда можно сделать апгрейд, подправив два параметра размера модели.

Надеюсь данная статья будет кому-то полезна. Понимаю, принтеры есть не у каждого, но в любом городе можно найти человека, который поможет решить проблему печати за разумные деньги. Тем более задача не сложная — никаких поддержек, так что пластика уходит около 100 грамм, то есть себестоимость корпуса около 2$ если печатать филаментом средней ценовой категории или менее $1 если использовать самый дешевый.

Буду рад конструктивной критике и вашим предложениям в комментариях. Всем добра =)

Читайте также: