Металл2024 Реклама
Метобр2024 Реклама

NanoDLP и LCD SLA. Погружаемся эффективно.

VikluhaVaklay
Идет загрузка
Загрузка
01.02.2019
2738
8
3D-печать

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

10
Аргх! Первый пост глюкнул и почти пустой опубликовался. Значит, первый блин комом, ну да ладно.

Появился у меня тут LCD SLA принтер со средней областью печати 200х130 мм в горизонтальной плоскости. Дно ванны из фторопластовой плёнки 100 мкм, отрыв слоя происходит поднятием стола. И почти сразу столкнулся я по своему первому опыту с несколькими проблемами:
  • Вязкость - стерва. При погружении:

    - возникают усилия по оси Z, из-за чего выбираются зазоры в кинематике и, как следствие, нарушается повторяемость позиционирования стола;

    - дисплей под ванной может попросту поломать при неблагоприятной комбинации скорости погружения и вязкости полимера;

    - воздушная прослойка под силой давления во время погружения может исчезнуть; помимо возросшей нагрузки на дисплей процесс отрыва слоя становится неблагоприятным - слой отрывается не от периметра к центру, как на мембране, а по всей площади сразу, как на твёрдой ровной поверхности;

    - из-за высоких усилий отрыва портится дно ванны, могут быть пропуски шагов в приводе (в этом случае хана дательке)
  • Тише едешь - дальше будешь. Малая скорость решает большинство проблем. Но наблюдать за сменой времён года и одновременно ожидать завешение печати раздражает. Когда доля времени засветки слоя 10% от общего времени цикла - аж вертит всё внутри.

Тут приходит осознание, что принтер этот - зародыш станка с ЧПУ, G-кодами управляется. G-коды видел, пробую сообразить. Лезу в настройки профиля 'резины' и нахожу раздел Codes:
  • NanoDLP и LCD SLA. Погружаемся эффективно.
Вот оно, команды процесса опускания и поднятия стола. Строки позиционирования элементарны: погружение выполняется на полной скорости, поднятие - на скорости 1/2 от номинала. Пробую разделить процессы движения на области с разными подачами:
  • NanoDLP и LCD SLA. Погружаемся эффективно.


Как думал я:

погружение

- до уровня 2 мм над конечной плоскостью скорость номинальная;

- следующий 1 мм скорость режется до 1/2 от номинала;

- ещё 0,5 мм после скорость уменьшается до 1/8 от номинала;

- оставшиеся 0,5 мм стол крадётся с подачей 1/20 от номина, минимизируя воздействия движения в вязкой среде;

поднятие

- первый 1 мм, когда происходит отрыв слоя, стол еле движется - 1/20 от номинала;

- следующий 1 мм чуть быстрее, но зазоры ещё малы для быстрых движений вязкой среды - 1/4 от номинала;

- после прохождения 2 мм скорость поднятия нормализуется до номинала.

Но что-то пошло не так, и стол начал хаотично двигаться в смоле. Почитав комментарии и советы к командам в nanodlp, закралась мысль, что контроллер без нужны задержек шлёт команды на привод, а он как Цезарь - пытается всё и сразу, но от качества страдаю я.

Есть такой совет в описании команд: чтобы контроллер слал команды после завершения предыдущей, нужно получить статус о прекращении движения шаговика. В моём случае это осуществляется сервисной командой 'ждун' [[WaitForDoneMessage]].

Пробую разделить каждую строку позиционирования этой командой:
  • NanoDLP и LCD SLA. Погружаемся эффективно.
и случилось чудо - оно работает ровно так, как я и задумал.

Теперь подача низкая именно в те моменты, когда это требуется.

Писал для таких же нубов, как и я. Если ужебыло, больно хомяками не кидайтесь - чукча не читатель, чукча писатель.

Вот код в текстовом формате:
Code Before Each Layer

G1 Z{[[LayerPosition]]+2.0} F[[ZSpeed]] P1

[[WaitForDoneMessage]]

G1 Z{[[LayerPosition]]+1.0} F{[[ZSpeed]]/2} P1

[[WaitForDoneMessage]]

G1 Z{[[LayerPosition]]+0.5} F{[[ZSpeed]]/8} P1

[[WaitForDoneMessage]]

G1 Z{[[LayerPosition]]} F{[[ZSpeed]]/20} P1

[[WaitForDoneMessage]]

[[PositionSet [[LayerPosition]]]]

Code After Each Layer

G1 Z{[[LayerPosition]]+1} F{[[ZSpeed]]/20} P1

[[WaitForDoneMessage]]

G1 Z{[[LayerPosition]]+2} F{[[ZSpeed]]/4} P1

[[WaitForDoneMessage]]

G1 Z{[[LayerPosition]]+[[ZLiftDistance]]} F{[[ZSpeed]]} P1

[[WaitForDoneMessage]]

[[PositionSet [[LayerPosition]]]]

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

10
Комментарии к статье
Кремень КБ Реклама
Кремень КМ Реклама