Сколько полутонов в Пиропринтере и как работает программа в принципе

Для наглядности можно посмотреть это видео:

 

 

На тему полутонов и скоростей перемещения жала на разных тонах существует много вопросов и заблуждений. Постараемся простыми словами (насколько это возможно) объяснить физику процесса и на что это влияет.

В подготовке материала мне помог наш разработчик-программист Юрий Горбачев. Для тех, кто не знает, он работает в сфере ЧПУ с 1999 года, знает 7 языков программирования. Начинал еще в то время, когда в интернете не было общедоступных программ для станков с ЧПУ. А купить фрезерный ЧПУ станок можно было только иностранного производства за очень большие деньги. Большой опыт в разработке ядра программного обеспечения для станков и дал старт развитию проекта Пиропринтер.

 

Как это работает в общем?

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

Горячее жало имеет постоянную температуру во время всего процесса выжигания. Оно двигается по поверхности с разной скоростью. Там, где жало двигается медленно, древесина (фанера) прожигается темнее. Там, где жало двигается быстро, древесина не успевает прогреться и остается светлой. Так, рисуя с разной скоростью, мы получаем полутона. 

То есть для каждого полутона есть своя скорость перемещения. Это нужно запомнить и от этого будем отталкиваться дальше.

За скорость перемещения отвечает связка «Программа-Электроника-Механика». Сама программа разделена на две части — одну часть мы видим на экране компьютера. Через нее мы управляем станком, загружаем картинки и так далее. Вторая часть программы записана в процессоре станка. Ее называют «прошивкой». Программа на компьютере считывает изображение и переводит его в машинный код (G-код или его аналог). Прошивка преобразует этот код в сигналы, которые управляют двигателями. Двигатель вращается с заданной скоростью и приводит в движение подвижную термоголову с жалом.

 

Зачем столько заморочек с полутонами?

Чтобы наглядно увидеть, как полутона отличаются при выжигании — прикладываю фото результата выжигания тестового файла. 

Это 4 градиента  с разным числом оттенков. Фотографировал под углом, чтобы было лучше видно на камере. 

  • Первая полоса — 16 оттенков
  • Вторая полоса — 20 оттенков
  • Третья полоса — 24 оттенка
  • Четвертая полоса — равномерный градиент, который в исходном файле jpg имел 255 оттенков.

 

Как понимаете, если на фото будет не равномерный переход тона, то это скажется на качестве картинки. Особенно это заметно на участках с плавным переходом тона. Например, если это небо с закатом с плавным переходом полутона.

 

Программная обработка

Соответственно, сначала стоит задача на программном уровне оттенки картинки (в jpg или bmp) перевести в код.

Черно-белое изображение на компьютере всего имеет 256 цветов, где 0 — это черный, а 255 — это белый. Нам нужно перевести эти полутона в скорости (где для черного скорость будет низкой, а для белого — максимальной).

Для удобства мы разбили весь диапазон из 256 оттенок на 16 частей. Позже объясню почему так. В итоге мы получили 17 значений полутонов (16 частей, плюс один крайний). Теперь нужно было каждому из этих полутонов подобрать скорость, при которой жало будет оставлять нужный оттенок.

Цифра во втором ряду — это еще не скорость, а номер оттенка серого для картинки на компьютере.

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

Далее я буду брать в пример станок Пиропринтер 2 и Пиропринтер Х. Позже объясню почему.

После ряда экспериментов на версии Пиропринтер 2 для выставленной температуры скорость белого цвета была принята за 5 000 мм/минуту (5 м/мин). На белом цвете жало будет двигаться с максимальной скоростью. 

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

 

Узкое место в процессоре

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

Самый популярный процессор для небольших проектов — это ATmega328, который используется в микроконтроллере Arduino. Он особенно полюбился новичкам из-за низкой цены, удобной среды для программирования и огромного числа готовых проектов. 

Рабочая частота процессора ATmega328 16 МГц. Вроде много, но суть опять же в деталях.

Для того, чтобы процессор мог выдавать нужные нам сигналы, в процессоре также происходит огромное количество вычислений, которые тратят ресурсы процессора. Кроме генерирования полезного сигнала, нужно принимать информацию (по USB, LPT или с картридера) и выполнять математические расчеты (сама по себе работа прошивки). Только для обслуживания USB и картридера уходит столько ресурсов, что производительность можно сразу делить на 15. И это не считая самих алгоритмов выжигания.

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

 

Частота на выходе из процессора

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

В прошивке Пиропринтер 1 опорная частота была 12.5 кГц

В версии Пиропринтер 2 за счет оптимизации кода частота уже стала вдвое больше —  25 кГц.

