что такое прошивка marlin
Marlin 2.0.6.1. Эволюция подключения экранов и интерфейсов пользователя.
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Способы подключения интерфейса пользователя к 3D-принтерам на основе Marlin 2.0.6.
1. RepRap Arduino Mega Pololu Shield (RAMPS)
Прямое подключение LED 12864-экранов.
Самый древний из способов. Шина состоит из 16-ти управляемых непосредственно с Arduino Mega GPIO и питания. В настоящее время данный способ не используется.
Интерфейс пользователя всем давно знаком
2. RepRap Full Graphic Smart Controller
Для работы необходимо, чтобы LED 12864 поддерживал работу по SPI, например, используя ST7920 контроллер.
Данные передаются по трем пинам SPI-интерфейса, высвободив 13 GPIO. Помимо LED-экрана на модуль выводятся так же энкодер управления, зуммер («пищалка») и SD-карта.
На плате выглядят как два 10-пиновых разъема типа DC10P.
Классический RepRap Full Graphic Smart Controller имеет след. разводку разъемов.
LCDE(SID), LCDRS(CS), LCD4(SCLK) – огрызок SPI-интерфейса для LED 12864.
LCD5, LCD6, LCD7, KILL – по-умолчанию, не используются. Разработчики могут задействовать для своего функционала, например NeoNeoPixel LED.
BTN_ENC, BTN_EN1, BTN_E2 – подключение энкодера.
MISO, SCK, MOSI, SD_CSEL, SD_DET – интерфейс работы с SD-картой по второму SPI.
Подключение RepRap Full Graphic Smart Controller может быть реализовано на RAMPS с помощью переходника.
Интерфейс пользователя не кардинально не отличался от RAMPS.
Все взаимодействие с пользователем вынесено на внешнее устройство. Процессор даже не знает, что у него есть графический интерфейс, SD-карта, Wifi, энкодер и «пищалка». Часто даже концевые выключатели переносятся на внешнее устройство. В качестве такого устройства может выступать RaspberryPi (OrangePi) или Smart TFT-дисплей. Примером такого Smart-дисплея является JZ-TSxx, BTT TFT35 V3.0 в графическом режиме.
Это основной способ подключения TFT-дисплеев к материнским платам на 8-битном процессоре. С него снимаются все функции обработки пользовательского интерфейса, но накладываются серьезные требования в работе UART, его скорости и устойчивости работы при постоянном потоке данных. Данный способ будет хорошо работать на скоростях UART 230400, 250000 с относительно небольшими размерами буферов команд и принимаемых по UART данных (MAX_CMD_SIZE, RX_BUFFER_SIZE). Однако, некоторые платы/CPU по непонятным причинам не могут устойчиво работать на таких скоростях, максимум 115200. Тогда для организации стабильного потока команд используется максимальное увеличение буферов, контроль переполнения буфера SERIAL_XON_XOFF и ADVANCED_OK. Последние должны поддерживаться со стороны Smart TFT-дисплея. В Octoprint для RaspberryPi (OrangePi) их поддержка реализована.
При большом количестве быстро отрабатываемых команд даже эти усилия не могут спасти от опустошения буферов. Как следствие такого увеличения появляется «тормознутость» (меньшая отзывчивость) интерфейса. Нажал кнопку, планировщик команд экрана поместил соответствующую команду в начало очередной порции данных для материнки, и отправил. Команда попадает в длиннющую очередь в буферах материнки. Особенно часто это наблюдается при печати крупных объектов с длинными перемещениями на низкой скорости (печать стенок).
Интерфейс пользователя может быть любым, зависит от фантазии разработчика.
У материнских плат для 3D-принтеров плат на основе STM32 для подключения дисплея предусмотрен специальный интерфейс и называется он FSMC, его также называют контроллером внешней памяти. Смысл работы FSMC заключается в следующем, при подключении по FSMC дисплея или внешней памяти, мы можем обращаться к регистрам подключённого устройства, как будто они находятся в памяти микроконтроллера. Нам не надо дёргать за ножки и отсчитывать временные интервалы, обо всём позаботиться интерфейс.
Отличительной особенностью интерфейса является шлейф с большим количеством жил, от 20 до 22 только информационных сигналов, без учета питания.
Разъем интерфейса может выглядеть следующим образом. В шлейф так же могут включены линии для контроля Touch-панели (SPI).
Marlin и CPU материнской платы сами занимаются отрисовкой интерфейса пользователя.
Начиная с Marlin 2.0.6.1 на FSMC TFT-экране можно включить 3 разных интерфейса пользователя.
Долгое время был основным интерфейсом пользователя для FSMC TFT-экранов. Кнопки на экране заменяют управление через энкодер.
• #define TFT_LVGL_UI_FSMC – графический интерфейс от MKS.
Интерфейс пользователя появился только Marlin 2.0.6.1.
Программисты считают FSMC_GRAPHICAL_TFT наименее глючным способом подключения экранов с графическим интерфейсом пользователя.
Единственным минусом считается использование большого количества GPIO процессора для организации шины.
В Marlin появился начиная с версии 2.0.6.1. Основная идея та же что у RepRap Full Graphic Smart Controller – уход от параллельной шины, требующей большое количество GPIO, на шину SPI.
Физическое подключение – все те же два 10-ти пиновых разъема как у RepRap Full Graphic Smart Controller. Теоретически имеется полная совместимость, и на любую плату вместо LCD 12864 можно попробовать установить графический TFT экран с SPI-интерфейсом. Лишь бы памяти хватило.
В исполнении платы MKS Robin Nano 2.0 и экрана MKS TS35 v2.0 разъемы имеют следующую разводку.
VCC,+3V3, GND- питание
LCD_EN(FSMC_LIGHT|DP13) – TFT_BACKLIGHT_PIN управление подсветкой экрана
LCD_D5(LCD_D5|PE15) – в режиме SPI_GRAPHICAL_TFT не используется,
BTN_ENC(PE13), BTN_EN1(PE8), BTN_E2(PE11) – подключение энкодера,
SPI1_RS(PE12)- не используется.
На SPI_GRAPHICAL_TFT экране так же можно включить 3 разных интерфейса пользователя.
Подключение SPI_GRAPHICAL_TFT самое молодое и наименее изученное. Но мне кажется, что его будут доводить до основного способа подключения TFT-экранов к платам управления 3D-принтеров и бюджетных ЧПУ.
Про MKS Robin Nano 2.0 и экрана MKS TS35 v2.0 есть предварительный обзор типа «диванной аналитики». плата с экраном недавно покинула таможню и находится в пути.
Предварительно: полностью совместимы по посадочным отверстиям с предыдущими RobinNano, но есть UART/SPI по всем осям, Sensorless одной перемычкой, гребенка с различными напряжениями питания для периферии, SPI-подключение TFT-экрана.
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Уха из Марлина или разбираем прошивку по косточкам
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Занимаясь разработкой 3D принтера долгое время раздумывал над его прошивкой. Написать свой софт с нуля не хватает знаний и опыта, поэтому было принято решение об использовании опенсурсного проекта Marlin.
Погуглив немного и не найдя ничего внятного кроме процесса создания конфигурационного файла и описания G-кодов, принял решение разобраться с исходниками досконально. Для чего?
1. Дабы упростить себе процесс настройки и траблешутинга.
2. Для использования в своем проекте «экзотических» устройств, типа измерителя толщины нити, умной подсветки, вытяжки и … (по секрету) экструдера выдавливания нити из гранул.
3. Возможности писать свои скрипты и вживлять их в прошивку, создавать собственные G-коды.
4. Прочее – подскажите в комментариях.
Возможно начинающим программистам, коим я и сам являюсь, будет полезна эта информация. Гуру в языке С думаю, не найдут здесь ничего нового.
Для начала хочу остановиться на файловой структуре исходника и поделиться с вами этим, если будет интерес у сообщества – продолжу описывать свой опыт исследования прошивки.
Ныряем в папку Marlin, видим 3 папки и кучу файлов. Попытаюсь вкратце пояснить что в каком месте хранится и за что какой файл отвечает.
Сразу определимся что файлы с расширением хххххх.h –это заголовочные файлы, в них определяются переменные, функции, процедуры. Кода в них практически нет. Код содержится в файлах с расширением xxxxxx.cpp.
Configuration.h – это и есть файл конфигурации, в нем вносятся изменения до начала компиляции кода. Подробно расписывать пока не буду, информации о содержимом достаточно в русскоязычном и импортном Инете.
boards.h – содержит список всех платформ и плат, на которые можно установить Marlin. Каждой плате присвоен свой идентификатор, который прописывается в конфигурационном файле перед компиляцией. В моем случае это:
# define BOARD_ RAMPS_14_ EFB 43 // RAMPS 1.4 ( Power outputs: Extruder, Fan, Bed)
pins_хххххх.h – файлы содержат назначение пинов для каждой платформы. Я использую RAMPS, поэтому мне интересен файл pins_RAMPS_14.h. Корректировать номера выводов будет полезно в том случае, если по каким-то причинам невозможно использовать стандартное назначение (первое что приходит на ум – спалили вывод, или решили подключать внешнее устройство на другой разъем).
#define FILRUNOUT_PIN 4
watchdog.h, watchdog.cpp – файлы отвечают за фичу под названием «Сторожевой пес». Фича полезна тем, что позволяет контролировать выполнение основной программы, в случае ее зависания уводит контроллер в рестарт. Работает предельно просто – запускается отдельный аппаратный таймер, в нашем конкретном случае – на 4 сек. В основной программе периодически вызывается команда обнуления этого таймера. Если за 4 сек. его никто не обнулит – он понимает что «что-то пошло не так» и рестартует контроллер.
blinkm.cpp, blinkm.h – содержит библиотеку для управления трех-цветным светодиодом по I2C протоколу. (куда его цеплять и зачем он нужен пока остается загадкой).
buzzer.cpp, buzzer.h – управляет пищалкой. Есть два режима работы – на пищалку подается последовательность импульсов с определенной частотой (пьезоизлучатель) или просто включитьвыключить (паровозный гудок 😀 )
configuration_store.cpp, configuration_store.h – код для чтениязаписи данных в энергонезависимую память. Удобство прошивки заключается в том, что параметры, выставленные при настройке и калибровке сразу записываются в EEPROM, и их не надо каждый раз выставлять заново при включении принтера.
servo.cpp, servo.h – используются для управления сервомоторами при, например, автокалибровке стола. Я их использовать пока не планирую.
MarlinSerial.cpp, MarlinSerial.h – библиотека для работы с USB.
ultralcd.cpp, ultralcd.h – работа с экранами.
Не знаю почему, но процедура обработки датчика толщины прутка тоже попала в файл temperature.cpp.
Ну и самые интересные файлы:
Marlin_main.cpp, Marlin_main.h – это основной заголовок и основной код программы. В подпрограмме void setup() собраны подпрограммы инициализации основных устройств и назначение переменных. В void loop() – основная подпрограмма. Здесь же собраны подпрограмма чтения G-кодов и все подпрограммы обработки этих кодов.
Вот так при кодах G0 и G1 вызывается подпрограмма gcode_ G0_ G1();
// Handle a known G, M, or T
case ‘G’: switch (codenum) <
Как раз здесь можно создать свой G-код. К примеру, G777. Добавляем:
и выше, рядом с другими обработчиками, добавляем подпрограмму его обработки:
inline void gcode_ G777 () <
У меня пока все. Может по косточкам пока не удалось разобрать, но на куски уже порезали… 😀
Если у кого есть более глубокие наработки по добавлению фич в прошивку – буду рад увидеть в комментах.
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Мой переход с Lerdge на Marlin
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Статья относится к принтерам:
– Вручить шашку Игорю Владимировичу, а? Любо?
Что понравилось при ознакомлении с ТТХ и беглом осмотре полученного комплекта:
Т.к. раньше с Марлином я знаком не был, и даже не знал с какого бока к нему подступиться, я сделал некое подобие стенда.
На нём я и оттачивал настройку прошивки под свои нужды. Увы, легко и без проблем Марлин мне не дался. После Лерджа несколько сложновато давался алгоритм настройки. Не зря говорят, что переучиваться сложнее, чем учиться с нуля. Нужно привыкать и приспосабливаться к немного другой логике работы. Взять хотя бы, например, управляемые разъёмы вентиляторов на плате SKR 2 – Fan0, Fan1 и Fan2. Что за что отвечает? На плате присутствует поддержка двух экструдеров E0 и E1. Соответственно, в эти разъёмы должны подключаться вентиляторы обдува детали, и обдува радиаторов этих двух экструдеров. Если следовать некой логике, то Fan0 – это разъём для вентилятора обдува радиатора экструдера E0, Fan 1 – для вентилятора обдува радиатора экструдера E1, ну и оставшийся Fan2 – для обдува детали. Так думал я, а Марлин думал иначе. Для обдува детали в прошивке где-то глубоко в коде прописан Fan0, а вот для обдува радиаторов экструдеров вентиляторы не прописаны вообще. Вероятно, предполагается, что они подключаются к неуправляемым разъёмам для вентиляторов, которые на плате тоже есть (Fan3, Fan4). Поэтому, если вы хотите иметь управляемые вентиляторы обдува радиатора, то их нужно прописать вручную. Ещё момент – если у Лердж не имеет значения, какой датчик автоуровня подключён к плате (плёночный, BL-Touch, индукционный), и его можно поменять без перепрошивки, то в Марлине нужно чётко указать, какой тип датчика подключён к плате. И без изменения этой информации в прошивке (с последующей перекомпиляцией оной и перепрошивкой платы управления) его не поменять. Ну и волшебный Z-offcet. Если у Лердж он работает сразу и всегда – внесли в него изменения (как в соответствующем меню, так и при печати с помощью подстройки), и они применяются ко всем печатям, которые вы будете проводить после этих изменений, без лишних телодвижений, то у Марлина это не так. После того, как вы внесли изменения в Z-offcet и сохранили их в EEPROM, вам, при каждой печати после автоматической парковки по G28, надо вызывать их из памяти командой M420 S1, иначе значения Z-offcet не будут использоваться. Это же верно и для карты стола. Вот этот маленький нюанс знатно попил моей крови. Но, вроде как у Марлина датчик автоуровня BL-Touch работает стабильнее и адекватнее, чем у Лердж. Сам же я работу BL-Touch не проверял, не смотря на то, что его клон (3D-Touch) от Trianglelab у меня есть. Мне просто лень его ставить, т.к. я один раз снял карту стола плёночным датчиком и печатаю дальше без перекалибровки, вызывая карту всё той же командой M420 S1, упомянутой выше. Вместе с тем сама автокалибровка стола со снятием карты с помощью BL-Touch или любого иного датчика в Марлине проходит более предсказуемо, особенно если сравнивать с работой Lerdge с прошивкой версии 4.3.3 beta 1-3. Про финальную версию прошивки Lerdge 4.3.3 я ничего сказать не могу, т.к. подзабросил наблюдение за ней. Опытные марлиноводы и марлиноведы скажут, что упомянутые выше проблемы – это пустяки, и не стоит из-за них нервничать. Но как новичок отвечу – что для вас пустяк, для новичка проблема, и, к сожалению, её не всегда получается быстро решить. Однако продолжу рассказывать дальше.
Итак, используя сделанный стенд, я произвёл в марлине настройку основных параметров принтера, таких как габариты печатного поля, управление блоком автоматического выключения питания, настройку отключения вентиляторов обдува радиатора хотенда, при охлаждении его ниже 40 градусов и т.п. И при этой настройке я был очень рад, что экран может выступать как хост по отправке команд на плату и получать от неё ответы. Это знатно экономит время и позволяет не подключать плату к компьютеру только для того, чтобы, например, опросить состояние концевиков командой M119, или проверить, адекватно ли работает блок автоматического выключения питания, отправив команду M81 на плату. Но более подробно к некоторым настройкам Марлина я вернусь немного позже.
А сейчас коротко пробегусь по подключению электронной части принтера к новой плате. Тут проблем не возникло от слова совсем. У Bigtreetech, как и у Лердж, есть достаточно подробная инструкция о том, что, как и куда подключать, а также есть полная карта распиновки разъёмов. Ну и на обратной стороне платы также есть подписи ко всем пинам.
Единственное что пришлось сделать, так это удлинить некоторые провода, т.к. они были рассчитаны под расположение разъёмов на Lerdge-K. Также пришлось смоделировать и напечатать новый корпус для экрана TFT43. На этот корпус я, помимо родных разъёмов для USB-флешки и SD-карты, расположенных на плате экрана, вывел с помощью удлинителей разъёмы для подключения micro SD-карты и USB-флешки с самой платы SKR (у неё он есть, помимо разъёма USB-B для подключения к компьютеру).
Дабы не сверлить в корпусе принтера новые отверстия, я смоделировал подложку для SKR 2 с учётом уже имевшихся отверстий для крепления подложки Лердж-K.
В общем, плата заняла положенное ей место, и можно было приступать к более тонкой настройке прошивки с учётом особенностей механики принтера. Были настроены рывки, ускорения, скорости движения осей.Ещё на стенде я протестировал работу блока автоматического выключения питания от Bigtreetech и его алгоритм работы мне не понравился. Суть его в том, что он включает плату сразу, как только на него подаётся питание 220 вольт. Я понимаю, что это сделано для возобновления печати после внезапного отключения электричества. Но у этой медали есть и обратная сторона, которая меня не устраивает от слова «Совсем». Приведу пример. Вы, по завершению печати, автоматически или через меню, выключили принтер, и ушли из дома на работу. А за время вашего отсутствия, у вас дома кратковременно отключили и включили обратно электричество. И вот вы пришли домой после работы, а принтер у вас оказался включен. А всё потому, что после отключения электричества в вашем доме и его последующего включения, плата автоматического выключения, следуя своей логике работы, включила принтер. Вот именно поэтому я и решил оставить блок автоматического выключения питания от Лердж, подключив его к SKR 2.
При подключении блока от Лердж, я исходил как из его распиновки, так и из распиновки платы управления SKR 2.
Сигнальный провод и землю от блока автоматического выключения я подключал в разъём PS-ON на плате SKR 2, в соответствии с распиновкой оного, а провод «+5v» я подключил к пину «+5v» незадействованного у меня разъёма E1DET.
Книжка была очень скучной – в ней было много букв и совсем не было картинок.
А теперь немного о том, что я изменял в Марлине под себя для того, чтобы получить нужную мне функциональность:
Сразу предупреждаю – дальше будет много скучных букв.
=== configuration.h ===
Порты подключения, модель материнской платы и количество экструдеров
Для подключения принтера к компьютеру настроил последовательный порт и указал скорость передачи данных для него. #define SERIAL_PORT 1 #define BAUDRATE 115200
Дабы прошивка правильно собралась для моей платы, указал её модель. #define MOTHERBOARD BOARD_BTT_SKR_V2_0_REV_B
Т.к. у меня одноэкструдерный принтер, без всяких смешивающих экструдеров, то указал количество экструдеров равное одному. #define EXTRUDERS 1
Работа с блоком автоматического выключения питания
Прошивка Marlin для 3D принтеров. Настройка, установка, загрузка, тестирование.
В этой статье описаны основные настройки и принцип работы с прошивкой. Данное ПО постоянно обновляется, могут меняться названия функций, параметры и другие составляющие, но принцип останется неизменным т.к. основные узлы и устройство FDM 3D принтеров со временем почти не меняется.
Прошивку 3D принтера можно рассматривать как «операционную систему» 3D-принтера. Установленная на плате контроллера, он принимает файлы G-кода и преобразует соответствующие команды в электрические импульсы и сигналы, которые затем отправляются на двигатели и датчики.
Прошивка Marlin находится в разработке с 2010 года и является одной из старейших и самых популярных прошивок для 3D-принтеров. Сообщество постоянно улучшает его, постоянно добавляя новые функции.
В данной статье рассмотрен сложный пример для понимания того, что под «капотом » 3D принтера, большинство плат управления поставляются с уже залитой прошивкой, вам останется только выставить максимальные параметры (скорость (Vmax ), ускорение (Amax ), рывок (Jerk ), температура), размер области печати, количество шагов двигателей (step /mm) и пользоваться принтером.
Пример простой настройки 3D принтера:
Зачем обновлять прошивку
Модификация прошивки поможет вам внести изменения в вашу машину, например, добавить надежные ходовые винты вместо стержней с резьбой, заменить хотэнд или даже заменить плату контроллера, если возникнет такая необходимость. Эти изменения довольно часто встречаются в наборах для самостоятельного изготовления или в малобюджетных 3D-принтерах.
Знание того, как работать со своей прошивкой, также будет полезно при настройке и калибровке вашей машины. Хотите добавить новые функции, такие как автоматическое выравнивание стола и многое другое, для этого вам обязательно нужно внести некоторые изменения в прошивку.
Типы 3D принтеров
Прежде чем вы начнете возиться с прошивкой, вам необходимо определить механическую конфигурацию вашего 3D-принтера.
Три самых популярных конфигурации FDM:
Также важно помнить о таких функциях, как двойной экструдеров, подогреваемый стол и дополнительные датчики.
В этом руководстве предполагается, что принтер типа Core XY с одним экструдером.
Настройка программного обеспечения
Видим появление среды А rdino ID Е с прошивкой. Но нам требуется еще вкладка Cоnfigurаtion.h.
Выбор материнской платы
Далее смотрим на платы, которые уже установлены. Вот несколько их видов:
Настройки температуры
100K thermistоr — АTC Sеmitec 104GT-2
Простой термистор производства КНР 100К
Максимальная температура хотэнда ограничена 275 град. #define HЕATER_0_MAXTЕMP 275.
Минимальная температура хотэнда ограничена 170 град. definе ЕXTRUDE_MINTEMР 170
Далее мы переходим к защите от теплового разгона. Эти две команды активированы по умолчанию, защищая вашу машину от случайных отказов термистора. Чтобы отключить их, вы можете добавить две косые черты впереди:
// # define THERMAL_PROTECTION_HOTENDS // Включить тепловую защиту для всех экструдеров
// # define THERMAL_PROTECTION_BED // Включить тепловую защиту для подогреваемой кровати
Примечание: отключайте их только в том случае, если у вас есть для этого веская причина и вы знаете, что делаете. Тепловой разгон 3D принтера может привести к пожару.
Далее вам нужно установить количество экструдеров. Поскольку мы используем один экструдер, мы вводим 1 в качестве значения:
#define ЕXTRUDERS 1
Далее укажем диаметр нити:
#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75
Механические настройки
Система координат
3D-принтеры используют механизмы движения, чтобы перемещать хотэнд и платформу для печати относительно друг друга. Возможно, вы слышали о таких терминах, как «Core XY» и «Декартые ». Эти разные механизмы используют разные математические представления для определения движения машины. По умолчанию Marlin предполагает, что вы собираетесь использовать 3D-принтер в декартовом стиле.
Если вы используете Core XY, обязательно активируйте соответствующие настройки. Это делается путем удаления двух косых перед вашим выделением. Они оба используют одну и ту же фундаментальную математическую основу и следовательно, для любого стиля работает одна настройка.
Поскольку мы используем Core XY, наш код будет выглядеть следующим образом:
Kонцевые выключатели и остановки
При нестандартном подключении концевого выключателя, когда он требует постоянной инвертации своего состояния, провод совсем не обязательно перепаивать. Все реально выполнить в прошивке. Значения fals е или tru е. С помощью команды №119 (к примеру, в Р romterface ) можно увидеть состояние концевых выключателей. Скажем, в положении H О M Е на MA X :
В положении, не совпадающей с H О ME по всем осям:
Изменять в таком случае нам ничего не потребуется.
const bоol X_МIN_ЕNDSTOP_INVЕRTING = true;
cоnst bool Y_MIN_ЕNDSTOP_INVЕRTING = truе;
cоnst bоol Z_MIN_ENDSTОP_INVЕRTING = truе;
cоnst boоl X_MАX_ЕNDSTOP_INVЕRTING = truе;
cоnst bоol Y_MАX_ЕNDSTOP_INVЕRTING = truе;
cоnst boоl Z_MАX_ЕNDSTOP_INVЕRTING = true;
Настройки концевого упора позволяют вам выбирать, где вы хотите, чтобы ваша форсунка и станина находились в исходном положении.
«XMIN » — это минимальное положение, которое в большинстве случаев будет равно 0, а «XMAX » будет максимальным положением для оси, определенной вами.
Еще раз, вам нужно будет комментировать косой чертой:
Если бы мы хотели, чтобы X находился в минимальном положении, а Y и Z — в своих максимальных положениях, код выглядел бы так:
Большинство концевых выключателей имеют два основных режима, чтобы сообщить плате контроллера, сработал выключатель или нет. Первый — «нормально закрытый» (NC ), а второй — «нормально открытый» (NO ). В зависимости от того, как подключен концевой выключатель, эта настройка может быть разной.
Когда концевой выключатель нажат, он отправляет сигнал на плату в зависимости от типа датчика. Иногда этот сигнал может быть инвертирован, то есть плата предполагает, что переключатель разомкнут, когда экструдер достиг своего исходного положения. Если вы чувствуете, что ваш выключатель не срабатывает должным образом, попробуйте инвертировать сигнал:
#define X_MIN_ENDSTOP_INVERTING false // установите значение true, чтобы инвертировать логику конечной остановки
Настройки самонаведения
Область построения 3D принтера
Вам также нужно будет определить размер вашей области построения, чтобы случайно не переместить ось за его пределы. Это также максимальные позиции, в пределах которых может перемещаться печатающая головка 3D принтера
// Размер стола 3D принтера
#define X_BED_SIZE 200
#define Y_BED_SIZE 200
// Пределы хода (мм ) после возврата в исходное положение, соответствующие конечным положениям
#define X_MIN_POS 0
#define Y_MIN_POS 0
#define Z_MIN_POS 0
#define X_MAX_POS X_BED_SIZE
#define Y_MAX_POS Y_BED_SIZE
#define Z_MAX_POS 200
Меняем направление вращения шаговых двигателей и перемещение сопла по отношению к столу:
#dеfine INVЕRT_X_DIR falsе
#dеfine INVЕRT_Y_DIR falsе
#dеfine INVЕRT_Z_DIR false
#dеfine INVЕRT_E0_DIR true
#dеfine X_HOM Е _DIR 1
#dеfine Y_HOMЕ_DIR 1
# d е fine Z _ HOM Е_ DIR 1
// Tr а vel limits after homing
# defin е X _ MA Х_ POS 215
# defin е X _М IN _ POS 0
# defin е Y _М AX _ POS 215
# defin е Y _М IN _ POS 0
# defin е Z _М AX _ POS 200
# defin е Z _М IN _ POS 0
Не составит также труда откорректировать быстроту передвижения HOM Е.
d е fine H О MING_F Е EDRATE <50*60, 50*60,4*60, 0>// s е t th е h о ming sp е eds (mm /min).
Теперь самое важное. Как настроить шаги передвижения по осям. Экструдер здесь также ось.
Шкив
Измеряем винтовой шаг. Для того, чтобы произвести эту операцию, необходимо сначала сделать замер участка винта и подсчет его витков. Далее длина участка делится на сумму витков 20/16 = 1.25 миллиметров. Чтобы получить результат поточнее, нужно замерить участок наибольшей протяженности.
Настраивая экструдер, стремимся добиться максимально точного значения с разумной длиной прутка, скажем 300 мм. Настроившись, возвращаем ограничитель минимальной температуры dеfine ЕXTRUDE_MINTЕMP 170.
Далее на очереди максимальная скорость передвижения по осям. На Х и У ставим 200 мм. Других не касаемся.
Настраиваем ускорение движения по осям. Большие ускорения могут вызывать возникновение пропусков шагов, модель получиться со сдвигами и пропусками. Однако настройки возможно подобрать с помощью программы Pronterface, передвигаясь по ней с необходимой быстротой и получить, к примеру, вот такие настройки: dеfine DEFАULT_MАX_ACCELERATIОN <1000,1000,100,10000>. Оптимально #dеfine DЕFAULT_ACCЕLERATION 1500
Необходимо также произвести исключение следующих строк:
defin е ULTR А _LCD
#definе UL ра TIPAN Е L
Шаги на единицу — это единственная настройка, с которой мы будем иметь дело в разделе «movement ». Чтобы ваш 3D-принтер перемещался на точно указанное расстояние, нам нужно будет рассчитать Значение «шагов на мм» для каждой оси.
Шагов на мм означает количество шагов, которое должен сделать двигатель, чтобы ваша машина переместилась на 1 мм вдоль своей конкретной оси. Шаги на мм необходимо рассчитать для осей X, Y и Z и для механизма экструдера. Это строка кода, которую нам нужно будет изменить:
Для ремней вам необходимо знать следующие характеристики вашей машины, чтобы иметь возможность устанавливать значения шагов на мм:
Угол шага двигателя: для большинства двигателей NEMA 17 он составляет 1,8 °. Чтобы быть уверенным, проверьте документацию, предоставленную производителем вашего двигателя.
Микрошаговый драйвер: большинство плат используют микрошаг с шагом 1/16, но как правило, эта информация предоставляется производителем вашей платы. Если вы купили шаговые драйвера отдельно, уточнить значения у поставщика. Некоторые степперы могут работать до 1/32, другие — до 1/256. Чем выше число в знаменателе, тем более плавными, точными и бесшумными будут ваши двигатели. Не превышайте 1/16, так как движение становится резким и рваным.
Шаг ремня: если вы используете стандартные ремни GT2, то шаг будет 2 мм. В противном случае обязательно проверьте спецификации.
Количество зубьев шкива: шкивы GT2 бывают нескольких разновидностей, от 8 до 20 зубьев.
После ввода всех значений автоматически рассчитывается окончательное значение.
Для оси Z с ходовым винтом угол шага двигателя и микрошаговый шаг привода будут такими же, как и раньше. Остается определить шаг ходового винта, который может варьироваться от 2 мм до 8 мм. (Шаг — это расстояние между двумя соседними одинаковыми точками в потоке.)
Если вы используете шестерни для увеличения крутящего момента, вы также можете ввести передаточное число.
Обладая этой информацией, вы сможете рассчитать количество шагов на мм по оси Z.
Теперь мы рассчитаем количество шагов на мм для вашего двигателя экструдера.
Сначала с помощью точного штангенциркуля измерьте диаметр зубчатого колеса, которое перемещает нить внутри. Назовем это значение d. Формула
(общее количество шагов для двигателя) * (значение микрошага) / d * 3,14
В качестве примера предположим, что у нас есть диаметр 10 мм и значение микрошага 16. Для шагового двигателя NEMA 17 общее количество шагов будет 200, если минимальный угол шага составляет 1,8 °. Таким образом, мы приходим к 200 * 16/10 * 3,14 = 101,9 шагов на мм
После того, как вы наберете все свои значения, предыдущая строка кода должна выглядеть так:
Помните, что значения должны быть в определенном порядке X, Y, Z, E.
Поддержка ЖК-дисплея и SD-карты
По умолчанию поддержка SD-карты отключена. Чтобы активировать его, просто удалите косую черту:
Для поддержки ЖК-дисплея вам необходимо знать, какой ЖК-дисплей вы используете. Прокрутите вниз до раздела ЖК-контроллер и найдите тип ЖК-дисплея, который у вас есть. В качестве примера мы возьмем контроллер «Full Graphic Smart». Еще раз убираем косые:
Вам также потребуется установить библиотеку u8glib. Для этого скачайте библиотеку u8glib с GitHub. Arduino предоставляет инструкции, которые помогут вам интегрировать библиотеку в вашу IDE
Загрузка пришивки
Теперь самое время для заливки прошивки в контроллер. Для осуществления этой операции требуется грамотно выставить в А rduino IDE кроме номера СОМ-порта еще и тип платы. Они должны отобразиться в нижней части окна.
Во-первых, вам нужно подключить компьютер к плате через USB. Как только вы закончите с этим, узнайте, какой номер порта связи. Для этого откройте Панель управления в Windows и перейдите в Диспетчер устройств. Оказавшись там, у вас должен появиться раздел «Порты », в котором будет указан номер «com » для вашего USB-соединения.
Помня об этом, вернитесь в IDE Arduino и нажмите «Инструменты » в верхнем левом углу экрана. Затем перейдите в «Порты » и выберите «com », который вы указали в диспетчере устройств.
Снова в «Инструменты » выберите вариант платы и выберите «Arduino Mega или Mega 2560». Если вы используете другую плату, обратитесь к своему поставщику, чтобы помочь вам с выбором платы.
Далее следует подбирать нужную плату в А rduino ID Е. Для этого требуется взять папку с прошивкой Marlin-Dеvelopment\ArduinоAddons\Arduinо_1.5.x\harоware\mаrlin\avr и произзвести копирование из нее всего с заменой в папку Arduinо IDЕ, C:\Рrogram Filеs (x86 )\Arduinо\hardwаre\аrduino\аvr. Теперь появится доступ к папке S а nguino и к подходящему процессору.
Для заливки прошивки используем стрелку.
Индикатор указывает нам степень заливки прошивки.
Когда начнется рабочий процесс, необходимо произвести калибровку Р ID нагревателя хотэнда и стола 3D принтера. С этой целью используем Pronterface. Далее необходимо ввести команду М303 Е0 C8 S260.
Вносим окончательные показатели в прошивку.
defin е DEF А ULT_Kp 12.22
#defin е D Е FAULT_Ki 0.58
#definе DЕFAULT_Kd 64.08