Некорректный стартовый G-code на Ender 3 проявляется типичными симптомами: сопло царапает стол при движении в нулевую точку, первая линия продувки печатается в воздухе или пластик не успевает прогреться перед началом модели. Все эти проблемы решаются правкой нескольких строк в настройках слайсера — и для этого не нужно перепрошивать принтер.

Стартовый код — это блок команд, который принтер выполняет перед печатью каждой модели: паркует оси, прогревает хотенд и стол, очищает сопло. В этой статье разберём готовый проверенный вариант для Ender 3, Ender 3 V2 и Ender 3 Pro, объясним назначение каждой команды и покажем, куда вставлять код в популярных слайсерах.

Что делает стартовый G-code и почему стандартный не всегда подходит

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

Во-первых, нагрев стола и сопла в стоковом скрипте иногда запускается последовательно, что увеличивает время подготовки. Во-вторых, если вы установили датчик автокалибровки BLTouch или CR Touch, в код необходимо добавить команду G29 — без неё карта высот стола просто не построится. В-третьих, линия продувки по умолчанию короткая, и остатки старого пластика могут попасть на первый слой модели.

Хороший стартовый код решает три задачи: безопасный прогрев без касания стола соплом, построение сетки уровня (при наличии датчика) и качественная продувка сопла перед стартом. Ниже — готовый вариант, который закрывает все три пункта.

Готовый стартовый G-code для Ender 3

Этот вариант подходит для Ender 3, Ender 3 Pro и Ender 3 V2 с прошивкой Marlin. Скопируйте блок целиком:

; Ender 3 Start G-code

M140 S{material_bed_temperature_layer_0} ; нагрев стола

M104 S150 ; преднагрев сопла до 150°C без ожидания

G28 ; парковка всех осей

G29 ; автокалибровка (только с BLTouch/CR Touch)

M190 S{material_bed_temperature_layer_0} ; ожидание нагрева стола

M109 S{material_print_temperature_layer_0} ; ожидание нагрева сопла

G92 E0 ; обнуление экструдера

G1 Z2.0 F3000 ; поднять сопло

G1 X2.1 Y20 F5000 ; переход к краю стола

G1 Z0.28 F5000 ; опустить сопло

G1 Y100 E15 F1500 ; линия продувки 100 мм

G1 Y120 E12 F1500 ; вторая линия продувки

G92 E0 ; сброс экструдера

G1 Z2.0 F3000 ; поднять сопло перед печатью

Ключевая идея этого скрипта — двухэтапный нагрев. Сопло сначала греется только до 150 °C: при такой температуре пластик ещё не вытекает и не капает на стол во время калибровки G28/G29. Полный нагрев до рабочей температуры происходит уже после парковки, непосредственно перед продувкой.

💡

Если у вас нет датчика автокалибровки, просто удалите или закомментируйте строку G29 — поставьте точку с запятой перед командой: ;G29

Линия продувки рисуется вдоль левого края стола и не пересекается с областью печати, поэтому её не нужно удалять вручную — она легко отделяется после остывания.

Разбор команд: что означает каждая строка

Понимание команд позволит адаптировать код под свои задачи, а не копировать его вслепую. Вот назначение основных инструкций:

  • 🔥 M140 / M190 — нагрев стола. M140 запускает нагрев без ожидания, M190 блокирует выполнение до достижения целевой температуры.
  • 🌡️ M104 / M109 — аналогичные команды для сопла: первая не ждёт, вторая дожидается полного прогрева.
  • 🏠 G28 — автопарковка (homing) всех осей по концевым выключателям.
  • 📐 G29 — построение сетки уровня стола датчиком. Работает только если датчик установлен и поддерживается прошивкой.
  • 💨 G92 E0 — сброс счётчика экструдера, чтобы отсчёт подачи пластика начинался с нуля.
  • 📏 G1 — управляемое линейное перемещение с заданной скоростью (параметр F) и подачей пластика (E).

Переменные в фигурных скобках вроде {material_print_temperature_layer_0} — это плейсхолдеры Cura: слайсер автоматически подставит температуры из текущего профиля материала. В PrusaSlicer синтаксис другой — там используются плейсхолдеры вида {first_layer_temperature[0]} и {first_layer_bed_temperature[0]}.

📊 Используете ли вы датчик автокалибровки стола?
Нет, калибрую вручную
Да, BLTouch
Да, CR Touch
Планирую установить

Куда вставлять код в Cura и PrusaSlicer

В Cura стартовый скрипт редактируется через настройки принтера. Откройте Настройки → Принтер → Управление принтерами, выберите ваш Ender 3 и нажмите «Настройки машины» (Machine Settings). В нижней части окна находится поле Start G-code — замените его содержимое на готовый блок и сохраните.

В PrusaSlicer путь другой: Настройки принтера → Пользовательский G-code → Стартовый G-code. Учтите, что там нужно заменить плейсхолдеры температур на синтаксис PrusaSlicer, иначе слайсер выдаст ошибку при экспорте.

