Почему pressure advance обычно реализуется в прошивке а не в slicer

firmware fdm pressure-advance

Недавно я начал изучать pressure advance и то, как он работает, и немного запутался в том, где он обычно реализуется.

Моя идея 3D-принтера заключалась в том, что его прошивка довольно тупа и воспроизводит только GCode, ничего не зная о печатаемом объекте, используемом материале или даже о самом принтере.

Но с опережением давления все это меняется, и теперь микропрограммное обеспечение должно знать линейный коэффициент опережения, который объединяет информацию об используемой нити и пути ее прохождения. Кроме того, ось Е больше не управляется непосредственно GCode, но ее движение почти независимо определяется встроенным программным обеспечением.

Почему это? Есть ли причина, по которой slicer (или постпроцессор) не может вычислить все это и непосредственно сохранить необходимые перемещения оси экструдера в GCode? Есть ли у принтера какая-то дополнительная информация, которую не хватает слайсеру?

, 👍7

Обсуждение

ответ хорта: G-код может изменять переменные в прошивке, если это необходимо., @Trish


2 ответа


Лучший ответ:

8

Кроме того, ось Е больше не управляется непосредственно GCode, но ее движение почти независимо определяется встроенным программным обеспечением.

Это имеет место даже без линейного продвижения. G-код не управляет непосредственно движением любой из осей. G-код определяет только путь, по которому должны двигаться оси, но не ускорение и замедление, связанные с следованием по этому пути. Если вы печатаете куб, то G-код может указать, что экструдер должен выдавливать квадрат. В нем будет указано, что должны быть напечатаны 4 стороны квадрата, но не указано, как должен быть обработан переход от одной стороны к другой.

Принтер не может мгновенно перейти от выдавливания одной стороны квадрата к выдавливанию другой стороны, потому что направление экструдера не может измениться мгновенно. Он должен плавно замедляться и ускоряться. Этим занимается микропрограммное обеспечение, которое переводит прямолинейные команды из G-кода в плавное ускорение и замедление экструдера.

Именно в этом и заключается линейное продвижение. Он связан с ускорением и замедлением. Нет никакого способа "реализовать" линейное продвижение в G-коде, потому что G-код даже не имеет понятия об ускорении и замедлении. G-код (и слайсер) понятия не имеет, как микропрограммное обеспечение обрабатывает ускорение и замедление, поэтому слайсер не может знать, какое линейное продвижение требуется для соответствия.

Тогда вы можете спросить: "почему ускорение и замедление не реализованы в G-коде (а не в микропрограмме)?" Это просто дизайнерский выбор. G-код должен быть очень простым форматом файла, и он просто позволяет вам задавать команды перемещения по прямой линии. Представление гладких кривых ускорения либо потребует разбиения их на множество дискретных, небольших шагов, но это значительно увеличит размер файла. Вы могли бы предложить более сложную спецификацию G-кода, которая позволила бы получить более "компактное" представление кривых ускорения и замедления, но тогда вы просто перенесете вычисления обратно на прошивку (хотя и с более явной спецификацией в G-коде).


,

3

Это действительно хороший вопрос, который проливает много света на архитектуру программного обеспечения/прошивки 3D-принтера, и Том уже сказал много вещей, которые я хотел сказать, прежде чем получить шанс написать ответ. Основная проблема заключается в том, что для точного повышения давления (и таким образом, чтобы не получить его ужасно неправильно, когда он неточен), вам нужно знать фактическую скорость подачи экструдера в любое время, и это не доступно до применения профиля ускорения, что по соглашению происходит в встроенном ПО принтера.

С учетом сказанного, были примитивные и даже несколько продвинутые попытки сделать продвижение давления в слайсере. Первым, по-видимому, был "накат", который, наряду с дополнительным грунтованием после берега, в значительной степени является просто "повышением давления, предполагающим постоянную скорость подачи". Это ужасно неправильно, если вы смешиваете разные скорости подачи экструдера (разные скорости печати или ширины линий и т. Д.) Или если у вас медленное ускорение, Но если ваше ускорение настолько быстро (относительно максимальной скорости), что оно примерно мгновенное, оно может работать нормально.

Современная Cura также имеет компенсацию расхода, что является чем-то вроде повышения давления. Он чувствителен к скорости, поэтому теоретически может давать точные результаты при различной ширине линии и скорости печати, если ускорение достаточно близко к мгновенному. Поскольку он появился после того, как Марлин добавил линейное продвижение, я никогда не утруждал себя попытками поиграть с ним, поэтому не могу сказать, действительно ли он работает прилично. Есть еще много тонкостей в том, когда выполняется продвижение вперед, что оно может пойти не так, и я думаю, что вы захотите сделать несколько тестовых случаев просто для того, чтобы прочитать вывод gcode и оценить, достаточно ли близко то, что он делает, к разумному.

Если вы хотели сделать полное давление аванс в срезе, тебе нужно, чтобы срез ручка ускорение профиля, разбивая строки на небольшие сегменты друг с номинальная скорость подачи, соответствие которой они должны положить конец, и достаточно близко к которой они должны начать с прошивки ускорение ограничений, установленных для внесения изменений. Затем, зная очень хорошее приближение фактической головки инструмента и, следовательно, скорости подачи экструдера для каждого сегмента, вы знали бы заранее, что нужно применить, и могли бы применить его в качестве дополнительного подразделения в конце предыдущего шага печати. А потом в теории все получается. Но это сделало бы gcode намного больше/громоздче и требовательнее к скорости последовательного соединения и способности микроконтроллера идти в ногу с разбором/планированием. Так что это почти наверняка плохая идея.

Прошивка Klipper делает это по-другому. Он выполняет анализ gcode и планирование (включая опережение давления) в программном обеспечении Python (с некоторыми C для критических путей), работающем на гораздо более мощном компьютере, и отправляет точные сгенерированные тайминги шагового двигателя по последовательному каналу на микроконтроллер, работающий с оборудованием принтера.

,