SKR 1.3
Содержание
Введение
Данная статья описывает опыт установки на принтер Creality3D Ender-3 материнской платы BIG TREE TECH (BIQU) SKR v1.3 с драйверами Trinamic TMC2208 в режиме управления по UART с последующей настройкой и прошивкой Marlin 2.x bugfix. Приведенные здесь инструкции также применимы для Ender-3 Pro.
Зачем вообще это надо?
Плата BIG TREE TECH (BIQU) SKR v1.3 оснащена 32-битным микропроцессором LPC1768 на ядре ARM Cortex-M3. Данный микропроцессор обладает на порядок более внушительными вычислительными возможностями, чем ATmega1284P, установленный на штатной плате Creality 1.1.x, которой оснащаются принтеры серии Ender. Это дает возможность одновременно задействовать нагружающие микропроцессор и занимающие много памяти функции, такие как использование Linear Advance, автоуровня типа BLTouch/3DTouch, плавных ускорений S Curve Acceleration и др. Кроме того, в целом повышается быстродействие системы и максимально достижимая скорость печати.
Помимо этого, плата BIG TREE TECH (BIQU) SKR v1.3 имеет еще несколько важных преимуществ:
- Колодки для драйверов в форм-факторе Polulu (SilentStepStick) - возможность установить любые поддерживаемые прошивкой драйвера без необходимости перепайки и колхозинка штатной платы
- Возможность установки до 5 драйверов и 2 нагревателей хотенда - можно установить дополнительный экструдер, toolchange-систему, MMU-ситему, использовать выход на второй нагреватель как дополнительный управляемый PWM-выход (подсветка/охлаждение)
- Наличие предохранителей на плате - меньше вероятность спалить мосфет стола или хотенда при случайном замыкании
- Возможность подключить цветной (сенсорный) дисплей, наличие дополнительных AUX портов
- Разводка под управление драйверами по UART и SPI «из коробки»
Для управления шаговыми двигателями (ШД) было решено использовать драйвера Trinamic TMC2208. Это относительно новые драйвера, пришедшие на смену хорошо зарекомендовавшему себя поколению TMC21XX. К их преимуществам можно отнести:
- Технология StealthChop2 – тишина работы моторов
- Технология SpreadCycle – оригинальный алгоритм direct current управления от Trinamic, позволяет точно управлять током в обмотках ШД для увеличения точности позиционирования и момента на высоких скоростях
- Возможность работы в режиме нативного дробления до 1/256 шага или с меньшим дроблением, но с интерполяцией до 1/256.
- Возможность управления по UART
На последнем пункте остановимся подробнее. В данной статье рассматривается именно способ установки драйверов c управлением по UART. Это позволяет из прошивки конфигурировать ток, дробление шага, интерполяцию, режим чоппера и другие параметры работы драйвера. Кроме того, в прошивке Marlin (и, возможно, в других) реализован так называемый гибридный режим, суть которого в автоматическом переключении драйвера из тихого режима StealthChop2 в более «мощный» SpreadCycle при достижении определенной скорости (hybrid mode threshold). Это позволяет «поддать жару», когда это нужно, наслаждаясь тишиной в остальное время. Помимо этого, используя управление по UART, можно настроить фазы чоппера SpeadCycle для достижения меньшего уровня шума в этом режиме (я пока этого не делал и это тема для отдельной статьи).
Что нам понадобится
- Принтер Creality3D Ender-3 (Ваш К.О.)
- Плата BIG TREE TECH (BIQU) SKR v1.3
- Драйвера Trinamic TMC2208 v2.1
- Паяльник
- Набор шестигранных ключей
- Надстройка PlatformIO для IDE VS Code
- Прошивка Marlin версии bugfix-2.0.x (самая свежая)
- Вольтметр
- Мелкая отвертка под плоский шлиц (лучше диэлектрическая)
ПАААААЕХАЛИ!
Электроника
Важно: считаем ток ШД!
Насколько я успел заметить, на принтеры Creality3D устанавливается широкий спектр ШД, отличающихся своими характеристиками, в первую очередь – максимальным током обмоток. Некоторые моторы практически невозможно «нагуглить» по маркировке и узнать требуемый им ток. Поэтому для того, чтобы действовать наверняка, я советую перед заменой платы выяснить, какой ток установлен для Ваших конкретных ШД.
На дефолтной плате Creality 1.1.x установлено 4 драйвера A4988, распаянных непосредственно на плате. Рядом с каждым драйвером установлен потенциометр (turnpot), который задает опорное напряжение Vref.
Отключите от платы провода ШД. Включите питание. Аккуратно измерьте напряжение между центром «крутилки» потенциометра и землей (за землю можно взять корпус блока питания) для каждого из драйверов, запишите.
Теперь посчитаем ток, который нужно установить для наших конкретных ШД на новых драйверах. Дело в том, что Vref для драйвера A4988 задает максимальный ток Imax, в то время как для TMC2208 мы задаем среднеквадратичное значение тока Irms ~ Imax/1.414
Приступим к расчетам:
Irms(TMC2208) = Imax(A4988)/1.414 = Vref(A4988)/1.1312
Это и есть нужное нам значение тока новых драйверов. При управлении по UART данного расчета достаточно. Тем, кто не хочет управлять по UART, то есть устанавливает драйвера в standalone-режиме, необходимо посчитать Vref для TMC2208 по следующей формуле:
Vref(TMC2208) = (Irms(TMC2208)*2.5) / 1.77 ~ Vref(A4988)/1.1312
Указанная выше формула справедлива только для наиболее распространенных вариантов исполнения драйверов TMC2208 с референсным резистором Rsense = 0.11 Ом.
Внимание! Настройка (и измерение) Vref должна производиться с отключенными проводами ШД, но подключенным основным питанием платы.
Подготовка драйверов
Для того, чтобы использовать UART для управления драйверами, необходимо аккуратно запаять на них перемычку, как показано на рисунке (здесь и далее показаны драйвера от BIGTREETECH версии 2.1, но для драйверов от других производителей, например Fysetc, действия будут аналогичными)
Замена платы
Отключаем питание принтера. Снимаем крышку с корпуса электроники, отключаем вентилятор охлаждения от платы. Аккуратно удаляем термоклей со всех разъемов, отключаем все провода от платы. Не забываем пометить удобным способом провода, на которых нет заводских меток.
Откручиваем плату от корпуса электроники, откручиваем корпус электроники от рамы принтера (один из винтов находится снизу, под принтером). Для подключения родных двухконтактных разъемов концевиков в трехконтактные разъемы на плате SKR нужно модифицировать провода одним из способов (чтобы провода подключались к двум нижним пинам разъема, см. рисунок):
- «Переобуваем» провод в трехпиновый корпус – самый лучший вариант, если есть такие корпуса
- Подрезаем один из двух ключевых выступов корпуса разъема на проводе так, чтобы он правильно вошел в разъем на плате (отмечен красным)
Убираем с платы все джамперы, кроме 5 (6, если у нас 2 хотенда) – по 1 возле 4 драйверов на красных площадках (включает управление по UART) и еще 1 на красной площадке в центре платы, отвечающий за режим питания контроллера – от USB или от внешнего БП. Устанавливаем драйвера (см. рисунок, если поставить вверх ногами – дровам кирдык). Теперь подключаем все провода в соответствующие разъемы платы (внимание на полярность!), для этого может потребоваться немного распотрошить жгут проводов. Вентилятор обдува детали подключаем в разъем FAN, вентилятор охлаждения электроники – в разъем 12/24 V (в самом углу платы, возле разъема ШД оси X), вентилятор охлаждения радиатора печатной головы – в разъем нагревателя второго хотенда HT1 (винтовая колодка) если у нас только 1 хотенд, иначе параллельно вентилятору охлаждения электроники. Экран подключаем в разъем EXP1, провода концевиков – в трехпиновые разъемы Xmin, Ymin, Zmin на плате, остальное подключается очевидным образом.
Прошивка
Дисклеймер
Данный раздел предполагает, что Вы знаете, как конфигурировать прошивку Marlin. Здесь будут описаны только специфические настройки для платы SKR 1.3 и драйверов TMC2208 с управлением по UART, а также несколько других полезных твиков. Если Вы не знаете как конфигурируется прошивка, как устанавливаются размеры области печати, шаги по осям, ускорения и прочие основные параметры принтера – для начала обязательно изучите эту информацию, например по видео Дмитрия Соркина, и только после этого продолжайте.
В качестве отправной точки крайне советую использовать конфигурационные файлы для Ender-3 из папки с примерами, это избавит от необходимости конфигурирования концевиков, направлений моторов, зоны печати и прочих важных вещей – там это уже сделано. Здесь эти настройки рассматриваться не будут.
Установка PlatformIO IDE
Качаем последнюю версию Marlin bugfix-2.0.x. Качаем VS Code. Запускаем VS Code, заходим в Extensions, вводим в строку поиска platformio, жмем зеленую кнопку Install возле расширения PlatformIO IDE, ждем завершения установки расширения, перезапускаем VS Code. На появившейся странице PIO Home жмем кнопку Open Project, заходим в папку с прошивкой (в ней должен быть файл platformio.ini), жмем Open.
Конфигурация
Нам нужно будет внести изменения в 3 файла: platformio.ini, configuration.h и configuration_adv.h.
Начнем по порядку. Настоятельно советую пользоваться поиском Ctrl+F для быстрого перехода к нужным настройкам.
platformio.ini
Указываем в разделе [platformio] микроконтроллер, для которого будем компилировать прошивку.
env_default = LPC1768
configuration.h
Настраиваем последовательные порты:
#define SERIAL_PORT -1 #define SERIAL_PORT_2 0
Ускоряем немного обмен данными через последовательный порт
#define BAUDRATE 250000
Указываем, какая у нас материнская плата
#ifndef MOTHERBOARD #define MOTHERBOARD BOARD_BIGTREE_SKR_V1_3 #endif
Убеждаемся, что включена защита от перегрева
#define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders #define THERMAL_PROTECTION_BED // Enable thermal protection for the heated bed #define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber
Указываем, какие у нас установлены драйвера ШД
#define X_DRIVER_TYPE TMC2208 #define Y_DRIVER_TYPE TMC2208 #define Z_DRIVER_TYPE TMC2208 #define E0_DRIVER_TYPE TMC2208 #define E1_DRIVER_TYPE TMC2208 // разумеется, если есть второй экструдер
Если устанавливаем драйвера без управления по UART, то вместо TMC2208 пишем TMC2208_STANDALONE
Можем включить более плавные ускорения, при желании
#define S_CURVE_ACCELERATION
Проверяем направление мотора экструдера. Если редукторный фидер, пишем false, если безредукторный, то true
#define INVERT_E0_DIR true
Можем настроить пункт меню для калибровки стола – Level corners, печатная коловка будет поочередно перемещаться в каждый из 4 углов (в положение над регулировочным винтом) и в центр стола (здесь параметры для калибровки по эталону 0.1 мм, толщину эталона можно задать параметром LEVEL_CORNERS_HEIGHT)
#define LEVEL_BED_CORNERS #if ENABLED(LEVEL_BED_CORNERS) #define LEVEL_CORNERS_INSET 35 // (mm) An inset for corner leveling #define LEVEL_CORNERS_Z_HOP 5 // (mm) Move nozzle up before moving between corners #define LEVEL_CORNERS_HEIGHT 0.1 // (mm) Z height of nozzle at leveling points #define LEVEL_CENTER_TOO // Move to the center after the last corner #endif
Настраиваем более адекватные скорости хоуминга
#define HOMING_FEEDRATE_XY (30*60) #define HOMING_FEEDRATE_Z (3*60)
Выбираем язык меню
#define LCD_LANGUAGE en
Проверяем поддержку карты памяти
#define SDSUPPORT
Включаем «пищалку», чтобы она могла нас уведомлять о важных вещах типа перегрева, но выключаем звук в меню
#define SPEAKER #define LCD_FEEDBACK_FREQUENCY_DURATION_MS 0 #define LCD_FEEDBACK_FREQUENCY_HZ 0
Включаем дефолтный дисплей Ender-3
#define CR10_STOCKDISPLAY
Убираем «свист» вентиляторов от ШИМ
#define FAN_SOFT_PWM #define SOFT_PWM_SCALE 0
configuration_adv.h
Включаем отображение значений АЦП вместе со значениями температуры по команде M105 (если потом хотим калибровать термистор, о чем позже будет статья)
#define SHOW_TEMP_ADC_VALUES
Если вентилятор обдува модели плохо стартует на низких оборотах, помогаем ему «пинком»
#define FAN_KICKSTART_TIME 200
Если подключили вентилятор обдува радиатора печатной головы вместо нагревателя второго хотенда, настраиваем тут пин и температуру включения
#define E0_AUTO_FAN_PIN FAN1_PIN // Cold-end fan to E1 heater #define EXTRUDER_AUTO_FAN_TEMPERATURE 50 #define EXTRUDER_AUTO_FAN_SPEED 255 // 255 == full speed
Задаем более «нежные» делители скоростей для хоуминга, чтоб меньше разбивались концевики
#define HOMING_BUMP_DIVISOR { 4, 4, 4 } // Re-Bump Speed Divisor (Divides the Homing Feedrate)
Задаем время после последнего движения (в секундах), через которое отключается удержание ШД
#define DEFAULT_STEPPER_DEACTIVE_TIME 300
Задаем более адекватные скорости для движения осей из меню принтера
#define MANUAL_FEEDRATE {100*60, 100*60, 10*60, 50*60}
Улучшаем печать по USB
#define DEFAULT_MINSEGMENTTIME 50000
Опционально включаем звуковое оповещение при изменении Feedrate на главном экране энкодером (помогает избежать случайного изменения)
#define BEEP_ON_FEEDRATE_CHANGE #if ENABLED(BEEP_ON_FEEDRATE_CHANGE) #define FEEDRATE_CHANGE_BEEP_DURATION 10 #define FEEDRATE_CHANGE_BEEP_FREQUENCY 440 #endif
Включаем прокрутку длинных статусных сообщений на экране
#define STATUS_MESSAGE_SCROLLING
Увеличиваем задержку (в миллисекундах) перед автоматическим выходом из меню на главный экран (беситбеситбеситбесит)
#define LCD_TIMEOUT_TO_STATUS 60000
«Чиним» прогресс-бар при печати через USB
#define LCD_SET_PROGRESS_MANUALLY
Опционально включаем подтверждение при выборе файла с флешки для печати
#define SD_MENU_CONFIRM_START
Включаем поддержку отправки длинных имен файлов с флешки на хост по USB
#define LONG_FILENAME_HOST_SUPPORT
Включаем прокрутку длинных имен файлов на флешке в меню
#define SCROLL_LONG_FILENAMES