Эти две версии были на базе Arduino. И это максимальный предел, который получилось из нее выжать. Дальше уперлись в потолок возможности самого 8 битного микропроцессора, который стоит в Arduino. Поэтому дальше будем считать исходя из этого наилучшего результата для Arduino.

 

Как связана опорная частота со скоростями?

Дальше будет немного математики, но я постараюсь показать более наглядно. Если это не так интересно, то просто перейдите к выводам из этого пункта

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

 

Vmax=[опорная частота] / [шаги двигателя на мм] / 2 * 60, (мм/мин)

 

Так мы получили максимальную скорость. Для версии Пиропринтер 2 она была 9375 мм/мин (9,4 м/мин). 

И, наконец, мы подходим к числу скоростей, которые можем получить. Чтобы узнать их число и сами значения скоростей в мм в минуту, нужно максимальную скорость разделить на “делитель скорости”. Это всегда только целые числа: 2, 3, 4, 5 и т.д. В итоге мы получаем вот такой список скоростей

Табличка длинная и не очень наглядная. я отображу ее в виде графика.

Каждая точка — это отдельная скорость. Скорость 5000 мм в минуту это белый цвет. 

Все значения ниже  250 мм/мин — на фанере это один и тот же черный цвет. Поэтому учитывать его смысла никакого нет. Всего получается 75 скоростей. И это предел для ардуино, если скорость на белом будет 5 м /минуту. Поэтому никаких 255 оттенков на ардуино получить невозможно, не замедлив станок еще сильнее.

 

Связываем скорости и оттенки

Теперь нужно связать эти возможные скорости с оттенками из картинки. Мы возвращаемся к нашему рисунку с оттенками. Вот тут как раз пригодятся эти 17 точек, которые мы отмечали. 

Смысл в том, что вручную задавать соответствие каждого оттенка картинки каждой скорости нет никакого смысла. Придется задавать значения для всех 75 оттенков вручную. Проще задать диапазоны, а значения между ними вычислять математически. Это простая интерполяция. Тем более, что при увеличении скорости  выжигания каждое значение придется каждый раз корректировать. 

Поэтому для удобства мы используем опорные скорости в этих точках. А значения скоростей между ними (если этого позволяет процессор) будут считаться программой автоматически. 

Эти скорости для станка Пиропринтер 2 записаны в файла atomic в папке с программой на компьютере. Там 17 значений, от которых считаются скорости.

 

Тут немного подытожим: 

  1. у черно-белой картинки на компьютере  256 оттенков.Нам нужно найти подходящие скорости для каждого оттенка при выжигании
  2. Мы их разбили на 16 частей для удобства. И опытным путем определяем значения скорости для каждого из них.
  3. В действительности процессор может обработать больше скоростей, они будут высчитываться автоматически по соседним точкам исходя из этих 17 опорных скоростей. Полный список скоростей я показывал на прошлом слайде
  4. В диапазоне от скорости 250 мм/мин до скорости 5000мм/мин ардуино способна выдать 72 оттенка при скорости на белом 5 м/мин.

 

Далее мы задались вопросом Как поднять число скоростей для оттенков?

Версия Пиропринтер 3 и Х уже получили 32 битный процессор семейства STM. В отличии от ардуино с тактовой частотой 16МГц, 

 

процессор STM уже давал частоту:

72 МГц для версии Пиропринтер 3

и

84 Мгц для версии Пиропринтер Х.  чуть более старшая версия этого процессора

 

Плюс, появился еще второй микропроцессор ESP, который управляет WiFi соединением, чтобы не нагружать этим основной процессор STM. То есть отдельный процессор отвечает за вайфай

За счет того, что в версии Пиропринтер Х опорная частота уже не 25 кГц, а 200 кГц, то и максимальная скорость (которую может обработать электроника) получится 75 метров в минуту. Это значение мы считаем по той же формуле. Понятно, что механика такого не выдержит. Но мы пока говорим просто о способности процессора. 

Также получаем из этого числа доступные скорости. Всего в диапазоне от 330 мм/мин до 5 000 мм/мин получается 416 скоростей. Но мы понимаем, что картинка это всего 256 оттенков (с учетом белого). Поэтому так много нам не нужно для выжигания. Но открывается возможность поднять скорость выжигания без потери качества.

в таблице Синим цветом я здесь выделил те скорости, которые есть на станке Пиропринтер 2 с ардуино. Как видно, число скоростей увеличилось в 8 раз. Поэтому появилось много промежуточных значений.

На графике в точках это выглядит вот так

