Спартанская простота. Настройки прошивки Sprinter
Собственно, захотелось вспомнить это недалекое прошлое и описать прошивку Sprinter, которая достаточно проста и занимает мало места в ПЗУ микроконтроллера. Несмотря на то, что прошивка уже давно не обновлялась, она все еще в некотором роде популярна в западном RepRap-комьюнити из-за своей простоты. Возможно, она придется по вкусу новичкам в RepRap-строе и тем, кто строит простой принтер, которому автономная печать не очень нужна.
Итак, отличительные особенности и недостатки:
- поддержка печати с карт памяти
- из актуальных плат поддерживается RAMPS (полный список ниже)
- поддерживает практически все G-code, что и Marlin
- поддерживается только один экструдер
- нет поддержки дисплея
Все настройки собраны в одном файле configuration.h. Сама по себе структура прошивки похожа на Marlin (сказывается наследственность), но есть и некоторые отличительные особенности. Тем не менее, пройдусь по почти всем настройкам.
Первым делом выбирается плата. По умолчанию выбрана RAMPS. Список довольно маленький:
// MEGA/RAMPS up to 1.2 = 3,
// RAMPS 1.3/1.4 = 33
// Gen6 = 5,
// Gen6 deluxe = 51
// Sanguinololu up to 1.1 = 6
// Sanguinololu 1.2 and above = 62
// Gen 7 @ 16MHZ only= 7
// Gen 7 @ 20MHZ only= 71
// Teensylu (at90usb) = 8
// Printrboard Rev. B (ATMEGA90USB1286) = 9
// Gen 3 Plus = 21
// gen 3 Monolithic Electronics = 22
// Gen3 PLUS for TechZone Gen3 Remix Motherboard = 23
#define MOTHERBOARD 33
Выбираются типы термодатчиков на экструдере и столе. Список поддерживаемых датчиков, опять же, довольно небольшой:
// 1 100k термистор
// 2 200k термистор
// 3 mendel-parts термистор
// 4 10k термистор - разрешение у него довольно низкое, используйте только разве что для стола
// 5 ParCan supplied 104GT-2 100K
// 6 EPCOS 100k
// 7 100k Honeywell термистор 135-104LAG-J01
#define THERMISTORHEATER 1 - датчик экструдера
#define THERMISTORBED 1 - датчик стола
Устанавливается количество шагов на мм для каждой оси. Не буду приводить остальные пункты из этого раздела, т.к. проще просто забить свои значения в эту строку:
#define _AXIS_STEP_PER_UNIT {80, 80, 3200/1.25,700} - соответственно для X, Y, Z, E осей.
Настройки концевых выключателей. Разбиты на 2 мини-раздела по ходу прошивки. Первый:
#define ENDSTOPPULLUPS - внутренний подтягивающий резистор нужен только для механических концевых выключателей, закомментируйте строку, если используете оптические/индукционные/etc
Если оси двигаются только при нажатых концевых выключателях, нужно инвертировать их состояние (поменяв false н true):
const bool X_ENDSTOP_INVERT = false;
const bool Y_ENDSTOP_INVERT = false;
const bool Z_ENDSTOP_INVERT = false;
Выбор скорости связи при подключении через USB. Раскомментировать либо одно, либо другое
#define BAUDRATE 115200
//#define BAUDRATE 250000
Поддержка печати с карт памяти. Не вижу смысла ее отключать в силу отсутствия дисплея
#define SDSUPPORT
Раскомментируйте для выполнения файла init.g при включении принтера
//#define SDINITFILE
Как и Marlin, эта прошивка поддерживает EEPROM и все связанные с ней G-code (M500/501/etc). Поддержка включается раскомментированием следующей строчки:
//#define USE_EEPROM_SETTINGS
Для отключения передачи информации из EEPROM через USB при включении принтера заскомментируйте строку ниже (экономит примерно 1000 байт кода). Но лучше оставить ее включенной.
#define PRINT_EEPROM_SETTING
Поддержка дуг и окружностей (G2/G3). Не все слайсеры умеют использовать эти команды, но в случае использования прошивки для лазерного резака точно пригодится
#define USE_ARC_FUNCTION
Для инвертирования логического сигнала активации драйверов ШД (низкий уровень) используйте 0, для высокого уровня (не инвертированного) используйте 1. Требуется для некоторых экзотических драйверов ШД
#define X_ENABLE_ON 0
#define Y_ENABLE_ON 0
#define Z_ENABLE_ON 0
#define E_ENABLE_ON 0
Раскомментируйте, если у вас есть проблемы с поздней активацией драйверов. Эта настройка также устанавливает задержку управляющего сигнала после включения драйвера в микросекундах.
//#define DELAY_ENABLE 15
Отключает ШД осей, если те не используются
const bool DISABLE_X = false;
const bool DISABLE_Y = false;
const bool DISABLE_Z = true;
const bool DISABLE_E = false;
Меняет направление вращения ШД на осях:
const bool INVERT_X_DIR = false;
const bool INVERT_Y_DIR = false;
const bool INVERT_Z_DIR = true;
const bool INVERT_E_DIR = false;
Вторая часть настроек концевых выключателей.
Выбирается направление для парковки: 1=MAX, -1=MIN
#define X_HOME_DIR -1
#define Y_HOME_DIR -1
#define Z_HOME_DIR -1
#define ENDSTOPS_ONLY_FOR_HOMING - при раскомментировании выключатели используются только для парковики
const bool min_software_endstops = false; - при смене на true оси не будут двигаться на значения, меньшие нуля
const bool max_software_endstops = true; - при смене на true оси не будут двигаться на значения, бОльшие, чем указаны в X/Y/Z_MAX_LENGTH
Устанавливает максимальные измерения по осям (в мм):
const int X_MAX_LENGTH = 200;
const int Y_MAX_LENGTH = 200;
const int Z_MAX_LENGTH = 100;
Настройки перемещения
#define _MAX_FEEDRATE {400, 400, 2, 45} - максимальная подача соответственно для X, Y, Z, E (мм/сек)
#define _HOMING_FEEDRATE {1500,1500,120} - подачи осей для парковки (мм/мин)
#define _AXIS_RELATIVE_MODES {false, false, false, false} - режимы относительных величин для осей
Максимальная частота шагов драйвера:
#define MAX_STEP_FREQUENCY 30000 (в Гц)
Настройка ретракта экструдера
#define MAX_RETRACT_FEEDRATE 100 (мм/сек)
Настройки ускорения:
#define _ACCELERATION 1000 - Ускорение по умолчанию в мм/с^2
#define _RETRACT_ACCELERATION 2000 - Ускорение по умолчанию в мм/с^2 для ретрактов
#define _MAX_XY_JERK 20.0 - величина движений, не требующих ускорений (они могут быть выполнены мгновенно)
#define _MAX_Z_JERK 0.4 - то же для Z
#define _MAX_E_JERK 5.0 - то же для экструдера. Все в мм/сек
#define _MAX_START_SPEED_UNITS_PER_SECOND {25.0,25.0,0.2,10.0} - максимальная начальная скорость для движений с ускорениями (мм/с) (постоянное ускорение)
#define _MAX_ACCELERATION_UNITS_PER_SQ_SECOND {5000,5000,50,5000} - максимальное ускорение в мм/с^2 для X, Y, Z, E для движений печати или ретрактов (экспоненциальное ускорение)
На этом основные настройки, на мой взгляд, заканчиваются. Дальше идут всякие экзотичные-специфичные.
Эта команда может быть полезна, если к одному компьютеру подключено несколько принтеров, и вам нужно идентифицировать какой-либо из них. Для этого задается свой ID ниже, и по команде M115 принтер пришлет этот ID в консоль:
#define _DEF_CHAR_UUID '00000000-0000-0000-0000-000000000000'
С помощью этой настройки возможно управлять вентилятором обдува с помощью софтварного PWM (500Гц) и использовать для этого любой цифровой выход на плате. Предназначена в основном для Sanguinololu
#define FAN_SOFT_PWM
Минимальная скорость старта вентилятора, когда последней командой было его отключение. Установите в 0 для отключения этой функции. Если будет задано значение от 1 до 255, то вентилятор будет вращаться с заданной скоростью столько, сколько задано в параметре MINIMUM_FAN_START_TIME
#define MINIMUM_FAN_START_SPEED 140
Время, в течение которого вентилятор будет вращаться со скоростью, указанной выше:
#define MINIMUM_FAN_START_TIME 6000 - 6 секунд
Опущу некоторые настройки, связанные с температурой. Прошивка поддерживает автонастройку PID (как ее сделать читайте здесь), но сам PID есть только у экструдера. После калибровки значения вводятся здесь:
#define PID_PGAIN 2560
#define PID_IGAIN 64
#define PID_DGAIN 4096
Обратите внимание: каждое значение, получившееся после калибровки, нужно умножить на 256 перед вводом.
Ограничение тока через нагреватель экструдера (30-255)
#define HEATER_CURRENT 255
Частота проверок температуры в миллисекундах:
#define HEATER_CHECK_INTERVAL 500 - для экструдера
#define BED_CHECK_INTERVAL 5000 - для стола
Закомментируйте строку ниже для включения управления нагревателями во время ускорения
#define DISABLE_CHECK_DURING_ACC
Раскомментируйте строку ниже для отключения управления нагревателями во время движений
#define DISABLE_CHECK_DURING_MOVE
Функция 'наблюдателя'. Программа ждет в течение указанного периода времени всякий раз, когда команда M104/M109 увеличивает целевую температуру. Если температура не увеличилась в конце периода, то целевая температура устанавливается в 0. Может быть сброшена еще одной командой M104/M109
//#define WATCHPERIOD 5000 - 5 секунд
Действительная температура должна быть близка к целевой в течение следующего времени, чтобы М109 считалась выполненной:
//#define TEMP_RESIDENCY_TIME 20 - секунд
//#define TEMP_HYSTERESIS 5 - (C°) диапазон +/- температур. которые считаются близкими к целевой температуре
Этой настройкой устанавливается минимальная температура, ниже которой нагреватель не включится
#define MINTEMP 5
При достижении указанной температуры нагреватель отключится. Должно предотвратить случайные перегревы, но не поможет при неисправном термисторе. Для защиты от обрыва/замыкания термистора используйте MINTEMP
#define MAXTEMP 275
Вентилятор для охлаждения драйверов ШД. Включится, если активен хотя бы один драйвер и выключится по истечении указанного времени после отключения последнего драйвера.
//#define CONTROLLERFAN_PIN 23 - пин управления вентилятором, закомментируйте для отключения
#define CONTROLLERFAN_SEC 60 - сколько секунд будет вращаться вентилятор после отключения последнего драйвера
Вентилятор для охлаждения теплового барьера. Включится при превышении температуры, указанной в EXTRUDERFAN_DEC.
//#define EXTRUDERFAN_PIN 66 - пин управления вентилятором, закомментируйте для отключения
#define EXTRUDERFAN_DEC 50 //температура, после которой включится вентилятор
При раскомментировании принтер сначала заканчивает движения в буфере, прежде чем выполнять M42, изменять скорость вентилятора/температуру нагревателей и т.д.
//#define CHAIN_OF_COMMAND 1
На этом все. Прошивка реально довольно спартанская, но, с другой стороны, даже она бы полностью покрыла мои нужды, если бы мне не был нужен дисплей. Больше прошивок, хороших и разных.
Adios
Еще больше интересных статей
Про мощность керамического нагревателя Qidi Q1 pro
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Некоторое время назад я менял керамический нагреватель на...
Превращение Anycubic Kobra S1 в S1 Carbon.
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Прошло несколько месяцев с нашей предыд...
Настраиваем прошивку Marlin и заливаем её в 3D принтер
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Комментарии и вопросы
Весь скрипт очистки с воем вен...
Выгнутые были на струйных прин...
дождёмся тестов и сравнений по...
Недавно появилась одна полоса...
Sculpful s9 лазерный гравирова...
Ищу токопроводящие филам...