Калибровка ускорений и рывков 3д принтера

Всем привет! После моего видео о скорости 3д принтеров, где я объяснял что время печати зависит не только от значения скорости в слайсере, но и от значения ускорений и рывков в прошивке, возникло довольно большое количество вопросов “а как же эти ускорения и рывки настроить?”. 

На самом деле, способов существует огромное количество. Например, часто прибегают к методу последовательных приближений. Его суть в том, чтобы выбрать два значения, одно очень пессимистичное, другое, наоборот, оптимистичное. Например, для принтера типа Ortur 4 это будет 500 и 1500 мм/с² соответственно. Печатают с одним, потом со вторым, и смотрят результат. Допустим, на 500 было нормально, а 1500 многовато. Тогда берут среднее арифметическое, равное 1000 и печатают с ним. Потом опять среднее арифметическое между последним удачным и неудачным результатами, опять и опять пока результат не будет устраивать.

Таким методом можно калибровать любые значения, не только ускорения. И как можно догадаться, методика очень длительная, так как надо провести огромное множество печатей. Особенно если вообще не представляете, какие значения взять как изначальные для этого метода. Но у меня есть в загашнике способ калибровки ускорений и ретрактов с помощью всего пары быстрых печатей. Я покажу его на примере прошивки Marlin, так как она наиболее распространен сейчас. Но на других прошивках, имеющих функционал управления ускорениями “на лету” логика будет такая же, только команды надо будет уточнить.

Для начала вы должны проверить всё в своём принтере. Моторы и драйверы не должны перегреваться, иначе они могут начать пропускать шаги не из-за больших ускорений, а просто сами по себе. Ремни должны быть нормально натянуты, ничто по механике не должно люфтить, шататься и так далее. Если у вас есть какие-то проблемы с механикой, то сначала решайте их, а потом уже калибруйте параметры печати.

Итак, если всё готово, переходим к самой калибровке. Нам понадобится модель кубика и любой слайсер. Кубик можно с любым ребром, но я использую 20 миллиметровый, без каких-либо надписей, углублений и так далее. Относильно слайсера посоветую выбрать тот, которым пользуетесь чаще всего. 

Загружаем кубик и делаем его башенкой нужной нам высоты. В Simplify3d, на примере которого я показываю, для этого надо дважды кликнуть по модели, убрать галочку uniform scaling, чтобы можно было масштаб по осям отдельно редактировать, и указать требуемую высоту. Мне 100 миллиметров будет достаточно, вы себе делайте сколько сочтёте нужным.

Дальше настройки. Ширина линии и толщина слоя те, с которыми вы чаще всего печатаете. 1 периметр, 0 слоёв крышки, 0 процентов заполнения. Режим вазы при этом не включаем, начало слоя выравниваем, чтобы было в одном месте. Скорость печати ставим обычную для себя, а так же выключаем всё, что может влиять на скорость движения головы. Например, управление ускорениями и рывками в Cura и Prusaslicer, замедление печати при низком времени слоя и так далее. Нарезаем и сохраняем куда-нибудь на компьютер.

Теперь нам надо добавить в код команды на изменение ускорений, рывков или любых других параметров, которые мы хотим калибровать. Можно это сделать через простенький скрипт постобработки, например. Но универсальный вариант — руками. Тем более такая калибровка делается один раз и тратить время на обучение, чтобы сэкономить два раза по минуте нерационально.

Копируем наш g-code, чтобы не пришлось перенарезать если что, и открываем блокнотом, notepad++, sublime text или чем угодно еще. Главное не WordPad’ом, Word и им подобными.

  1. Открываем поиск с помощью Ctrl + F и удаляем все команды, начинающиеся с M201, М204, М205 и М900. Они нам всё испортят, если их не удалить.
  2. После этого ищем начало печати. В моём случае куча строчек являются просто комментариями слайсера, они начинаются с точки с запятой. Мотаем вниз и находим команду G28 — автопарковка.
  3. Сразу после неё пишем:
    1. М900 К0 — это отключит Linear Advance, если он включен. Если выключен, то просто ничего не сделает.
    2. M201 X5000 Y5000 — это снимет ограничения по ускорениям, чтобы мы могли их ставить какими захотим
  4. Дальше в зависимости от того, включено управление движением с помощью рывков или с помощью junction deviation. 
    • Если рывки, то M205 X10 Y10 — установить их по 10 миллиметров в секунду для осей Х и У. Это некоторые не очень большие значения, которые подойдут почти для любого принтера. Потом их откалибруем отдельно.
    • Если Junction Deviation, то М205 J0.04 — это примерный аналог рывков по 10 миллиметров в секунду, если так можно сказать.
  5. Ну и ставим начальные условия по ускорениям: М204 P500 T500. P — это ускорения печати, T — ускорения перемещений. Выставляем их тут одинаковыми чтобы случайно на перемещении не вылететь за предел.
  6. Снова открываем поиск с помощью Ctrl + F. Я буду каждые 5 миллиметров высоты модели увеличивать ускорения по 100 милилметров в секунду в квадрате. Так что ищу код подъёма на эту высоту: ввожу “z5”. И тут же пишу хоть перед найденной строчкой, хоть после неё команду М204 P600 T600. 
  7. Дальше на высоте 10 выставляю М204 P700 T700, на высоте 15 пишу M204 P800 T800  и так до конца файла. Вы можете увеличивать значения по 200 или 50, увеличивать их чаще или реже — разница будет только в диапазоне и плавности переходов.