Графики с логарифмической шкалой. Это нужно для того, чтобы они были более наглядными и читаемыми. 

Для версии Пиропринтер Х опорных скоростей также осталось 17, между которыми расчитываются промежуточные скорости из таблицы выше. Из-за изменения архитектуры процессора их вынесли в отдельный файл speed.txt

 

Как тогда поднять скорость?

Итак, мы хотим поднять скорость выжигания, чтобы портрет выжигался вдвое быстрее. 

Для этого нужно поднять скорость  на белом цвете и все остальные скорости пропорционально. В версии Пиропринтер Х по умолчанию стоит скорость 2.7, то есть она в 2.7 раза больше базовой скорости. Вместо 5 м/мин получается 5*2,7=13,5 м/мин. Но чтобы не перегружать механику, в настройках стоит ограничение 12.5 м в минуту.

Но у нас также пропорционально поднимаются и все остальные скорости. Разумеется, если мы поднимаем температуру, то и темные оттенки будут выжигаться темнее. Значит, что подняв скорость в 2.7 раза на белом, то и скорость выжигания черного цвета также поднимется. И уже будет равняться не 330, а 891 мм/мин. 

Значит, что мы смещаем рабочий диапазон правее. Это верхний график. Максимальная скорость теперь 12500 мм в минуту. Минимальная почти 900 мм в минуту.

И тут мы уже сталкиваемся с тем, что все скорости, которые мог воспроизвести станок в диапазоне от 330 до 891 мм/мин по факту будут черным цветом и мы их просто потеряем. 

Вот так будет выглядеть табличка скоростей для станка РРХ на скорости белого 12,5 м/мин

На графике видно, что чем темнее цвет, тем больше скоростей у нас получается. 

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

Как видно, пы дополнительно получили скорости от 5 м/минуту до 12.5 метров в минуту — я их выделил зеленым цветом. Это 18 скоростей. Но потеряли мы гораздо больше оттенков в темном диапазоне — я их выделил красным. Всего их вычеркнуто 277

В итоге получаем, что доступно скоростей будет 416-277+18=157 что весьма неплохо! Есть еще запас.

А если на Ардуино поднять скорость также, то что получится?

Как видно, мы потеряем 54 скорости в темном диапазоне и получим 2 скорости в светлом. Итого получится 20 скоростей, то есть оттенков. 

А теперь вернемся к картинке, которую я показывал ранее. Напомню, что 20 полутонов — это вторая линия сверху. 

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

Также по картинке видно, насколько отличается качество, когда станок работает в полном диапазоне оттенков — это самый нижний градиент. и когда он выдет 16 или 24. 

Понятно, что 150 это большой запас на самом деле. Человеческий глаз столько не воспримет, поэтому это более, чем достаточно. Если выжигать на 75 полутонов, то существенной разницы глаз не заметит. Но разница будет очень существенна при количество полутонов менее 30.

 

А что со временем выжигания?

К чему мы стремились — это скорость выжигания. 

Если картина на скорости 5 м/мин выжигается около 3.5 часов, то на скорости 12.5 м/мин она будет готова примерно за 1:30-1:40 ч.

Разумеется, мы берем какую-то среднюю картину, в которой есть и светлые тона и темные. Если картина будет совсем светлой, то она может выжечься за час. И также если картина очень темная, то выжигаться может и 2.5 часа. 

 

С чем мы столкнулись также на большой скорости?

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

Но если фанера не обработана ничем, то требуется внести корректировку на средних тонах. И будет завал на средних полутонах

 

Подытожим

  1. Узкое место в передаче данных от программы до оттенков на фанере — это процессор. От его производительности и оптимизированности прошивки зависит реальное число оттенков и общая скорость выжигания.
  2. При увеличении скорости выжигания заметно сокращается число оттенков. Переходы между тонами становятся заметными, поэтому страдает качество картинки. Поэтому А4 портреты на Arduino рисуются на скорости до 5 м в минуту и занимают в среднем 3-4 часа. (если изображение не сильно светлое, но и не очень темное). Пиропринтер Х та же самая картина будет выжигаться 1:30-1:40 ч. или 2.5 часа если она сильно темная.
  3. Чем больше оттенков может передать станок, тем плавнее выглядят переходы тонов. Особенно это заметно на картинах, где есть какой-то градиент. Например, небо, которое с одной стороны темнее, чем с другой.

 

X

    Оставьте свои контакты,
    и получите ссылку на бизнес план на вашу почту

    Введите Ваше имя*:

    Введите Ваш e-mail*:

    Введите Ваш телефон*:

    Я даю согласие на обработку персональных данных*:

    X