SKR 1.3: различия между версиями

Материал из Ender 3 Wiki
Перейти к навигации Перейти к поиску
 
(не показано 36 промежуточных версий 4 участников)
Строка 1: Строка 1:
[[Файл:SKR_TMC_iwanttoplayagame.png|300px|thumb|left|I want to play a game...]]
+
[[Файл:SKR_TMC_iwanttoplayagame.png|300px|thumb|right|I want to play a game...]]
 +
 
 
==Введение==
 
==Введение==
Данная статья описывает опыт установки на принтер '''Creality3D Ender-3''' материнской платы '''BIG TREE TECH (BIQU) SKR v1.3''' с драйверами '''Trinamic TMC2208''' в режиме управления по '''UART''' с последующей настройкой и прошивкой '''Marlin 2.x bugfix'''.
+
Установка SKR 1.3 + TMC2208 UART. Данная статья описывает опыт установки на принтер '''Creality3D''' '''Ender-3''' и '''Ender-3 Pro''' материнской платы '''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''' оснащена 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''' имеет еще несколько важных преимуществ:
 
Помимо этого, плата '''BIG TREE TECH (BIQU) SKR v1.3''' имеет еще несколько важных преимуществ:
# Колодки для драйверов в форм-факторе Polulu (SilentStepStick) - возможность установить любые поддерживаемые прошивкой драйвера без необходимости перепайки и колхозинка штатной платы
+
# Колодки для драйверов в форм-факторе '''Polulu''' ('''SilentStepStick''') - возможность установить любые поддерживаемые прошивкой драйвера без необходимости перепайки и колхозинка штатной платы
# Возможность установки до 5 драйверов и 2 нагревателей хотенда - можно установить дополнительный экструдер, toolchange-систему, MMU-ситему, использовать выход на второй нагреватель как дополнительный управляемый PWM-выход (подсветка/охлаждение)
+
# Возможность установки до 5 драйверов и 2 нагревателей хотенда - можно установить дополнительный экструдер, '''toolchange'''-систему, '''MMU'''-ситему, использовать выход на второй нагреватель как дополнительный управляемый '''PWM'''-выход (подсветка/охлаждение)
 
# Наличие предохранителей на плате - меньше вероятность спалить мосфет стола или хотенда при случайном замыкании
 
# Наличие предохранителей на плате - меньше вероятность спалить мосфет стола или хотенда при случайном замыкании
# Возможность подключить цветной (сенсорный) дисплей, наличие дополнительных AUX портов
+
# Возможность подключить цветной (сенсорный) дисплей, наличие дополнительных '''AUX''' портов
# Разводка под управление драйверами по UART и SPI «из коробки»
+
# Разводка под управление драйверами по [https://ru.wikipedia.org/wiki/%D0%A3%D0%BD%D0%B8%D0%B2%D0%B5%D1%80%D1%81%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B0%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BF%D1%80%D0%B8%D1%91%D0%BC%D0%BE%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA '''UART'''] и '''[https://ru.wikipedia.org/wiki/Serial_Peripheral_Interface SPI'''] «из коробки»
  
Для управления шаговыми двигателями (ШД) было решено использовать драйвера '''Trinamic TMC2208'''. Это относительно новые драйвера, пришедшие на смену хорошо зарекомендовавшему себя поколению TMC21XX. К их преимуществам можно отнести:
+
Для управления шаговыми двигателями (ШД) было решено использовать драйвера '''Trinamic TMC2208'''. Это относительно новые драйвера, пришедшие на смену хорошо зарекомендовавшему себя поколению '''TMC21XX'''. К их преимуществам можно отнести:
# Технология StealthChop2 – тишина работы моторов
+
# Технология '''StealthChop2''' – тишина работы моторов
# Технология SpreadCycle – оригинальный алгоритм direct current управления от Trinamic, позволяет точно управлять током в обмотках ШД для увеличения точности позиционирования и момента на высоких скоростях
+
# Технология '''SpreadCycle''' – оригинальный алгоритм '''direct current''' управления от '''Trinamic''', позволяет точно управлять током в обмотках '''ШД''' для увеличения точности позиционирования и момента на высоких скоростях
 
# Возможность работы в режиме нативного дробления до 1/256 шага или с меньшим дроблением, но с интерполяцией до 1/256.
 
# Возможность работы в режиме нативного дробления до 1/256 шага или с меньшим дроблением, но с интерполяцией до 1/256.
# Возможность управления по UART
+
# Возможность управления по '''UART'''
  
На последнем пункте остановимся подробнее. В данной статье рассматривается именно способ установки драйверов c управлением по UART. Это позволяет из прошивки конфигурировать ток, дробление шага, интерполяцию, режим чоппера и другие параметры работы драйвера. Кроме того, в прошивке Marlin (и, возможно, в других) реализован так называемый гибридный режим, суть которого в автоматическом переключении драйвера из тихого режима StealthChop2 в более «мощный» SpreadCycle при достижении определенной скорости (hybrid mode threshold). Это позволяет «поддать жару», когда это нужно, наслаждаясь тишиной в остальное время. Помимо этого, используя управление по UART, можно настроить фазы чоппера SpeadCycle для достижения меньшего уровня шума в этом режиме (я пока этого не делал и это тема для отдельной статьи).
+
На последнем пункте остановимся подробнее. В данной статье рассматривается именно способ установки драйверов c управлением по '''UART'''. Это позволяет из прошивки конфигурировать ток, дробление шага, интерполяцию, режим чоппера и другие параметры работы драйвера. Кроме того, в прошивке Marlin (и, возможно, в других) реализован так называемый гибридный режим, суть которого в автоматическом переключении драйвера из тихого режима StealthChop2 в более «мощный» '''SpreadCycle''' при достижении определенной скорости ('''hybrid mode threshold'''). Это позволяет «поддать жару», когда это нужно, наслаждаясь тишиной в остальное время. Помимо этого, используя управление по '''UART''', можно настроить фазы чоппера '''SpeadCycle''' для достижения меньшего уровня шума в этом режиме (я пока этого не делал и это тема для отдельной статьи).
  
 
==Что нам понадобится==
 
==Что нам понадобится==
# Принтер Creality3D Ender-3 (Ваш К.О.)
+
# Принтер '''Creality3D''' '''Ender-3'''/'''Ender-3 Pro''' (Ваш К.О.)
# Плата BIG TREE TECH (BIQU) SKR v1.3
+
# Плата '''BIG TREE TECH''' ('''BIQU''') '''SKR v1.3'''
# Драйвера Trinamic TMC2208 v2.1
+
# Драйвера '''Trinamic TMC2208''' '''v2.1''' или '''v3.0'''
 
# Паяльник
 
# Паяльник
 
# Набор шестигранных ключей
 
# Набор шестигранных ключей
# Надстройка PlatformIO для IDE VS Code
+
# Надстройка '''PlatformIO''' для '''IDE VS Code'''
# Прошивка Marlin версии bugfix-2.0.x (самая свежая)
+
# Прошивка ''' Marlin''' версии '''bugfix-2.0.x''' (самая свежая)
 
# Вольтметр
 
# Вольтметр
 
# Мелкая отвертка под плоский шлиц (лучше диэлектрическая)
 
# Мелкая отвертка под плоский шлиц (лучше диэлектрическая)
Строка 36: Строка 37:
  
 
==Электроника==
 
==Электроника==
[[Файл:SKR_TMC_default_turnpots.png|200px|thumb|left|Расположение потенциометров V<sub>ref</sub> на стандартной плате]]
+
 
[[Файл:SKR_TMC_wiring_huyayring.png|400px|thumb|right|Схема подключения проводов и установки джамперов на плате SKR 1.3 (разъемы ШД находятся за драйверами и не отмечены) в дефолтной конфигурации Ender-3 с одним экструдером. Щелкните, чтобы посмотреть в полном размере.]]
+
[[Файл:SKR_TMC_default_turnpots.png|300px|thumb|right|Расположение потенциометров '''V<sub>ref</sub>''' на стандартной плате]]
 +
 
 
===Важно: считаем ток ШД!===
 
===Важно: считаем ток ШД!===
Насколько я успел заметить, на принтеры Creality3D устанавливается широкий спектр ШД, отличающихся своими характеристиками, в первую очередь – '''максимальным током обмоток'''. Некоторые моторы практически невозможно «нагуглить» по маркировке и узнать требуемый им ток. Поэтому для того, чтобы действовать наверняка, я советую '''перед''' заменой платы выяснить, какой ток установлен для '''Ваших конкретных''' ШД.
+
Насколько я успел заметить, на принтеры '''Creality3D''' устанавливается широкий спектр ШД, отличающихся своими характеристиками, в первую очередь – <u>''максимальным током обмоток''</u>. Некоторые моторы практически невозможно «нагуглить» по маркировке и узнать требуемый им ток. Поэтому для того, чтобы действовать наверняка, я советую <u>перед</u> заменой платы выяснить, какой ток установлен для '''Ваших конкретных''' '''ШД'''.
  
На дефолтной плате '''Creality 1.1.x''' установлено 4 драйвера '''A4988''', распаянных непосредственно на плате. Рядом с каждым драйвером установлен '''потенциометр''' (turnpot), который задает опорное напряжение '''V<sub>ref</sub>'''.
+
На дефолтной плате '''Creality 1.1.x''' установлено четыре драйвера '''A4988''', распаянных непосредственно на плате. Рядом с каждым драйвером установлен ''потенциометр'' ('''turnpot'''), который задает опорное напряжение '''V<sub>ref</sub>'''.
  
Отключите от платы провода ШД. Включите питание. Аккуратно измерьте напряжение между центром «крутилки» потенциометра и землей (за землю можно взять корпус блока питания) для каждого из драйверов, запишите.
+
'''Внимание!''' Настройка (и измерение) V<sub>ref</sub> должна производиться с '''отключенными''' проводами ШД, но '''подключенным''' основным питанием платы.
  
Теперь посчитаем ток, который нужно установить для наших конкретных ШД на новых драйверах. Дело в том, что '''V<sub>ref</sub>''' для драйвера A4988 задает максимальный ток '''I<sub>max</sub>''', в то время как для TMC2208 мы задаем среднеквадратичное значение тока '''I<sub>rms</sub>''' ~ I<sub>max</sub>/1.414
+
* Отключите от платы провода '''ШД'''. <br />
 +
* Включите питание. <br />
 +
* Аккуратно измерьте напряжение между центром «крутилки» потенциометра и землей (за землю можно взять черный провод, приходящий в винтовую колодку на плате с блока питания) для каждого из драйверов, запишите. <br />
 +
 
 +
Теперь посчитаем ток, который нужно установить для наших конкретных '''ШД''' на новых драйверах. <br />
 +
Дело в том, что '''V<sub>ref</sub>''' для драйвера '''A4988''' задает максимальный ток '''I<sub>max</sub>''', в то время как для '''TMC2208''' мы задаем среднеквадратичное значение тока '''I<sub>rms</sub>''' ~ I<sub>max</sub>/1.414
  
 
Приступим к расчетам:
 
Приступим к расчетам:
Строка 51: Строка 58:
 
<code>I<sub>rms(TMC2208)</sub> = I<sub>max(A4988)</sub>/1.414 = V<sub>ref(A4988)</sub>/1.1312</code>
 
<code>I<sub>rms(TMC2208)</sub> = I<sub>max(A4988)</sub>/1.414 = V<sub>ref(A4988)</sub>/1.1312</code>
  
Это и есть нужное нам значение тока новых драйверов. При управлении по UART данного расчета достаточно. Тем, кто не хочет управлять по UART, то есть устанавливает драйвера в '''standalone-режиме''', необходимо посчитать Vref для TMC2208 по следующей формуле:
+
Это и есть нужное нам значение тока новых драйверов. При управлении по '''UART''' данного расчета достаточно. Тем, кто не хочет управлять по '''UART''', то есть устанавливает драйвера в '''standalone-режиме''', необходимо посчитать '''V<sub>ref</sub>''' для '''TMC2208''' по следующей формуле:
 +
 
 +
<code>V<sub>ref(TMC2208)</sub> = (I<sub>rms(TMC2208)</sub>*2.5) / 1.77</code>
 +
 
 +
Указанная выше формула справедлива только для наиболее распространенных вариантов исполнения драйверов '''TMC2208''' с референсным резистором '''R<sub>sense</sub> = 0.11 Ом'''.
  
<code>V<sub>ref(TMC2208)</sub> = (I<sub>rms(TMC2208)</sub>*2.5) / 1.77 ~  V<sub>ref(A4988)</sub>/1.1312</code>
 
  
Указанная выше формула справедлива только для наиболее распространенных вариантов исполнения драйверов TMC2208 с референсным резистором '''R<sub>sense</sub> = 0.11 Ом'''.
+
<br clear=both />
  
'''Внимание!''' Настройка (и измерение) V<sub>ref</sub> должна производиться с '''отключенными''' проводами ШД, но '''подключенным''' основным питанием платы.
 
[[Файл:SKR_TMC_driver_soldering.jpg|300px|thumb|right|Перымычка, которую нужно запаять на драйвере для управления по UART. Также указаны резисторы R<sub>sense</sub> - проверьте их номинал.]]
 
 
===Подготовка драйверов===
 
===Подготовка драйверов===
Для того, чтобы использовать UART для управления драйверами, необходимо аккуратно '''запаять на них перемычку''', как показано на рисунке (здесь и далее показаны '''драйвера от BIGTREETECH версии 2.1''', но для драйверов от других производителей, например Fysetc, действия будут аналогичными)
 
[[Файл:SKR_TMC_endstops_2to3.jpg|300px|thumb|right|Переделка дефолтных двухконтактных разъемов концевиков в трехконтактные под SKR]]
 
===Замена платы===
 
'''Отключаем питание принтера'''. Снимаем крышку с корпуса электроники, отключаем вентилятор охлаждения от платы. Аккуратно удаляем термоклей со всех разъемов, отключаем все провода от платы. Не забываем пометить удобным способом провода, на которых нет заводских меток.
 
  
Откручиваем плату от корпуса электроники, откручиваем корпус электроники от рамы принтера (один из винтов находится снизу, под принтером).
+
[[Файл:SKR_TMC_driver_soldering.jpg|300px|thumb|right|Перымычка '''J2''', которую нужно запаять на драйвере для управления по '''UART'''. Также не лишним будет проверить номинал резисторов '''R6''' и '''R7''']]
Для подключения родных '''двухконтактных''' разъемов концевиков в '''трехконтактные''' разъемы на плате SKR нужно модифицировать провода одним из способов (чтобы провода подключались к двум '''нижним''' пинам разъема, см. рисунок):
+
 
 +
Для того, чтобы использовать '''UART'''-режим для управления драйверами, необходимо '''<u>АККУРАТНО</u>''' запаять на них перемычку '''J2''' (см. фото). </br>
 +
Здесь и далее показаны драйвера от '''BIGTREETECH''' версии '''2.1''', но для драйверов от других производителей, например '''Fysetc''', действия будут аналогичными. </br>
 +
Для драйверов версии '''3.0''' инструкции аналогичны.
 +
 
 +
<br clear=both />
  
# «Переобуваем» провод в трехпиновый корпус – самый лучший вариант, если есть такие корпуса
+
===Модификация разъемов концевиков===
# Подрезаем один из двух ключевых выступов корпуса разъема на проводе так, чтобы он правильно вошел в разъем на плате (отмечен красным)
 
  
Убираем с платы '''все джамперы, кроме 5''' (6, если у нас 2 хотенда) – по 1 возле 4 драйверов на красных площадках (включает управление по UART) и еще 1 на красной площадке в центре платы, отвечающий за режим питания контроллера – от USB или от внешнего БП. Устанавливаем драйвера (см. рисунок, '''если поставить вверх ногами – дровам кирдык''').
+
[[Файл:SKR_TMC_endstops_2to3.jpg|300px|thumb|right|Переделка дефолтных двухконтактных разъемов концевиков в трехконтактные под '''SKR''']]
Теперь подключаем все провода в соответствующие разъемы платы ('''внимание на полярность!'''), для этого может потребоваться немного распотрошить жгут проводов. Вентилятор обдува детали подключаем в разъем '''FAN''', вентилятор охлаждения электроники – в разъем '''12/24 V''' (в самом углу платы, возле разъема ШД оси X), вентилятор охлаждения радиатора печатной головы – в разъем  нагревателя второго хотенда '''HT1''' (винтовая колодка) если у нас только 1 хотенд, иначе параллельно вентилятору охлаждения электроники. Экран подключаем в разъем '''EXP1''', провода концевиков – в трехпиновые разъемы '''Xmin, Ymin, Zmin''' на плате, остальное подключается очевидным образом.
+
 
 +
Для подключения родных ''двухконтактных'' разъемов концевиков в ''трехконтактные'' разъемы на плате '''SKR''' нужно модифицировать провода одним из способов (чтобы провода подключались к двум ''нижним'' пинам разъема, см. рисунок):
 +
 
 +
# «Переобуваем» провод в ''трехпиновый'' корпус – самый лучший вариант, если есть такие корпуса
 +
# Подрезаем один из двух ключевых выступов корпуса разъема на проводе так, чтобы он правильно вошел в разъем на плате (в два нижних пина на соответствующем разъеме)
 +
 
 +
<br clear=both />
 +
 
 +
===Извлечение штатной платы===
 +
 
 +
Перед отсоединением разъемов от платы, не забудьте пометить удобным способом провода, на которых нет заводских меток. </br>
 +
 
 +
* Отключаем питание принтера
 +
* Снимаем крышку с корпуса электроники
 +
* Отключаем вентилятор охлаждения от платы
 +
* Аккуратно удаляем термоклей со всех разъемов
 +
* Отключаем все провода от платы
 +
* Откручиваем плату от корпуса электроники
 +
* Откручиваем корпус электроники от рамы принтера (один из винтов находится снизу, под принтером).
 +
 
 +
===Установка Джамперов в режим UART===
 +
 
 +
[[Файл:Electronica-skr-1 3.jpg|300px|thumb|right|Ставим джамперы согласно целеуказателям]]
 +
 
 +
* Убираем с платы все джамперы
 +
* Устанавливаем пять джамперов возле площадок драйверов (включает управление по '''UART''')
 +
* Устанавливаем один джампер в центре платы на два левых контакта ('''INT +5V''' отвечает за режим питания контроллера – от внешнего '''БП'''). Правая пара контактов отвечает за питание по '''USB'''.
 +
 
 +
<br clear=both />
 +
 
 +
===Подключение SKR 1.3===
 +
 
 +
[[Файл:SKR_TMC_wiring_huyayring.png|300px|thumb|right|Схема подключения проводов и установки джамперов на плате '''SKR 1.3'''. В дефолтной конфигурации '''Ender-3''' с одним экструдером. Щелкните, чтобы посмотреть в полном размере.]]
 +
 
 +
* Устанавливаем драйвера: черные ножки в черные разъемы, цветные ножки (они могут быть синими или красными) в красные разъемы. Если дрова поставить вверх ногами – дровам '''<u>кирдык</u>'''.
 +
* Хотя сама плата запускается от '''5 V''' по '''USB''', ''<u>драйвера не будут работать</u>'' без подключенного основного питания '''24 V''', и на дисплее будет отображаться '''<u>TMC connection error</u>'''.
 +
* Теперь подключаем все провода в соответствующие разъемы платы ('''внимание на полярность!'''), для этого может потребоваться немного распотрошить жгут проводов.  
 +
* Вентилятор обдува детали подключаем в разъем '''FAN''',  
 +
* Вентилятор охлаждения электроники – в разъем '''12/24 V''' (в самом углу платы, возле разъема '''ШД''' оси '''X''')  
 +
* Вентилятор охлаждения радиатора печатной головы – в разъем  нагревателя второго хотенда '''HT1''' (винтовая колодка) если у нас только 1 хотенд, иначе параллельно вентилятору охлаждения электроники.  
 +
* Экран подключаем в разъем '''EXP1''',  
 +
* Провода концевиков – в трехпиновые разъемы '''Xmin, Ymin, Zmin''' на плате,  
 +
* Остальное подключается очевидным образом
 +
 
 +
<br clear=both />
  
 
==Прошивка==
 
==Прошивка==
[[Файл:SKR_TMC_PlatfIO_1.png|300px|thumb|left|Установка PlatformIO в VS Code]]
+
 
[[Файл:SKR_TMC_platformio open.png|300px|thumb|left|Открыть проект Marlin в PlatformIO]]
 
 
===Дисклеймер===
 
===Дисклеймер===
Данный раздел предполагает, что Вы '''знаете''', как конфигурировать прошивку Marlin. Здесь будут описаны '''только специфические настройки''' для платы SKR 1.3 и драйверов TMC2208 с управлением по UART, а также '''несколько других полезных твиков'''. Если Вы '''не знаете''' как конфигурируется прошивка, как устанавливаются размеры области печати, шаги по осям, ускорения и прочие основные параметры принтера – для начала '''обязательно изучите эту информацию''', например по [https://www.youtube.com/watch?v=pSBb9GLrM1s видео Дмитрия Соркина], и '''только после этого''' продолжайте.
 
  
В качестве отправной точки '''крайне советую''' использовать конфигурационные файлы для Ender-3 '''из папки с примерами''', это избавит от необходимости конфигурирования концевиков, направлений моторов, зоны печати и прочих важных вещей – там это уже сделано. '''Здесь эти настройки рассматриваться не будут'''.
+
Данный раздел предполагает, что Вы <u>знаете</u>, как конфигурировать прошивку '''Marlin'''. </br>
 +
Здесь будут описаны <u>только специфические настройки</u> для платы '''SKR 1.3''' и драйверов '''TMC2208''' с управлением по '''UART''', а также '''несколько других полезных твиков'''. </br>
 +
Если Вы '''не знаете''' как конфигурируется прошивка, как устанавливаются размеры области печати, шаги по осям, ускорения и прочие основные параметры принтера – для начала '''обязательно изучите эту информацию''', например по [https://www.youtube.com/watch?v=pSBb9GLrM1s видео Дмитрия Соркина], и '''только после этого''' продолжайте. </br>
 +
 
 +
В качестве отправной точки <u>крайне советую</u> использовать конфигурационные файлы для '''Ender-3''' <u>из папки с примерами</u>, это избавит от необходимости конфигурирования концевиков, направлений моторов, зоны печати и прочих важных вещей – там это уже сделано. <u>Здесь эти настройки рассматриваться не будут</u>.
  
 
===Установка PlatformIO IDE===
 
===Установка PlatformIO IDE===
Качаем последнюю версию [https://github.com/MarlinFirmware/Marlin/archive/bugfix-2.0.x.zip Marlin bugfix-2.0.x]. Качаем [https://code.visualstudio.com/Download VS Code]. Запускаем VS Code, заходим в Extensions, вводим в строку поиска ''platformio'', жмем зеленую кнопку '''Install''' возле расширения '''PlatformIO IDE''', ждем завершения установки расширения, перезапускаем VS Code. На появившейся странице PIO Home жмем кнопку '''Open Project''', заходим в папку с прошивкой (в ней должен быть файл ''platformio.ini''), жмем '''Open'''.
+
 
 +
[[Файл:SKR_TMC_PlatfIO_1.png|300px|thumb|right|Установка PlatformIO в VS Code]]
 +
[[Файл:SKR_TMC_platformio open.png|300px|thumb|right|Открыть проект Marlin в PlatformIO]]
 +
 
 +
* Качаем последнюю версию [https://github.com/MarlinFirmware/Marlin/archive/bugfix-2.0.x.zip Marlin bugfix-2.0.x].  
 +
* Качаем [https://code.visualstudio.com/Download VS Code].  
 +
* Запускаем '''VS Code'''
 +
** Заходим в '''Extensions'''
 +
** Вводим в строку поиска ''platformio''  
 +
** Жмем зеленую кнопку '''Install''' возле расширения '''PlatformIO IDE'''
 +
** Ждем завершения установки расширения
 +
* Перезапускаем '''VS Code'''
 +
* На появившейся странице '''PIO''' Home жмем кнопку '''Open Project'''  
 +
* Заходим в папку с прошивкой (в ней должен быть файл ''platformio.ini'')
 +
* Жмем '''Open'''
  
 
===Конфигурация===
 
===Конфигурация===
Строка 93: Строка 161:
 
Указываем в разделе [platformio] микроконтроллер, для которого будем компилировать прошивку.
 
Указываем в разделе [platformio] микроконтроллер, для которого будем компилировать прошивку.
  
<code>env_default = LPC1768</code>
+
<code>default_envs = LPC1768</code>
 
 
  
 
====configuration.h====
 
====configuration.h====
Строка 128: Строка 195:
 
  #define Z_DRIVER_TYPE  TMC2208
 
  #define Z_DRIVER_TYPE  TMC2208
 
  #define E0_DRIVER_TYPE TMC2208
 
  #define E0_DRIVER_TYPE TMC2208
#define E1_DRIVER_TYPE TMC2208 // разумеется, если есть второй экструдер
 
  
 
Если устанавливаем драйвера без управления по UART, то вместо TMC2208 пишем TMC2208_STANDALONE
 
Если устанавливаем драйвера без управления по UART, то вместо TMC2208 пишем TMC2208_STANDALONE
Строка 186: Строка 252:
 
  #define FAN_SOFT_PWM
 
  #define FAN_SOFT_PWM
 
  #define SOFT_PWM_SCALE 0
 
  #define SOFT_PWM_SCALE 0
 
  
 
====configuration_adv.h====
 
====configuration_adv.h====
Строка 277: Строка 342:
 
Настраиваем SD карту
 
Настраиваем SD карту
  
  #ifdef TARGET_LPC1768
+
  #if HAS_SDCARD_CONNECTION
  //#define LPC_SD_LCD          // Use the SD drive in the external LCD controller.
+
/**
  #define LPC_SD_ONBOARD      // Use the SD drive on the control board. (No SD_DETECT_PIN. M21 to init.)
+
* Set this option to one of the following (or the board's defaults apply):
  //#define LPC_SD_CUSTOM_CABLE // Use a custom cable to access the SD (as defined in a pins file).
+
*
  //#define USB_SD_DISABLED    // Disable SD Card access over USB (for security).
+
*          LCD - Use the SD drive in the external LCD controller.
  #if ENABLED(LPC_SD_ONBOARD)
+
*      ONBOARD - Use the SD drive on the control board. (No SD_DETECT_PIN. M21 to init.)
    //#define USB_SD_ONBOARD    // Данную опцию можно включить, чтоб видеть флешку с хоста, как через кард-ридер, но я не проверял
+
*  CUSTOM_CABLE - Use a custom cable to access the SD (as defined in a pins file).
   #endif
+
*
 +
* :[ 'LCD', 'ONBOARD', 'CUSTOM_CABLE' ]
 +
*/
 +
   #define SDCARD_CONNECTION ONBOARD
 
  #endif
 
  #endif
 
  
 
Включаем babystepping - возможность вручную задавать точно оффсет оси Z во время печати из меню принтера, например, если мы видим, что с первым слоем что-то не так
 
Включаем babystepping - возможность вручную задавать точно оффсет оси Z во время печати из меню принтера, например, если мы видим, что с первым слоем что-то не так
Строка 324: Строка 391:
  
  
Если у нас возникает проблема с мотором E, можно попробовать увеличить это значение, но в последних версия прошивки данная проблема должна быть решена
+
'''Если выше включили Linear Advance, необходимо также изменить значение MINIMUM_STEPPER_PULSE для работоспособности экструдера (актуально на 10.09.19)'''
  
  #define MINIMUM_STEPPER_PULSE 0 // можно попробовать 2 или 4
+
  #define MINIMUM_STEPPER_PULSE 2 // если не работает 2, ставим 4
  
  
Строка 338: Строка 405:
 
Настраиваем токи и дробление шага. Здесь каждый пусть решает сам, какое дробление использовать, включать ли интерполяцию - спорить можно бесконечно.
 
Настраиваем токи и дробление шага. Здесь каждый пусть решает сам, какое дробление использовать, включать ли интерполяцию - спорить можно бесконечно.
  
#if HAS_TRINAMIC
+
#if HAS_TRINAMIC
 
+
  #define HOLD_MULTIPLIER    0.6  // Множитель тока в режиме удержания ШД
+
  #define HOLD_MULTIPLIER    0.6  // Множитель тока в режиме удержания ШД
  #define INTERPOLATE      false // Включает или выключает интерполяцию по ВСЕМ осям
+
  #define INTERPOLATE      true // Включает или выключает интерполяцию по ВСЕМ осям
 
+
  #if AXIS_IS_TMC(X)
+
  #if AXIS_IS_TMC(X)
    #define X_CURRENT    600 // сюда пишем наш ток Irms, который мы посчитали ранее
+
    #define X_CURRENT    450 // сюда пишем наш ток Irms, который мы посчитали ранее
    #define X_MICROSTEPS    8 // количество микрошагов, поддерживается нативно до 256, не забываем изменить число шагов на мм
+
    #define X_MICROSTEPS    16 // количество микрошагов, поддерживается нативно до 256, не забываем изменить число шагов на мм
    #define X_RSENSE    0.11 // ЕСЛИ на Ваших драйверах резистор Rsense нестандартный R110, сюда вписываем номинал установленного резистора
+
    #define X_RSENSE    0.11 // Если на Ваших драйверах резистор Rsense отличается от стандартного R110, сюда вписываем номинал
  #endif
+
  #endif
 
+
  #if AXIS_IS_TMC(Y)
+
  #if AXIS_IS_TMC(Y)
    #define Y_CURRENT    600
+
    #define Y_CURRENT    500
    #define Y_MICROSTEPS    8
+
    #define Y_MICROSTEPS    16
    #define Y_RSENSE    0.11
+
    #define Y_RSENSE    0.11
  #endif
+
  #endif
 
+
  #if AXIS_IS_TMC(Z)
+
  #if AXIS_IS_TMC(Z)
    #define Z_CURRENT    600
+
    #define Z_CURRENT    550
    #define Z_MICROSTEPS    4
+
    #define Z_MICROSTEPS    16
    #define Z_RSENSE    0.11
+
    #define Z_RSENSE    0.11
  #endif
+
  #endif
 
+
  #if AXIS_IS_TMC(E0)
+
  #if AXIS_IS_TMC(E0)
    #define E0_CURRENT    800
+
    #define E0_CURRENT    700
    #define E0_MICROSTEPS  4
+
    #define E0_MICROSTEPS  16
    #define E0_RSENSE    0.11
+
    #define E0_RSENSE    0.11
  #endif
+
   #endif
 
 
  #if AXIS_IS_TMC(E1)
 
    #define E1_CURRENT    800
 
    #define E1_MICROSTEPS  4
 
    #define E1_RSENSE   0.11
 
  #endif
 
  
  
Строка 403: Строка 464:
 
   #define X_HYBRID_THRESHOLD    120  // [mm/s]
 
   #define X_HYBRID_THRESHOLD    120  // [mm/s]
 
   #define Y_HYBRID_THRESHOLD    120
 
   #define Y_HYBRID_THRESHOLD    120
   #define Z_HYBRID_THRESHOLD       10
+
   #define Z_HYBRID_THRESHOLD     10
 
   #define E0_HYBRID_THRESHOLD    15
 
   #define E0_HYBRID_THRESHOLD    15
  #define E1_HYBRID_THRESHOLD    15
 
  
  
Строка 412: Строка 472:
 
   #define TMC_DEBUG
 
   #define TMC_DEBUG
  
В данной секции можно задать отдельно любые параметры для каждого из драйверов, например выборочно выключить интерполяцию на Z и E, но перед тем, как что-то здесь писать, '''советую разобраться''' с функциями библиотеки [https://github.com/teemuatlut/TMCStepper TMCStepper]. В противном случае оставляйте эту секцию пустой.
+
В данной секции можно задать отдельно любые параметры для каждого из драйверов, например выборочно выключить интерполяцию на Z и E, если выше она включена для всех осей, но перед тем, как что-то здесь писать, '''советую разобраться''' с функциями библиотеки [https://github.com/teemuatlut/TMCStepper TMCStepper]. В противном случае оставляйте эту секцию пустой, чтобы ничего не сломать.
  
 
   #define TMC_ADV() { \
 
   #define TMC_ADV() { \
Строка 425: Строка 485:
  
  
Включаем расширенный отчет о возможностях прошивке для USB хоста
+
Включаем расширенный отчет о возможностях прошивки для USB хоста
  
 
  #define EXTENDED_CAPABILITIES_REPORT
 
  #define EXTENDED_CAPABILITIES_REPORT
Строка 434: Строка 494:
 
  #define NO_VOLUMETRICS
 
  #define NO_VOLUMETRICS
  
 +
====Компиляция и прошивка платы====
  
====Компиляция и прошивка платы====
+
[[Файл:SKR_TMC_hoba.jpg|300px|thumb|right|Хоба! '''Поздравляем - Вы восхитительны!''']]
[[Файл:SKR_TMC_hoba.jpg|300px|thumb|left|Хоба!]]
 
После того, как прошивка сконфигурирована, '''сохраняем''' изменения. Жмем '''Ctrl+Alt+B''' - запустится процесс компиляции прошивки. Если ошибок нет, после его завершения в терминале VS Code напротив LPC1768 будет зеленая надпись SUCCESS. В папке ''Marlin-bugfix-2.0.x\.pioenvs\LPC1768'' появится файл ''firmware.bin'' - это и есть скомпилированная прошивка. Копируем этот файл на SD-карту и вставляем в плату, после чего перезапускаем плату - загрузчик установит прошивку и вы увидите стартовый экран Marlin (не беспокойтесь, после перезагрузки файл прошивки на флешке будет переименован, его не нужно удалять вручную, плата не будет перепрошиваться при каждой перезагрузке, пока Вы не кинете новый файл прошивки на флешку). '''Не забываем после перепрошивки инициализировать EEPROM.'''
 
  
'''Поздравляем - Вы восхитительны!'''
+
После того, как прошивка сконфигурирована, '''сохраняем''' изменения. Жмем '''Ctrl+Alt+B''' - запустится процесс компиляции прошивки. Если ошибок нет, после его завершения в терминале '''VS Code''' напротив '''LPC1768''' будет зеленая надпись '''SUCCESS'''. В папке ''Marlin-bugfix-2.0.x\.pioenvs\LPC1768'' появится файл ''firmware.bin'' - это и есть скомпилированная прошивка. Копируем этот файл на '''SD'''-карту и вставляем в плату, после чего перезапускаем плату - загрузчик установит прошивку и вы увидите стартовый экран '''Marlin''' (не беспокойтесь, после перезагрузки файл прошивки на флешке будет переименован, его не нужно удалять вручную, плата не будет перепрошиваться при каждой перезагрузке, пока Вы не кинете новый файл прошивки на флешку). </br>
 +
'''Не забываем после перепрошивки инициализировать EEPROM.'''
  
 
==Что дальше?==
 
==Что дальше?==
Строка 447: Строка 507:
 
В меню Configuration -> Advanced configuration появилось новое подменю - '''TMC drivers''', содержащее 3 пункта:
 
В меню Configuration -> Advanced configuration появилось новое подменю - '''TMC drivers''', содержащее 3 пункта:
 
#'''Driver current''' - настройка тока I<sub>rms</sub> для каждого драйвера  
 
#'''Driver current''' - настройка тока I<sub>rms</sub> для каждого драйвера  
#'''Hybrid threshold''' - настройка порога гибридного режима, то есть скорости движения оси, после которой драйвер будет переключаться из режима StealthChop в SpreadCycle. Если хотите выключить гибридный режим для какой-то из осей и использовать только StealthChop, поставьте здесь очень большое значение  (на 22 мяа 2019 существует баг - при загрузке настроек из EEPROM все значения отображаются равными 0. При этом на самом деле загружаются правильные значения, их даже можно поменять на в этом меню и сохранить в EEPROM, и все работает, но в самом меню отображается 0)
+
#'''Hybrid threshold''' - настройка порога гибридного режима, то есть скорости движения оси, после которой драйвер будет переключаться из режима StealthChop в SpreadCycle. Если хотите выключить гибридный режим для какой-то из осей и использовать только StealthChop, поставьте здесь очень большое значение  (на 22 мая 2019 существует баг - при загрузке настроек из EEPROM все значения отображаются равными 0. При этом на самом деле загружаются правильные значения, их даже можно поменять в этом меню и сохранить в EEPROM, и все работает, но в самом меню отображается 0)
#'''Microstepping mode''' - ручное переключение между StealthChop и SpreadCycle для кождой оси. Если стоит '''"on"''', то используется StealthChop и гибридный режим, если '''"off"''' - то всегда включен только SpreadCycle
+
#'''Microstepping mode''' - ручное переключение между StealthChop и SpreadCycle для каждой оси. Если стоит '''"on"''', то используется StealthChop и гибридный режим, если '''"off"''' - то всегда включен только SpreadCycle
 +
 
 +
===Команды G-code===
 +
Ниже приводятся команды G-code для работы с драйверами TMC2208
  
===Команды G-code
 
Ниже приводятся команжы G-code для работы с драйверами TMC
 
 
[http://marlinfw.org/docs/gcode/M122.html M122] - вывод отладочной информации о состоянии драйверов - установленный ток, дробление шага и интерполяция, состояние регистров, состояние защиты от перегрева и прочие полезности
 
[http://marlinfw.org/docs/gcode/M122.html M122] - вывод отладочной информации о состоянии драйверов - установленный ток, дробление шага и интерполяция, состояние регистров, состояние защиты от перегрева и прочие полезности
  
Строка 463: Строка 524:
  
 
[http://marlinfw.org/docs/gcode/M913.html M913] - настройка порога гибридного режима, то есть скорости движения оси, после которой драйвер будет переключаться из режима StealthChop в SpreadCycle
 
[http://marlinfw.org/docs/gcode/M913.html M913] - настройка порога гибридного режима, то есть скорости движения оси, после которой драйвер будет переключаться из режима StealthChop в SpreadCycle
 +
 +
==Цитирование==
 +
Вы можете цитировать материал из данной статьи в произвольном объеме при условии '''обязательного указания ссылки на первоисточник'''. В ином случае цитирование не допускается.
 +
 +
Автор - @ArtificalSUN
 +
 +
== Прочее ==
 +
* [[Замена материнской платы]]

Текущая версия на 00:36, 2 апреля 2024

I want to play a game...

Введение

Установка SKR 1.3 + TMC2208 UART. Данная статья описывает опыт установки на принтер Creality3D Ender-3 и Ender-3 Pro материнской платы BIG TREE TECH (BIQU) SKR v1.3 с драйверами Trinamic TMC2208 в режиме управления по UART с последующей настройкой и прошивкой Marlin 2.x bugfix.

Для чего это нужно?

Плата 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 имеет еще несколько важных преимуществ:

  1. Колодки для драйверов в форм-факторе Polulu (SilentStepStick) - возможность установить любые поддерживаемые прошивкой драйвера без необходимости перепайки и колхозинка штатной платы
  2. Возможность установки до 5 драйверов и 2 нагревателей хотенда - можно установить дополнительный экструдер, toolchange-систему, MMU-ситему, использовать выход на второй нагреватель как дополнительный управляемый PWM-выход (подсветка/охлаждение)
  3. Наличие предохранителей на плате - меньше вероятность спалить мосфет стола или хотенда при случайном замыкании
  4. Возможность подключить цветной (сенсорный) дисплей, наличие дополнительных AUX портов
  5. Разводка под управление драйверами по UART и SPI «из коробки»

Для управления шаговыми двигателями (ШД) было решено использовать драйвера Trinamic TMC2208. Это относительно новые драйвера, пришедшие на смену хорошо зарекомендовавшему себя поколению TMC21XX. К их преимуществам можно отнести:

  1. Технология StealthChop2 – тишина работы моторов
  2. Технология SpreadCycle – оригинальный алгоритм direct current управления от Trinamic, позволяет точно управлять током в обмотках ШД для увеличения точности позиционирования и момента на высоких скоростях
  3. Возможность работы в режиме нативного дробления до 1/256 шага или с меньшим дроблением, но с интерполяцией до 1/256.
  4. Возможность управления по UART

На последнем пункте остановимся подробнее. В данной статье рассматривается именно способ установки драйверов c управлением по UART. Это позволяет из прошивки конфигурировать ток, дробление шага, интерполяцию, режим чоппера и другие параметры работы драйвера. Кроме того, в прошивке Marlin (и, возможно, в других) реализован так называемый гибридный режим, суть которого в автоматическом переключении драйвера из тихого режима StealthChop2 в более «мощный» SpreadCycle при достижении определенной скорости (hybrid mode threshold). Это позволяет «поддать жару», когда это нужно, наслаждаясь тишиной в остальное время. Помимо этого, используя управление по UART, можно настроить фазы чоппера SpeadCycle для достижения меньшего уровня шума в этом режиме (я пока этого не делал и это тема для отдельной статьи).

Что нам понадобится

  1. Принтер Creality3D Ender-3/Ender-3 Pro (Ваш К.О.)
  2. Плата BIG TREE TECH (BIQU) SKR v1.3
  3. Драйвера Trinamic TMC2208 v2.1 или v3.0
  4. Паяльник
  5. Набор шестигранных ключей
  6. Надстройка PlatformIO для IDE VS Code
  7. Прошивка Marlin версии bugfix-2.0.x (самая свежая)
  8. Вольтметр
  9. Мелкая отвертка под плоский шлиц (лучше диэлектрическая)

ПАААААЕХАЛИ!

Электроника

Расположение потенциометров Vref на стандартной плате

Важно: считаем ток ШД!

Насколько я успел заметить, на принтеры Creality3D устанавливается широкий спектр ШД, отличающихся своими характеристиками, в первую очередь – максимальным током обмоток. Некоторые моторы практически невозможно «нагуглить» по маркировке и узнать требуемый им ток. Поэтому для того, чтобы действовать наверняка, я советую перед заменой платы выяснить, какой ток установлен для Ваших конкретных ШД.

На дефолтной плате Creality 1.1.x установлено четыре драйвера A4988, распаянных непосредственно на плате. Рядом с каждым драйвером установлен потенциометр (turnpot), который задает опорное напряжение Vref.

Внимание! Настройка (и измерение) 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

Указанная выше формула справедлива только для наиболее распространенных вариантов исполнения драйверов TMC2208 с референсным резистором Rsense = 0.11 Ом.



Подготовка драйверов

Перымычка J2, которую нужно запаять на драйвере для управления по UART. Также не лишним будет проверить номинал резисторов R6 и R7

Для того, чтобы использовать UART-режим для управления драйверами, необходимо АККУРАТНО запаять на них перемычку J2 (см. фото).
Здесь и далее показаны драйвера от BIGTREETECH версии 2.1, но для драйверов от других производителей, например Fysetc, действия будут аналогичными.
Для драйверов версии 3.0 инструкции аналогичны.


Модификация разъемов концевиков

Переделка дефолтных двухконтактных разъемов концевиков в трехконтактные под SKR

Для подключения родных двухконтактных разъемов концевиков в трехконтактные разъемы на плате SKR нужно модифицировать провода одним из способов (чтобы провода подключались к двум нижним пинам разъема, см. рисунок):

  1. «Переобуваем» провод в трехпиновый корпус – самый лучший вариант, если есть такие корпуса
  2. Подрезаем один из двух ключевых выступов корпуса разъема на проводе так, чтобы он правильно вошел в разъем на плате (в два нижних пина на соответствующем разъеме)


Извлечение штатной платы

Перед отсоединением разъемов от платы, не забудьте пометить удобным способом провода, на которых нет заводских меток.

  • Отключаем питание принтера
  • Снимаем крышку с корпуса электроники
  • Отключаем вентилятор охлаждения от платы
  • Аккуратно удаляем термоклей со всех разъемов
  • Отключаем все провода от платы
  • Откручиваем плату от корпуса электроники
  • Откручиваем корпус электроники от рамы принтера (один из винтов находится снизу, под принтером).

Установка Джамперов в режим UART

Ставим джамперы согласно целеуказателям
  • Убираем с платы все джамперы
  • Устанавливаем пять джамперов возле площадок драйверов (включает управление по UART)
  • Устанавливаем один джампер в центре платы на два левых контакта (INT +5V отвечает за режим питания контроллера – от внешнего БП). Правая пара контактов отвечает за питание по USB.


Подключение SKR 1.3

Схема подключения проводов и установки джамперов на плате SKR 1.3. В дефолтной конфигурации Ender-3 с одним экструдером. Щелкните, чтобы посмотреть в полном размере.
  • Устанавливаем драйвера: черные ножки в черные разъемы, цветные ножки (они могут быть синими или красными) в красные разъемы. Если дрова поставить вверх ногами – дровам кирдык.
  • Хотя сама плата запускается от 5 V по USB, драйвера не будут работать без подключенного основного питания 24 V, и на дисплее будет отображаться TMC connection error.
  • Теперь подключаем все провода в соответствующие разъемы платы (внимание на полярность!), для этого может потребоваться немного распотрошить жгут проводов.
  • Вентилятор обдува детали подключаем в разъем FAN,
  • Вентилятор охлаждения электроники – в разъем 12/24 V (в самом углу платы, возле разъема ШД оси X)
  • Вентилятор охлаждения радиатора печатной головы – в разъем нагревателя второго хотенда HT1 (винтовая колодка) если у нас только 1 хотенд, иначе параллельно вентилятору охлаждения электроники.
  • Экран подключаем в разъем EXP1,
  • Провода концевиков – в трехпиновые разъемы Xmin, Ymin, Zmin на плате,
  • Остальное подключается очевидным образом


Прошивка

Дисклеймер

Данный раздел предполагает, что Вы знаете, как конфигурировать прошивку Marlin.
Здесь будут описаны только специфические настройки для платы SKR 1.3 и драйверов TMC2208 с управлением по UART, а также несколько других полезных твиков.
Если Вы не знаете как конфигурируется прошивка, как устанавливаются размеры области печати, шаги по осям, ускорения и прочие основные параметры принтера – для начала обязательно изучите эту информацию, например по видео Дмитрия Соркина, и только после этого продолжайте.

В качестве отправной точки крайне советую использовать конфигурационные файлы для Ender-3 из папки с примерами, это избавит от необходимости конфигурирования концевиков, направлений моторов, зоны печати и прочих важных вещей – там это уже сделано. Здесь эти настройки рассматриваться не будут.

Установка PlatformIO IDE

Установка PlatformIO в VS Code
Открыть проект Marlin в PlatformIO
  • Качаем последнюю версию 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] микроконтроллер, для которого будем компилировать прошивку.

default_envs = 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

Если устанавливаем драйвера без управления по 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  (4*60) // Если используется датчик автоуровня типа BLTouch/3DTouch, можно увеличить значение до (10*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

#if ENABLED(SDSUPPORT)
  #define BLOCK_BUFFER_SIZE 32 // SD,LCD,Buttons take more memory, block buffer needs to be smaller
#else
  #define BLOCK_BUFFER_SIZE 16 // maximize block buffer
#endif

#define MAX_CMD_SIZE 96
#define BUFSIZE 32

#define TX_BUFFER_SIZE 32


Опционально включаем звуковое оповещение при изменении 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

Настраиваем SD карту

#if HAS_SDCARD_CONNECTION
/**
* Set this option to one of the following (or the board's defaults apply):
*
*           LCD - Use the SD drive in the external LCD controller.
*       ONBOARD - Use the SD drive on the control board. (No SD_DETECT_PIN. M21 to init.)
*  CUSTOM_CABLE - Use a custom cable to access the SD (as defined in a pins file).
*
* :[ 'LCD', 'ONBOARD', 'CUSTOM_CABLE' ]
*/
  #define SDCARD_CONNECTION ONBOARD
#endif

Включаем babystepping - возможность вручную задавать точно оффсет оси Z во время печати из меню принтера, например, если мы видим, что с первым слоем что-то не так

#define BABYSTEPPING
#if ENABLED(BABYSTEPPING)
  //#define BABYSTEP_WITHOUT_HOMING
  //#define BABYSTEP_XY                     // Also enable X/Y Babystepping. Not supported on DELTA!
  #define BABYSTEP_INVERT_Z false           // Change if Z babysteps should go the other way
  #define BABYSTEP_MULTIPLICATOR  2         // Babysteps are very small. Increase for faster motion. 

  #define DOUBLECLICK_FOR_Z_BABYSTEPPING    // Double-click on the Status Screen for Z Babystepping.
  #if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
    #define DOUBLECLICK_MAX_INTERVAL 1250   // Maximum interval between clicks, in milliseconds.
                                            // Note: Extra time may be added to mitigate controller latency.
    //#define BABYSTEP_ALWAYS_AVAILABLE     // Allow babystepping at all times (not just during movement).
    #define MOVE_Z_WHEN_IDLE              // Jump to the move Z menu on doubleclick when printer is idle.
    #if ENABLED(MOVE_Z_WHEN_IDLE)
      #define MOVE_Z_IDLE_MULTIPLICATOR 1   // Multiply 1mm by this factor for the move step size.
    #endif
  #endif


При желании включаем LA

#define LIN_ADVANCE
#if ENABLED(LIN_ADVANCE)
  //#define EXTRA_LIN_ADVANCE_K // Enable for second linear advance constants
  #define LIN_ADVANCE_K 0.0    // Unit: mm compression per 1mm/s extruder speed
  //#define LA_DEBUG            // If enabled, this will generate debug information output over USB.
#endif


Уменьшаем размер минимальной отрабатываемой группы шагов

#define MIN_STEPS_PER_SEGMENT 1


Если выше включили Linear Advance, необходимо также изменить значение MINIMUM_STEPPER_PULSE для работоспособности экструдера (актуально на 10.09.19)

#define MINIMUM_STEPPER_PULSE 2 // если не работает 2, ставим 4


Включаем Emergency Parser, чтобы иметь возможность остановить принтер мгновенно, а не ждать, пока выполнятся все команды из буфера

#define EMERGENCY_PARSER


Наконец, переходим к собственно настройке драйверов!

Настраиваем токи и дробление шага. Здесь каждый пусть решает сам, какое дробление использовать, включать ли интерполяцию - спорить можно бесконечно.

#if HAS_TRINAMIC

  #define HOLD_MULTIPLIER    0.6  // Множитель тока в режиме удержания ШД
  #define INTERPOLATE       true  // Включает или выключает интерполяцию по ВСЕМ осям

  #if AXIS_IS_TMC(X)
    #define X_CURRENT     450  // сюда пишем наш ток Irms, который мы посчитали ранее
    #define X_MICROSTEPS    16  // количество микрошагов, поддерживается нативно до 256, не забываем изменить число шагов на мм
    #define X_RSENSE     0.11 // Если на Ваших драйверах резистор Rsense отличается от стандартного R110, сюда вписываем номинал
  #endif

  #if AXIS_IS_TMC(Y)
    #define Y_CURRENT     500
    #define Y_MICROSTEPS    16
    #define Y_RSENSE     0.11
  #endif

  #if AXIS_IS_TMC(Z)
    #define Z_CURRENT     550
    #define Z_MICROSTEPS    16
    #define Z_RSENSE     0.11
  #endif

  #if AXIS_IS_TMC(E0)
    #define E0_CURRENT    700
    #define E0_MICROSTEPS   16
    #define E0_RSENSE    0.11
  #endif


Включаем тихий режим StealthChop (на оси экструдера, особенно с редукторным фидером, стабильнее работает SpreadCycle, по моим ощущениям)

  #define STEALTHCHOP_XY
  #define STEALTHCHOP_Z
  //#define STEALTHCHOP_E


Задаем режим работы чоппера SpreadCycle

  #define CHOPPER_TIMING CHOPPER_DEFAULT_24V


Включаем защиту драйверов от перегрева

  #define MONITOR_DRIVER_STATUS

  #if ENABLED(MONITOR_DRIVER_STATUS)
    #define CURRENT_STEP_DOWN     50  // [mA]
    #define REPORT_CURRENT_CHANGE
    #define STOP_ON_ERROR
  #endif


Включаем гибридный режим - при превышении указанной здесь скорости алгоритм будет переключаться со StealthChop на SpreadCycle

  #define HYBRID_THRESHOLD

  #define X_HYBRID_THRESHOLD     120  // [mm/s]
  #define Y_HYBRID_THRESHOLD     120
  #define Z_HYBRID_THRESHOLD      10
  #define E0_HYBRID_THRESHOLD     15


Очень важно! Включаем отладочный режими

  #define TMC_DEBUG

В данной секции можно задать отдельно любые параметры для каждого из драйверов, например выборочно выключить интерполяцию на Z и E, если выше она включена для всех осей, но перед тем, как что-то здесь писать, советую разобраться с функциями библиотеки TMCStepper. В противном случае оставляйте эту секцию пустой, чтобы ничего не сломать.

  #define TMC_ADV() { \
    stepperE0.intpol(0); \
    stepperZ.intpol(0); \
   }


Включаем автоотправку температуры по USB

#define AUTO_REPORT_TEMPERATURES


Включаем расширенный отчет о возможностях прошивки для USB хоста

#define EXTENDED_CAPABILITIES_REPORT


Выключаем экструзию по объему

#define NO_VOLUMETRICS

Компиляция и прошивка платы

Хоба! Поздравляем - Вы восхитительны!

После того, как прошивка сконфигурирована, сохраняем изменения. Жмем Ctrl+Alt+B - запустится процесс компиляции прошивки. Если ошибок нет, после его завершения в терминале VS Code напротив LPC1768 будет зеленая надпись SUCCESS. В папке Marlin-bugfix-2.0.x\.pioenvs\LPC1768 появится файл firmware.bin - это и есть скомпилированная прошивка. Копируем этот файл на SD-карту и вставляем в плату, после чего перезапускаем плату - загрузчик установит прошивку и вы увидите стартовый экран Marlin (не беспокойтесь, после перезагрузки файл прошивки на флешке будет переименован, его не нужно удалять вручную, плата не будет перепрошиваться при каждой перезагрузке, пока Вы не кинете новый файл прошивки на флешку).
Не забываем после перепрошивки инициализировать EEPROM.

Что дальше?

Что же (а главное - как) мы можем настроить благодаря подключению по UART?

Меню TMC drivers

В меню Configuration -> Advanced configuration появилось новое подменю - TMC drivers, содержащее 3 пункта:

  1. Driver current - настройка тока Irms для каждого драйвера
  2. Hybrid threshold - настройка порога гибридного режима, то есть скорости движения оси, после которой драйвер будет переключаться из режима StealthChop в SpreadCycle. Если хотите выключить гибридный режим для какой-то из осей и использовать только StealthChop, поставьте здесь очень большое значение (на 22 мая 2019 существует баг - при загрузке настроек из EEPROM все значения отображаются равными 0. При этом на самом деле загружаются правильные значения, их даже можно поменять в этом меню и сохранить в EEPROM, и все работает, но в самом меню отображается 0)
  3. Microstepping mode - ручное переключение между StealthChop и SpreadCycle для каждой оси. Если стоит "on", то используется StealthChop и гибридный режим, если "off" - то всегда включен только SpreadCycle

Команды G-code

Ниже приводятся команды G-code для работы с драйверами TMC2208

M122 - вывод отладочной информации о состоянии драйверов - установленный ток, дробление шага и интерполяция, состояние регистров, состояние защиты от перегрева и прочие полезности

M569 - ручное переключение между StealthChop и SpreadCycle для кождой оси

M906 - задание тока Irms для каждого драйвера

M911 - информация о сотоянии защиты от перегрева

M912 - сброс состояния защиты от перегрева

M913 - настройка порога гибридного режима, то есть скорости движения оси, после которой драйвер будет переключаться из режима StealthChop в SpreadCycle

Цитирование

Вы можете цитировать материал из данной статьи в произвольном объеме при условии обязательного указания ссылки на первоисточник. В ином случае цитирование не допускается.

Автор - @ArtificalSUN

Прочее