Теперь просто сохраняем полученный г-код на флешку и запускаем печать на принтере. На всю модель уходит обычно минут 20, и все из них вы должны находиться рядом с печатающим принтером. Дело в том, что дойдя до больших ускорений, моторы могут перестать справляться и начнут пропускать шаги. И я не готов гарантировать, что если оставить так принтер надолго, то с ним ничего не случится. 

    Итак, я для эндера прогнал такую башенку из PLA от Greg, и результат получился довольно интересный. Я ожидал, что где-то после 2 тысяч миллиметров в секунду в квадрате эндер перестанет справляться, но он всё отпечатал без пропусков. Я связываю это с использованием junction deviation с низким коэффициентом, а так же с низкой сложностью моделей.

    Но больше всего интересен результат. По оси Х эхо совсем не сильное, эхо на ощупь начинает чувствоваться примерно от 2 тысяч ускорения. Думаю, ремень заменить со стокового и поднатянуть, и можно было бы сильно больше попробовать печатать. Так же очень интересно, что в районе от 1000 до 1100 рябь вообще почти пропадает при том, что есть и до этого, и после этого. Видимо, что-то с чем-то перестаёт резонировать и каретка начинает двигаться стабильно. Запомним эти цифры.

    По оси Y эхо, естественно, сильное так как стол у прюшек очень тяжёлый и обладает очень большой инерцией. На ощупь эхо чувствуется, уже не с 2000, а примерно с 1200, что хорошо. При этом и 2400 печатать можно, если это технические модели будут, где внешний вид не важен. Но, что самое интересное, областей, где эхо практически пропадает уже две — с 900 до 1000 примерно, и примерно на 1800 миллиметрах в секунду в квадрате. Теория с резонансами перестаёт выглядеть беспочвенной.

    В общем, по этому тесту я определяю оптимальное значение ускорения для печати в районе от 900 до 1000 мм/с², так как при этих значениях и по Х и по У рябь практически полностью пропадает. При этом максимум не определился явно, но я буду считать его равным двум тысячам, так как дальше рябь уже сильновата. 

    Второй тест позволит нам определить оптимальные значения junction deviation. Делается всё практически так же:

  1. Удаляем все M900, M201, M204 и M205
  2. Выключаем linear advance M900 K0
  3. M201 X2000 Y2000 установит максимальные ускорения равными найденным из предыдущего этапа
  4. M204 P900 T1800 выставит ускорение печати равным оптимуму из предыдущего этапа, а ускорения перемещений равными второй полоске без эха. Если у вас её не было, то ставьте процентов на 10-20 меньше максимума и всё.
  5. Дальше для рывков команда M205 X5 Y5. Значения рывков по 5 миллиметров в секунду довольно маленькие практически для всех принтеров, и сойдут в качестве отправной точки.
  6. Для junction deviation отправной точкой можно взять 0.02 — это очень низкое значение. M205 J0.02
  7. Ну и дальше так же каждые 5-10 миллиметров добавляем эту команду с увеличенным значением. Для рывков у более-менее обычных принтеров предел я бы поставил где-то 30 миллиметров в секунду, дальше уже слишком жестоко. Для junction deviation предел для меня 0.2. Максимальное значение junction deviation в марлине, кстати, 0.3.

Тут уже разницы от низа до верха в случае JD будет видно мало, так как ускорения выставлены уже адекватные для принтера. Но, тем не менее, отмечу несколько вещей. По оси Х всё отлично от низа до верха, тут ничего не меняется толком и смотреть бестолку. По У до высоты примерно 35 миллиметров рябь есть только в конце линий! Скорее всего, при этих значениях ускорений и JD, рябь от эха и от моторов совпадает и её просто не видно. Так что приму на данный момент оптимальным значение 0.08, то есть на высоте от 30 до 35 миллиметров. 

    Полученные значения сохраняем в прошивку через экран или с помощью команд:

  1. М201 X2000 Y2000 — установить максимальные ускорения по осям Х и У равными 2000 миллиметрам в секунду в квадрате
  2. М204 P900 T1800 — установить ускорения печати и перемещений 900 и 1800 миллиметров в секунду в квадрате соответственно
  3. М205 J0.08 — установить значение juntion deviation равным 0.08
  4. М500 — сохранить настройки в EEPROM.

Впринципе, на этом всё. Этот метод калибровки не особо точен, конечно, так как модель не самая репрезентативная. Но вы со спокойной душой можете скачать или создать любую другую, которая вас удовлетворит. Так же вы можете включить linear advance и прогнать ту же калибровку для выяснения ускорений, до которых этот самый эдванс тормозит ваш принтер. Просто эхо банально перестанет меняться с того значения, на котором наступает ограничение. Так же вы можете откалибровать ускорения и рывки оси Z или экструдера — принцип универсальный. Главное не забывайте, что для стабильности печати желательно использовать не предельные значения, а понижать их процентов на 20-30. Иначе чуть скакнёт напряжение, чуть перегреются драйверы или моторы и случится пропуск. Обидно будет запороть печать, особенно если она часов на 30-50.