☑️ Проверка после смены стартового кода

Выполнено: 0 / 5

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

Адаптация под BLTouch и CR Touch

Установка датчика автокалибровки меняет логику стартового кода. Команда G29 должна выполняться после G28, но до полного нагрева сопла — иначе капли расплава на кончике сопла исказят измерения.

⚠️ Внимание: команда G29 сработает только если прошивка принтера скомпилирована с поддержкой датчика уровня. На стоковой прошивке Ender 3 без датчика эта строка либо проигнорируется, либо вызовет ошибку — поведение зависит от версии прошивки. Перед включением G29 убедитесь, что прошивка соответствует вашей конфигурации.

Дополнительно владельцам датчиков рекомендуется команда M420 S1 — она подгружает сохранённую в памяти сетку калибровки без повторного измерения. Это ускоряет старт: полная G29 нужна не при каждой печати, а только после механических изменений — перемещения принтера, замены стекла стола, снятия сопла.

Чем G29 отличается от M420 S1

G29 строит новую сетку уровня стола, измеряя высоту в нескольких точках — это занимает время. M420 S1 просто загружает ранее сохранённую сетку из EEPROM. Типичная практика: выполнить G29 один раз, сохранить результат командой M500, а в стартовом коде использовать только M420 S1 после G28.

Типичные ошибки и их последствия

Ошибки в стартовом коде почти всегда видны уже на первом слое. Вот самые частые сценарии:

СимптомВероятная причинаРешение
Сопло царапает стол при стартеНет подъёма по Z после G28Добавить G1 Z2.0 после парковки
Пластик не выходит при продувкеПродувка началась до полного нагреваПроверить наличие M109 перед линией
Ошибка при нарезке в PrusaSlicerПлейсхолдеры в синтаксисе CuraЗаменить переменные на формат PrusaSlicer
Первая линия рвётся и пузыритсяВлажный пластик или мусор в соплеУвеличить длину продувки, просушить филамент
G29 вызывает ошибкуПрошивка без поддержки датчикаУбрать G29 или обновить прошивку
⚠️ Внимание: никогда не запускайте печать с новым стартовым кодом без присмотра за первыми минутами работы. Если в скрипте ошибка в координатах, сопло может упереться в стол или клипсу стекла. Держите руку рядом с кнопкой питания на первом тестовом запуске.

Ещё одна частая проблема — печать начинается, а пластик не идёт, потому что перед этим сработала ретракция или сопло охладилось ниже температуры плавления. Проверьте, что в конце стартового кода нет лишних команд отката филамента, а M109 стоит непосредственно перед продувкой.

💡

Правильный порядок в стартовом коде: преднагрев → G28 → G29 (при наличии датчика) → полный нагрев → продувка → печать. Нарушение этой последовательности — главная причина проблем со стартом.

Тонкая настройка: что можно улучшить

Базовый скрипт можно дополнить под свои привычки. Например, добавить в начало команду M117 Heating... — она выведет сообщение на экран принтера, и вы будете видеть, на каком этапе находится подготовка.

Для адгезивных материалов вроде ABS или PETG имеет смысл увеличить время выдержки после нагрева стола: команда G4 P60000 добавит паузу в 60 секунд, чтобы стол прогрелся равномерно по всей площади. Для PLA это обычно избыточно.

Некоторые пользователи добавляют двойную линию продувки или «юбку» вокруг места старта. Это оправдано, если сопло склонно к подтеканию, но помните: лишний пластик у края стола занимает место и может мешать большим моделям.

💡

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

Часто задаваемые вопросы

Подойдёт ли один и тот же стартовый код для Ender 3, V2 и Pro?

В целом да — механика и прошивки на базе Marlin у этих моделей совместимы по базовым командам. Различия касаются в основном наличия датчика автокалибровки (у Ender 3 V2 в некоторых ревизиях он есть, у базового Ender 3 — нет) и размеров области печати. Координаты линии продувки из нашего примера подходят всем трём моделям.

Обязательна ли команда G29 в каждой печати?

Нет. Если сетка уровня уже построена и сохранена (M500), достаточно загружать её командой M420 S1. Полная G29 нужна после механических изменений: переноса принтера, замены стекла, регулировки стола.

Почему сопло греется только до 150 °C перед калибровкой?

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

Что делать, если после вставки кода слайсер выдаёт ошибку?

Чаще всего причина в плейсхолдерах температур: синтаксис Cura и PrusaSlicer различается. Замените переменные на формат вашего слайсера или временно впишите числовые значения температур напрямую, чтобы проверить работоспособность скрипта.

Можно ли убрать линию продувки совсем?

Можно, но нежелательно. Продувка гарантирует, что сопло заполнено свежим пластиком и давление в хотенде стабилизировалось перед первым периметром. Без неё первые сантиметры модели могут печататься «всухую». Альтернатива — юбка (skirt) с достаточным количеством линий в настройках слайсера.