Кроме того, текст рассчитан на людей, имеющих минимальный опыт с 3D печатью.
Исключительно по причине не раздувать статью и не объяснять назначение разных деталей и сленговых словечек. Начну с предыстории. Чуть меньше года назад купил себе недорогой 3D принтер. Один из самых популярных (не на правах рекламы, а что бы было понятно о чем речь) — Ender 3. Сборка была несложная, в Сети есть много рекомендаций. Конечно, собирая его по инструкции — получил бы нерабочий агрегат, но предварительно «покурив мануалы», удалось выполнить первую пробную печать на 5 с плюсом для такой простой машинки! Все было хорошо до определенного момента. Но дальше началось…
Если интересно что, добро пожаловать.
Принтер нужен был для конкретной задачи — печать нестандартных корпусов для различных мелкосерийных электронных поделок. После того, как наигрался с готовыми моделями и обеспечил дочку различными зверюшками и человечками, освоил «по верхам» FreeCAD и начал делать полезные вещи. Все шло хорошо… По большому счету, печать запускалась «с ноги», ставил и шел спать. Разве что первый слой контролировал. Но появились первые «звоночки».
Где то часть слоя выпадет, где то пластик подгорит. Калибровал стол «по бумажке», грешил на пластик и сопло, менял настройки в слайсере, пластики и сопла — проблемы исчезали. Пока…
В один «прекрасный» момент столкнулся с «неразрешимой» проблемой. Конец марта, плавный перевод на удаленку (я удачно переехал из Подмосковья в Минск 2 годами раньше), решил собрать отдельный компьютер для работы из того, что было. В загашниках лежала неплохая материнская плата, процессор, пару мониторов и 2 корпуса. Один — огромный полноценный ATX, другой — barebone. Решил собрать в маленьком, чтоб места меньше занимал. Корпус нестандартный. С кредлом на 1 CD привод и 3.5 дюймовый винчестер. У меня же нашлось 3x 2.5 SATA SSD небольшого объема, под систему и одного хватит «более чем» и 1x на 1Tb 2.5 HDD.
Вся эта «живность» размещалась в большом корпусе на самодельном переходнике из старых банковских карт. Но, раз уже появился принтер, неплохо бы им воспользоваться. Создал модельку держателя, поставил на печать и пошел заниматься своими делами. Когда посмотрел, как печатает — увидел только лапшу… С этого момента пошел путь ремонта, длинною в 2 месяца. Постараюсь расписать по полочкам, что помогало, а что нет и в чем была первопричина.
Шаг 1. Настройка роликов {профилактика — всегда полезно}
В очередной раз настроил стол «по бумажке», запустил — пластик не липнет. Менял настройки, пластики — без результата. Вместо того, чтоб клеиться к столу, загибается на сопло. Когда перепроверял настройки зазора сопла, обнаружил, что разболтались ролики и стол люфтит почти на 5мм по краям. Странно, как он вообще до этого печатал… Казалось, причина найдена. Отрегулировал. Но лучше почти не стало. С горем пополам напечатал деталь, но качество оставляло желать лучшего:
Видны явные пропуски в печати.
А вот и расслоения…
Шаг 2. Песнь о Зе[ль]де {неплохо, когда все идет, как по маслу}
Первое, что пришло в голову — проблема в приводе оси Z. И все советы на форумах по проблеме, похожую на мою, указывали на это. Разобрал, проверил плавность хода. Гайка немного закусывала резьбу и нашел «баг» в паре роликов. При перемещении без винта привода, рельса «X» немного залипала на 1 оборот ролика. Заказал приводную гайку, ролики (запчасти — всегда хорошо, но дело было не в этом). Методом комбинаторики и какой то матери распределил ролики оси по нагрузкам так, чтобы на бракованные приходилось минимальное усилие. «Закусывание» пропало. Очистил и смазал винт привода. Отрегулировал положение его двигателя. В результате — легкого прикосновения пальца хватает, чтобы опустить каретку вниз. Результат — отрицательный.
Шаг 3. Слайсер {тюнинг, но не решение проблемы}
Обновил слайсер. Тем более, что в новом релизе как раз было улучшение, связанное именно с качеством печати для моего принтера. Поигрался с потоком и скоростью, толщиной слоев и т. д. Даже успешно напечатал несколько простых небольших корпусов и деталей. Но настройки были откровенно дикие: поток — +10%, скорость — -5%. Учитывая, что после сборки получалась отличная печать на настройках «по умолчанию». Проблема печати сложных деталей не исчезла…
По мотивам этой статьи: https://habr.com/ru/post/494058/ сделал для дочки таймер чистки зубов. По нему готовлю отдельное описание. Спойлер: восьминогий контроллер, прошивка — 119 ассемблерных команд.
Шаг 3. Экструдер {а счастье было так близко…}
Логика подсказывает, раз по геометрии и приводам осей проблем нет, должно быть что то с подачей. Снял шестерню подачи филамента, почистил. Видимого износа не наблюдается. Вернул на место, немного сместив по вылету, для выравнивания износа. Результат — 0. Эх, посмотри я тогда чуть правее, сэкономил бы месяц нервов и 200$.
Шаг 4. Проверка драйверов ШД {без комментариев}
Отличная геометрия, нет проблем с механикой. На момент первой сборки все было гораздо хуже. Куча изученных материалов, доработок и настроек, а результат — нулевой. Я в чудеса не верю, осталась электроника. Тем более форумчане часто жалуются на сгоревшие драйверы. Понятно, что полностью выгоревшее плече моста можно обнаружить «на глаз» сразу, подумал про «плавающую» неисправность. Ведь пластик ложиться нормально, потом — пропуски, нить утончается, волосы и остальные прелести. Заказал улучшенную плату управления на ARMе, но, чтоб не терять время, решил проверить имеющуюся. Снял плату, двигатель оси Z в качестве индуктивной нагрузки, собрал стенд на столе, резистором установил температуру хотэнда, чтобы и экструдер можно было покрутить. Посмотрел осциллограммы на катушках ШД. Все отлично. Грел драйвер феном (дефект кристалла или разварки иногда проявляется), механически воздействовал на ИС драйвера, охлаждал пропан бутаном (газ для зажигалок). Примечание. Вполне себе неплохо охлаждает до -20, не обязательно для этого дорогой фризер покупать. Все отлично. Сбоев не видно!
Шаг 5. Обновление «прошивки» {а я почти поверил в чудо и теорию заговора}
Нет, я точно уверен, что чудес не бывает. Бывают баги, глюки, фокусы, недостаток информации, субъективное восприятие реальности, в конце концов. Но не чудеса! Но как объяснить, что при исправной механике и электронике печать ведет себя крайне странно? Китайцы сделали закладку в FW чтобы платами дополнительно барыжить? Делается элементарно, но, думаю, уже давно бы обнаружили и торговой марке пришла бы белая пушистая лисица. Баг в прошивке? Все может быть, только как то странно он проявился.
Сбились настройки в EEPROM или «подглючивает» FLASH*? Наиболее вероятно. Ладно, раз плата на столе, ничего не мешает ее перепрошить. Обновился до «ванильного» Марлина 1.1.9, собрал все обратно. Результат — чуда не произошло.
…
const uint8_t step = 0x18;
…
position += step;
…
На каждой итерации к текущей позиции прибавляется уставка «step». Так так как программа выполняется на микроконтроллере (МК), код и константы размещены в ПЗУ и изменяться могут только при внешней процедуре программирования (опустим возможности перепрограммирования FLASH памяти внутренними средствами МК). Процедура эта выполняется 1 раз изготовителем. Теперь 2 важных момента: процессор контроллера каждый раз читает команды и константы из ПЗУ, забудем про кэши, у Атмеги их нет. То есть, если цикл прошел 1000000 итераций, то и константа была прочитана тот же миллион раз. При каждом чтении FLASH немного деградирует. Не знаю, каков критический порог чтений для NOR, думаю, десятки миллиардов, но TLC NAND уже неплохо так деградирует после 10-20К чтений… Второй момент — не факт, что наши узкоглазые друзья не использовали отбракованные контроллеры. Мне реально один раз пришли такие. PICи. Не паяные, но на корпусе — странные пометки. FLASH оказалась не стертой, при 3.6В ни стереться ни прошиваться не хотели. Пришлось до 5В поднимать, после чего запись / верификация стали проходить. Допустим, наша константа была записана в бракованную ячейку. Пока устройство новое — 0x18 стабильно читалось. Но от времени (а для Атмег гарантированное время сохранения данных не самое большое) и деградации, в какой то момент стало читаться не 0x18, а 0x08. Не каждый раз, но все же. Знаю, скорее не 1 в 0 деградирует, а наоборот, это — исключительно для примера. Так вот, пока стабильно читается нужное число, перемещение происходит корректно, но когда происходят сбои, к результату прибавляется неверная уставка, что приводит к сбоям подачи. Это самый простой и маловероятный пример. Могут быть другие глюки, например, в команде сложения источник R6 изменится на R7. Ассемблерная команда остается валидной, процессор ее выполнит, но результат будет неверен…
Шаг 6. Промываем «горло» {держи голову в холоде, а хотэнд — в чистоте, рекомендую сделать это сразу после покупки принтера}
Подарком «небес» была ссылка на одном из форумов на ролик от производителя. Там они честно признаются, что не все хотэнды одинаково полезны, то есть хорошо собраны.
Тефлоновая трубка не до конца запрессована, срез не ровный. Следствие — образование пробки и экструдер не может нормально продвигать пластик. Вот оно — мой случай!
Ненормальные значения потока и ретракта, все сходится. Несмотря на поздний вечер Субботы и посещение пивного ресторана, решил проверить. Точно. Гуана там немерено, вплоть до остатков пластика, которым печатал месяц назад (тот самый зеленый держатель). Очень вероятно — победа! Прочистил «горло», обрезал трубку ровно, запрессовал до упора, так же зафиксировал второй конец трубки поплотнее, многие используют изоленту, но я намотал немного провода 0.7, что позволяет свободно откручивать держатель:
А вот и «убитый» конец трубки, видно, что обрезан криво:
Модель режется на слои с настройками по умолчанию. Печать… Кайма пошла, контур пошел, соплей при ретракте нет. Ура!!! Победа!!! Уже собрался написать статью, чтобы другие не мучились, но… Полное фиаско. Утончение и разрывы пластика, пропуски при печати. Уже готов сдаться. Жена подбадривает, да выкинь ты его, купи новый! Не могу так. Должна же быть причина. Вот только где??? Разумных (и цензурных) мыслей уже не было…
Шаг 7. Калибровка подачи {при исправной механике, скорее всего не понадобится, если только после замены деталей приводов или перепрошивке}
В инструкции по обновлению до «ванильного» Марлина было сказано, что для заводского принтера все настройки — идеальные, но может немного уйти точность подачи пластика. Ладно, будем калибровать. Вытащил пластик, разогрел хотэнд (в прошивке блокировка, на холодный не позволяет перемещать «E»). Открутил трубку от механизма подачи, обрезал пластик заподлицо и выполнил команду экструзии 300мм. Линейка у меня на 350. Экструзия длиться достаточно долго, по завершению измерил длину вышедшего филамента и глазам своим не поверил 226мм. Понимаю разницу в 3-5%, но не в 25%! попробую другой пластик…
Примечание. Видел, как подачу регулируют по нанесенным маркером отметкам на прутке, Но с отрезанием, ИХМО, точнее.
Подготовка к тестовой экструзии:
После экструзии:
Измеряем линейкой, в моем случае (после ремонта) получилось 292мм. Далее идем в меню: control / motion / step mm, смотрим, сколько шагов на мм установлено для экструдера. В моем случае — 93. Выполняем простое вычисление:
>>> (300*93)/292
95.54794520547945
Изменяем уставку и сохраняем настройку. Повторная экструзия — погрешность на уровне измерения.
Шаг 8. Победа!
Вначале я проверял на PETG, решил поменять на PLA. Первый я немного перегрел при сушке, неадекватный разброс списал на возможное залипание на катушке. Обрезание, экструзия. И ничего. Пластик вообще не подается. Ось привода вращается, медленно, но по винтам видно, что движение есть. Посмотрел, пруток неправильно лег между шестерней и прижимным роликом. Ладно, правлю. Что то ролик немного болтается. Надо подтянуть. А фиг! Вот он виновник всех моих бед:
Рычаг прижимного ролика треснул. При этом сила прижима осталась достаточной для частичного продвижения прутка. Следы от шестерни оставались и прижимной ролик вращался.
Соответственно, все игры с настройкой прижимной пружины оказались безуспешны. Проскоки прутка были незаметны на глаз, а трещину невозможно было увидеть на собранном механизме. Все! Экстаз инженера получен! Рычаг был склеен, заказан алюминиевый механизм, на всякий случай напечатан запасной (если сломается, пока буду ждать новый). Вот ссылка на модель. Конечно, неприятно из за такой мелочи столько времени и денег потратить, но это помогло мне намного более глубоко погрузиться в процессы печати и отлова глюков.
Собственно, первая деталь после ремонта. Прижимной рычаг:
Наконец, мой датчик присутствия обрел «морду». Корпус печатался еще до поломки:
Попытки напечатать «морду» на неисправном принтере (после чистки «горла»):
Надеюсь, данный материал хоть кому то поможет не совершить столько глупых попыток поиска примитивной неисправности и сэкономит деньги. Конечно, я не каждый вечер занимался проблемой, но в общей сложности — сутки, наверное, были потрачены. По деньгам — около 200$ на запчасти. Цена устранения неисправности — 15 минут и пару капель «суперклея». Обидно? Скорее нет, так как опыт и запчасти останутся со мной!
Sap_ru
FLASH не деградирует при чтении! Вообще!
dvserg
Тем не менее информация при хранении деградирует.
jakushev Автор
Поверьте мне, еще как деградирует, особенно TLC, я бы не писал, если бы не знал. Как сказал, не знаю, сколько чтений должно привести к деградации NOR, но неспроста мы в ответственные приборы двойную копию фирмвари писали, и в фоне постоянно CRC считается. И да, переходы на резервы, не часто, но были… Вообще, интересно было бы эксперимент такой поставить. Но, блин, по времени он будет слишком долгий. Взять десяток контроллеров, записать примитивную фирмварь, читающую одну и ту же ячейку. 5 записать, а контрольную группу рядом положить без питания и посмотреть, что произойдет… Ну и простого брака никто не исключает…
jaiprakash
nixtonixto
ЭСППЗУ деградируют только от пробоев плавающего затвора, а они случаются только при стирании или записи информации. При чтении воздействий на плавающий затвор нет, его изоляция не пробивается, поэтому заряд на затворе не изменяется.
В документации на NOR память вообще нет ограничения на количество циклов Чтения, не придумывайте себе новую проблему. А в ответственных применениях всегда использовалось тройное резервирование по мажоритарному принципу, и/или ECC.