Как работает программное обеспечение/прошивка 3D-принтера

Я работал над проектом принтера, который в основном является 2D-принтером (тип точечной матрицы). Мы используем соленоиды в качестве приводов, чтобы сделать оттиски на бумаге. Мы сейчас находимся в процессе разработки пользовательского программного обеспечения. Но проблема, с которой мы столкнулись, заключается в том, что мы понятия не имеем, как проектировать программное обеспечение, поскольку мы являемся группой новичков в этой области.

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

  • Может ли кто-нибудь предложить какие-нибудь другие идеи, чтобы заставить это работать?
  • Верен ли наш подход?
  • Работают ли 3D - принтеры с той же техникой?

, 👍2

Обсуждение

См. также https://electronics.stackexchange.com/questions/26723/does-gcode-require-a-response-code-from-the-interpreter, @Sean Houlihane


4 ответа


2

Встроенное ПО 3D-принтера использует код gcode, полученный от ЧПУ, и подтверждения нет. Они посылают команды на шаговые двигатели, такие как G1 X10 Y10, для перемещения печатающей головки на 10 мм вдоль X и Y.

Вы можете использовать готовую прошивку 3D-принтера, например Marlin, на плате 3d-принтера, и использовать выход оси X или экструдера для подключения к вашему соленоиду, отправляя сигнал G1 Z0.1 или G1 E0.1, который приведет его в действие на короткое время. Вы можете даже использовать E и Z на разных соленоидах.


,

1

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

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

Пропуск ремней является механической проблемой и не должен возникать (и не может быть обнаружен, если не пропущены шаговые шаги), но пропуск шагов-это то, что может быть обнаружено определенным типом шаговых драйверов (trinamic). Шаговые двигатели не используют петлю обратной связи для проверки конечного положения. Сервоприводы, в отличие от шаговых, используют петлю обратной связи и, как таковые, могут достигать заданного положения в соответствии с инструкциями, но это связано с увеличением стоимости, сервоприводы дороже и, следовательно, не встречаются в большинстве "дешевых" машин для 3D-печати.

Дизайнер 3D-машины должен выбрать двигатели для системы позиционирования, если она не сильно загружена, вы выбираете шаговые двигатели без контура обратной связи или на машинах с более высокой нагрузкой для сервоприводов (в основном шаговые двигатели с некоторой электроникой позиционирования для обратной связи). В случае шагового двигателя вы надеетесь, что он достигнет места назначения, куда вы ему укажете, для сервопривода вы знаете, что он достигнет именно этого положения.

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

,

Примечание: обнаружение пропуска ремня можно обнаружить одинаково: вам просто нужен датчик обратной связи, который включает ремень в петлю. Однако я согласен с тем, что некачественный 3D-принтер, который обычно использует ремни, не будет иметь такой обратной связи. Учитывая шариковинтовые механизмы, они просто не могут пропускать, а также обеспечивают большую жесткость., @Adrian Maire


3

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

Принтеры, как правило, работают двумя способами.

  1. Прочитайте G-код из локального хранилища в виде текстового файла. Здесь механизм синтаксического анализа/управления находится под полным контролем.

  2. Передавайте G-код по последовательному порту, используя рукопожатие "ack".

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

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

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

,

Прекрасный ответ! Именно ответы машины могут приводить к сбоям в работе другого программного обеспечения, см., например, [этот ответ]. (https://3d-printery.ru/topics/7287/)., @0scar


0

Система ЧПУ, и упрощая намеренно, делится на несколько этапов:

  1. Приобретение g-кода: Это зависит от платформы, является ли файл из USB-флэш-памяти, сети или прямого ввода от оператора. Операции G-кода должны быть буферизованы в количестве, достаточном для того, чтобы позволить некоторую "перспективу" в программе.
  2. Разбор g-кода: Разбор любого формального языка основан на теории "формальных грамматик" . https://en.wikipedia.org/wiki/Formal_grammar. К счастью, g-код-одна из самых простых грамматик иерархии Хомского. Синтаксический анализ языка-это целая тема сама по себе, и она следует за лексическим, синтаксическим и семантическим анализом.
  3. Вождение: Существует несколько различных стратегий:

    • Open-loop vs closed loop: В ЧПУ с замкнутым контуром датчики обеспечивают обратную связь от движения, позволяя водителю фиксировать отклонения (например, без ступеней). Эти системы стоят дороже и, как правило, недоступны в дешевых 3D-принтерах. В ЧПУ с разомкнутым контуром водитель посылает сигналы и "надеется", что машина будет следовать, это случай самых дешевых 3D-принтеров, где, если заблокировать голову, она потеряет шаги.
    • Синхронный против асинхронного (не уверен в этом названии): В синхронных системах драйвер посылает один шаг для каждой оси каждого цикла (один шаг вперед, один шаг назад или один шаг назад для каждой оси x, y, z, a...). В каждой итерации драйвер устанавливает, какие шаги необходимо активировать и отправить; скорость движения зависит от того, насколько быстро выполняется этот цикл. При асинхронном вождении цикл выполняется с определенной скоростью и применяется по мере необходимости для корректировки расстояния между предыдущей/обнаруженной позицией и ожидаемой позицией.

Сбор и анализ g-кода может быть выполнен в мягком режиме реального времени, однако вождение требует жесткого реального времени, точность которого определяет максимальную скорость, с которой ваш ЧПУ может управлять.

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

Я надеюсь, что это даст краткое введение в тему, очевидно, что каждый аспект нуждается в дальнейшем чтении.

,