
Monoprice Select Mini - недорогой прочный маленький принтер. Я использовал свой много часов и внес в него множество индивидуальных улучшений. В какой-то момент вышла из строя плата контроллера. Я связался с Maylan, оригинальным производителем платы, для замены, и мне предложили 66 долларов за замену (плата 45 долларов, доставка 16 долларов, конвертация валюты 5 долларов). Вместо того, чтобы покупать другую плату, которая может выйти из строя за треть стоимости принтера, я начал исследовать свои варианты.
Шаг 1: Детали



Многие из комплектных 3D-принтеров используют Marlin на Arduino Mega и плату Ramps 1.4 для управления ими. Я решил купить запчасти и посмотреть, смогу ли я настроить Marlin на общение с существующим оборудованием Monoprice. Marlin - это прошивка с открытым исходным кодом, которая легко компилируется и развертывается на плате, совместимой с Arduino. Конфигурация в Marlin хорошо документирована и легко обновляется. Вы можете найти много людей, продающих нужные вам детали в одном комплекте в диапазоне от 30 до 40 долларов на Amazon (https://amzn.to/2kXxSRq) или Ebay, а если вы разделите отдельные части, которые вам нужны, в таких местах, как aliexpress.com вы часто можете получить его еще дешевле, но вам придется подождать, так как большинство из них будет отправлено вам через Почту Китая.
Вот основные части, которые вам понадобятся для этого проекта:
- Arduino Mega 2560 (https://amzn.to/2lbzceV)
- Пандусы 1.4 (https://amzn.to/2WIazJZ)
- 4 шаговых драйвера (https://amzn.to/2TQ11e3)
- Совместимый с Marlin ЖК-дисплей (матрица 128 x 64 точек со встроенным устройством чтения SD-карт) (https://amzn.to/2kXA4Zg)
- Кабель USB A (https://amzn.to/2lW5Zcp)
Шаг 2: Подключение концевых выключателей и термисторов




Расстояние между заголовками на плате рампы совпадает с расстоянием между отверстиями в разъемах для контроллера Monoprice. Я смог использовать существующие разъемы на шаговых двигателях, но было слишком тесно для разъемов на упорах и термисторах. Я отрезал разъемы и припаял некоторые разъемы на макетной плате, которые были у меня от других проектов (https://amzn.to/2kXJeoz). Я сохранил желтые ярлыки кабелей и использовал те же цвета для проводов. Я использовал термоусадочную трубку (https://amzn.to/2kXD5Zp), чтобы все выглядело красиво. Использование более длинных проводов также имело то преимущество, что плата увеличивалась, так что я мог найти способ установить ее рядом с принтером.
Доска пандусов может поддерживать остановку в начале и в конце пути. Они расположены на досках пандусов как X-Origin, X-End, Y-Origin, Y-Origin, Y-End, Z-Origin, Z-End. Принтер Monoprice имеет только конечные ограничители исходного положения, поэтому вам нужно разместить ограничители X, Y, Z на 1-й, 3-й и 5-й позициях на плате пандусов. Платы пандусов поддерживают 3-контактные нормально закрытые ограничители с питанием, но Monoprice использует нормально открытые двухпроводные ограничители. Таким образом, вы будете подключать только 2 верхних контакта для концевых упоров.
Термисторы на моей плате имеют разводку T0 T1 T2. Термистор A является термистором хотэнда и идет к T0, термистор B является термистором слоя и идет к T1.
Шаг 3: Подключение шаговых драйверов



Шаги настраиваются на плате пандусов с помощью перемычек. Если вы не настроите их так, чтобы они соответствовали шаговым двигателям Monoprice, вы получите масштабированные отпечатки. Вы можете увидеть, насколько меньше был плот для отпечатка кошки до того, как я установил перемычки для моих шаговых драйверов DRV8825.
Методом проб и ошибок я определил, что на плате Monoprice ступени установлены на 1/16 ступени. В зависимости от того, какие драйверы шагового двигателя вы выбрали или получили в комплекте, вам нужно будет отрегулировать перемычки. Перемычки расположены под тем местом, где идут драйверы шагового двигателя. Перемычки пронумерованы 123 слева направо, когда синий и зеленый разъемы находятся слева. Для драйверов A4988 вам понадобятся все 3 перемычки для 1/16-го шага, а для драйверов шагового DRV8825, которые я использовал, только 3-я перемычка установлена на 1/16-й шаг.
На драйверах есть переменный резистор (потенциометр). Мы будем использовать это позже, чтобы ограничить ток двигателей. Потенциометр A4988 направлен от потенциометра, а DRV8825 - к источнику питания.
Шаг 4: Подключение сильноточной шины



Я отсоединил разъемы от вентилятора, подогреваемой кровати и картриджа хотэнда, и они подключились к синим разъемам шины. Верх - это горячий конец, середина - вентилятор, а низ - кровать. Мне также потребовалось удлинить провода подогреваемой кровати. Обязательно сращивайте какой-нибудь провод того же калибра или выше, если вы это сделаете. Я также оставил желтые ярлыки, чтобы знать, что есть что.
Если вы хотите использовать тот же источник питания, вы также можете разрезать разъем и подключить несколько более длинных проводов к плате рампы. Я не доверял дешевому блоку питания, поставляемому с принтером, поэтому я использовал блок питания Xbox 360 мощностью 203 Вт, который я нашел в Goodwill за 3,99 доллара. (Вы также можете найти их на GameStop по цене от 7 до 15 долларов). Зеленый разъем - это входное питание. Внизу и вверху спарены земля и питание. Начиная с основания в качестве земли, это земля, мощность, земля, мощность. С моим блоком питания у меня есть несколько источников питания и заземления, и они оба подключены. Блок питания Monoprice имеет всего два провода. Возможно, вам удастся подключить только две нижние шины, но если вы хотите подать питание на обе шины, вы можете подключить две нижние и перемыть другую направляющую.
Шаг 5: Подключение шаговых двигателей

Я просто вставил существующие контакты в разъемы X, Y, X и EO так, чтобы зеленый провод был обращен к стороне источника питания. Для этих разъемов было достаточно места, поэтому зажимать их не пришлось.
Шаг 6: Марлин




Для установки Marlin на плату Arduino я использовал компьютер с Windows 10. Я предполагаю, что делать то же самое в другой ОС будет похоже. Программное обеспечение Marlin размещено на GitHub и легко развертывается на вашем Arduino Mega с помощью бесплатного инструмента разработки Arduino IDE. Получите IDE Arduino отсюда https://www.arduino.cc/en/main/software и установите ее.
Вам нужно будет выбрать плату Arduino / Genuino Mega или Mega 2560 в раскрывающемся списке Инструменты -> Плата. Вы должны отметить значок (проверить), чтобы убедиться, что он компилируется. Моя Ardiono IDE была полностью настроена для этого, но вам может потребоваться установить некоторые вещи, чтобы добраться до этого момента. Есть много инструкций, которые помогут вам в этом.
Затем вам нужно будет получить код Marlin для редактирования в Arduino IDE. Я раздвоил последний выпуск от Marlin, чтобы я мог отправить свои изменения и получить их позже, если мне нужно. Вы можете сделать одно из двух: вы можете загрузить исходный код с Marlin и внести те же изменения, что и я, или загрузить мою копию источника и использовать мои правки.
Моя версия:
Репозиторий исходного кода Marlin:
Если вы загрузите последнюю версию Marlin, это мои правки. Имейте в виду, что номера строк, скорее всего, изменятся.
В Configuration.h: (Номера строк являются приблизительными)
- Ln. 133 Убедитесь, что MOTHERBOARD - BOARD_RAMPS_14_EFB
- Ln. 252 Установите TEMP_SENSOR_0 в соответствии с типом датчика экструдера. Стандартный термистор борта должен быть 11 (у меня E3D v6 с термистором картриджа, поэтому мой установлен на 5).
- Ln. 256 Установите TEMP_SENSOR_BED на 11 для термистора ложа.
- Ln. 289 Установите для HEATER_0_MAXTEMP значение меньше 275, чтобы не разрушить ваш хотенд. Я использовал 250
- Ln. 293 Установите для BED_MAXTEMP значение меньшего размера, чтобы кровать не становилась слишком горячей. Я использовал 100
- Ln. 456 X_MIN_ENDSTOP_INVERTING, Y_MIN_ENDSTOP_INVERTING, Z_MIN_ENDSTOP_INVERTING в истинное значение. Оставьте других ложными
- Ln. 489 #define DEFAULT_AXIS_STEPS_PER_UNIT {93, 93, 1097.5, 97} из
- Ln. 690 INVERT_X_DIR false, INVERT_Y_DIR false, INVERT_Z_DIR true Ln. 723 Установите X_MAX_POS 120, Y_MAX_POS 120, Z_MAX_POS 120 в соответствии с размером кровати Monoprice, чтобы мы не выходили за пределы
- Ln. 915 раскомментируйте #define EPROM, если вы хотите иметь возможность обновлять и писать в EPROM.
- Ln. 1109 раскомментируйте #define SDSUPPORT, чтобы включить SD-карту
- Ln. 1091 раскомментируйте # определить DOGLCD, если вы купили ЖК-панель 128x64
- Ln. 1267 раскомментируйте #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER, если вы купили такой же ЖК-дисплей, что и я
Теперь, чтобы включить полное графическое отображение, вам нужно добавить еще одну библиотеку в свой набросок Marlin для рисования на экране. Загрузите файл.zip на этой странице:
В Arduino IDE перейдите в Sketch -> Include Library -> Add Zip Library… и выберите загруженный zip-файл.
Высокомощный вывод D9 на плате Ramps, по-видимому, предназначен для вентилятора деталей, обдувающего печатную деталь, а не вентилятора экструдера в их настройках по умолчанию. Если у вас есть установка с вентилятором экструдера, например стандартный hotend или E3d v6, как у меня, вы захотите немного это изменить.
В pins_RAMPS.h:
Ln. 168, измените FAN_PIN на -1, чтобы отключить его
В Configuration_adv.h:
Ln. 220 #define E0_AUTO_FAN_PIN 9 вместо -1
Это включит вентилятор на D9, когда температура хотенда достигнет 50 ° C, и выключится, когда она упадет ниже 50 ° C. сделайте резервную копию и проверьте. Теперь нажмите кнопку загрузки, чтобы развернуть прошивку на плате Mega.
Шаг 7: автонастройка ПИД-регулятора

Когда я дошел до места, где прошивка была записана на плату, я хотел запустить команду M303 для автонастройки PID вместо использования настроек Ultimaker по умолчанию. Я использовал Pronterface (https://www.pronterface.com/) для подключения к принтеру и запустил M303 для автоматической настройки хотенда. После запуска он выведет Kp, Ki и Kd, которые вы можете поместить в Configuration.h следующим образом:
- #define DEFAULT_Kp 26.15
- #define DEFAULT_Ki 2.74
- #define DEFAULT_Kd 62.35
Затем я запустил «M303 E-1 C8 S60» для автоматической настройки нагревательного слоя. По умолчанию кровать была в режиме взрыва, который включал ее, когда она была ниже установленной температуры, и выключалась, когда она превышала установленную температуру. В Pronterface можно было увидеть довольно уродливую волну пилы. После того, как я запустил автонастройку и использовал эти значения, получился хороший наклон к значению и остался на правильном уровне. Стоимость моих складских кроватей выглядела так:
- #define DEFAULT_bedKp 231.09
- #define DEFAULT_bedKi 45.21
- #define DEFAULT_bedKd 295.34
Шаг 8: финальные настройки


После публикации этого руководства и использования настройки в течение некоторого времени мне нужно опубликовать еще несколько настроек.
Во-первых, чтобы включить SD-карту, вы должны раскомментировать #define SDSUPPORT около ln 1120 в Configuration.h, чтобы иметь возможность печатать с SD-карты. Также есть #define SPEAKER, чтобы использовать динамик рядом с ручкой.
Я также обнаружил, что направление по умолчанию и шаги поворотного энкодера были немного шаткими. Вы все еще можете передвигаться, но он ведет себя не совсем так, как вы ожидаете, в отношении направления. Для ЖК-дисплея, который я купил, мне нужно было изменить направление кодировщика и меню, чтобы все двигалось в логическом направлении. Я также добавил индивидуальное самонаведение оси.
- раскомментируйте #define REVERSE_ENCODER_DIRECTION
- раскомментируйте #define REVERSE_MENU_DIRECTION
- раскомментировать #define INDIVIDUAL_AXIS_HOMING_MENU
Печать более высокотемпературной нити, такой как ABS, вызовет отказоустойчивую максимальную температуру, поэтому мне пришлось настроить ее на более высокую температуру. Я выбрал 260 в Configuration.h с этой строкой.
#define HEATER_0_MAXTEMP 260
Я модернизировал свой экструдер этим цельнометаллическим (https://amzn.to/2omeYEI), и шестерня была другого размера, поэтому мне пришлось отрегулировать шаги экструдера. Я экструдировал и измерял нить накала несколько раз и вычислил до нуля на 99 шагах для моего экструдера и шестерни и обновил этот код в Configuration.h, чтобы отразить это:
#define DEFAULT_AXIS_STEPS_PER_UNIT {93, 93, 1097.5, 99}
Нагреватель в Mini не самый быстрый в разгоне, и я обнаружил, что Marlin обнаруживал, что ошибка случается довольно часто, поэтому я немного увеличил время ожидания для обнаружения проблемы с помощью этой строки в Configuration_adv.h
#define THERMAL_PROTECTION_BED_PERIOD 45 // Секунды
Наконец, я распечатал детали этой крышки ЖК-дисплея https://www.thingiverse.com/thing:2133588 и переместил ЖК-дисплей в машину. Пинты в нижней части нового контроллера не подходили к контактам контроллера Monoprice, поэтому я нашел несколько втулок, которые можно было прикрепить к нижней части Arduino Mega, чтобы контакты не касались металлической пластины, и нашел достаточно места, чтобы поместить все в и снова прикрепите нижнюю пластину.
У меня есть Raspberry Pi, установленный на задней панели принтера, с которым я использую Octoprint для управления своим принтером. Я просверлил отверстие сзади у разъема питания, чтобы пропустить USB-кабель от нового контроллера до Pi. Если вы сделаете такую же модификацию, я бы отключил весь контроллер и отодвинул его от принтера, чтобы убедиться, что вы не уроните металлическую стружку в ваш новый контроллер.
После всего этого принтер снова в работе. И, честно говоря, я думаю, что он печатает лучше, чем раньше, и в прошивке Marlin больше защиты от теплового разгона, чем в той, которая поставляется с Mini.