Comments 47
Имел неудачный опыт аналогичной затеи (но коммерческой), лет 10 назад (так что все высказывания обязательно сначала проверить на актуальность), речь не про Ваш принтер и Ваши головки.
Попробую вкратце описать нюансы и самые большие мои ошибки, может быть поможет скипнуть пару лет мучений:
1. Не стоит что-то делать из "домашних" печатных головок (бюджетные принтеры) - пока проект дойдёт хотя бы до альфа версии: принтер снимут с продажи (хоть головки подходят зачастую сразу к нескольким принтерам, но искать целенаправленно такие нужно)/чутка изменят протокол (так называемые "кодировки" в том числе, привет DX5)/трудно достать. Короче, Canon, Epson, HP и т.п. сразу мимо. И ещё - головка может общаться с чипами на картриджах для выявления "оригинальности" их.
Рекомендую попробовать головки XAAR - на них можно найти спецификации/распиновки и т.д., но стоят на порядок! дороже. Б/У не рекомендую брать на первых порах.
2. Не пытаться "распарсить" протокол современных головок - супер сложно, дорого и, к тому же, специально "кодируются" данные.
3. "Микроконтроллер"`а не хватит производительности, имхо от 400 МГц и выше. В идеале FPGA, но достаточно сложно для первого раза. Поэтому очень большой объём памяти нужен (сотни Мб?) и просчитывать всё заранее на "линию", точнее да же на 3-10 (в зависимости от количества дюз, желаемого разрешения печати). Просто взять и "вывести" линию без учёта предыдущих/следующих будет лажа по итогу.
3.1. Тайминги и фронты сигналов! Они очень жёсткие. По-моему DMA каналов на stm32 Вам не хватит (точнее, вероятно только на один цвет), и вроде на ней они не могут одновременно передавать, а нужно будет.
4. Основная проблема: напечатать одноцветный текст относительно легко, напечатать фото хотя бы 300DPI - мега сложно. Расчёты как поведёт себя "капля" при растекании, как смешается с остальными (кроющая способность у разных цветов разная, и не всегда нужно сначала грубо говоря капнуть пурпурной, потом жёлтой - иногда наоборот) и куда она упадёт (увы, не X==, а X~=) с учётом движения головки мне так и не дались. Когда добавилось ещё и капля переменного размера, тут всё, лапки к верху.
5. Обзаведитесь микроскопом - когда научитесь управлять дюзами по отдельности можно будет увидеть что не туда летят.
6. Не пытайтесь сразу получить картинку с ПК и т.п., начните с печати линий, простых паттернов, финал - окружность с плавными границами, переходите в цвет - градиент по двум цветам, потом трём. И не пытайтесь сразу в двунаправленную печать, как и менять скорость перемещения головки - всё "уплывёт". Нужно выводить некоторые "формулы" если можно так назвать.
Софт, цветовые профили, РИП, вот это вот всё после - так как после печати градиентов уже будет понимание про дизеринг, плотности точек, перекрытие, отчего понять будет сильно проще что зачем. Исходники WinGP в помощь.
7. Сжечь дюзы достаточно просто на первых порах, запаситесь запасными головками =)
8. Успехов!
Я как раз автор PrintSpider_Arduino и этого проекта на hackaday.
Этот проект у меня лежит не доделанный в столе.


Видео рабочего прототипа
Где-то потерял видео с кривой надписью HELLO WORLD.
Последнее на чем я остановился:
В целом все это как-то работало с ПО от SpriteTM. Здесь PrintSpiderLib какие-то баги которые до конца не отладил.
Направление по управлению из Arduino даже не стал дальше копать, так как она слишком медленная и не обеспечивает нужных таймингов по выдаче управляющих сигналов. Выше писали про жесткие тайминги. Думаю, что затея бесперспективная.
В схеме PCB здесь есть баги в защитном механизме который должен отсекать сигнал на нагрев сопел(выплевывание чернил), поэтому эта штука нещадно палит сопла на картридже и дольше пары тройки тестов сами картриджи не живут. Как раз про пузырь и перегрев это оно. Это основная проблема на которой застрял в последний подход.
Плюсуем сюда мою криворукость в паяльном деле + не доступность с определенного времени китайских площадок по выпуску дешевых эксперементальных плат. Из-за этого переключился на другие задачи.
В итоге пока этот проект лежит на полке и ждет своего времени.
У меня куча дубликатов самих готовых плат, но с указанными багами. Если есть интерес могу поделиться. В коллаборации даже поучаствовать в доработке.
Не ну это замашка серьезная. Успехов в ваших начинаниях! Никогда не задумывался как оно работает с той стороны, обывательски казалось, что всё очень примитивно как g-code в 3д-принтерах, но явно всё сильно сложнее.
Под такой жёсткий замес точно подписка :D
Спасибо на добром слове!) Самая большая сложность в отсутствии документации к печатающим головам и невозможности их изготовления в кустарных условиях (ну либо я плохо искал). Остальное должно быть делом техники и уже протоптанной дорожкой
А почему бы не пойти чуть-чуть дальше и создать свою печатающую голову, с одним соплом и обслуживаемую? Понятно, что будет работать она помедленнее многосопловых решений, но их насколько знаю, в бытовых условиях не повторить, т.к. они методом фотолитографии делаются. Тут еще и в чернила многое упирается, а ведь не зря чернила для струйников признали одной из самых дорогих жидкостей в мире.
Можно, но, на мой взгляд, технически сложно изготовить в домашних условиях что-то хорошо работающее. Формирование правильной капли даже с готовыми головами непростой процесс, а с самодельной он умножится ещё и на сильно плавающую погрешности изготовления
Микронное сопло изготовить при наличии станочного парка можно. Но вот с чернилами, вопрос. И как их прыскать и дозировать на высоких скоростях. Пьезоэлементы доступны, излучатели Ланжевена для УЗ ванн тоже, про управляющую электронику молчу - это одна из самых простых задач в этой области. Но если удастся - это будет настоящий переворот.
Еще есть печать отклонением струи чернил статическими пластинами, как в осциллографе. Но про нее давно не слышно.
Насчёт микронного сопла не знаю, но на hackaday есть довольно классная попытка изготовить печатающую голову струйный принтер на безе 3D принтера. Он печатает довольно крупными точками и использует специальный софт для предобработки. Как мысль идея на будущее мне очень нравится. В кратце, для прокачки чернил используется пьезо-элемент, а вместо дюз сопло 3D принтера. Решение рабочее, но надо подумать как формировать каплю стабильного размера и регулировать её размер.
Если обзавестись хотя бы 3D принтером, то можно попробовать.
Ну сопла для 3д принтеров начинаются где-то от 0.2 мм, что довольно многовато. Хотя есть и другие методики, кроме "плеваться через сопло от давления пьезоэлемента", например электростатическая пушка, принцип тот же что в ЭЛТ, только с чернилами, и можно использовать электростатические же "линзы", утончая струю в микроны. Довольно интересное направление, хоть скоростью и не блещет, но это можно компенсировать современными приводами, которые могут таскать головку чуть ли не на сверхзвуковых скоростях.
128 Кбайт RAM
Листочек A4 в разрешении 300 DPI в RGB-цвете - это 26 Мб. В разрешении 600 DPI они превращаются в 104 Мб, а 1200 DPI - почти в полгига.
В обчем, маловато будет. Если только как у очень low-end принтеров, либо рендерить на хосте и гнать изображение построчно, с риском, что хост вовремя не успеет, или гнать JPEG и аппаратно декодировать на принтере построчно прямо в печатающую головку.
вагон протоколов LPR/LPD, RAW Printing, IPP, SNMP и т.д.
Заметим, что все перечисленные протоколы - сетевые. У Вас сеть предусмотрена?
В каком виде приходит задание на печать?
В виде файла в одном из поддерживаемых принтером форматов.
Я вам могу ОЧЕНЬ сильно помочь с софтверной частью этого проекта, если вы смените процессор на что-то, способное запускать embedded Linux. И при условии, что весь проект будет open source.
PCL-принтера тоже часто не обладают памятью, достаточной для рендеринга всей страницы. Однако же справляются. Достаточно успевать рендерить со скоростью протяжки бумаги.
Ну это тот случай, когда рендерим на хосте и отправляем построчно.
Нет, "рендерим на хосте" - это GDI-принтера.
А PCL/PostScript-принтера рендерят самостоятельно.
Я не очень понимаю, как полноценный векторный PCL можно рендерить на устройстве, не располагая памятью на целую страничку.
Тут что-то одно из двух. Или используется растровое подмножество PCL с рендерингом на хосте (под рендерингом я понимаю преобразование из формата, которое отправило на печать приложение - например, PDF, JPEG или там TIFF в формат, который получит принтер) или используется подмножество PCL, которое является фактически обёрткой над JPEG. Опять же, с преобразованием на хосте.
PS-принтеры редко бывают совсем уж без памяти.
Не знаю достоверно как это происходит точно, но полагаю, что полосами. Пока одна полоса печатается, следующая рендерится. Предыдущие уже не нужны, можно занять это место новыми. Заодно можно (и нужно) запускать механизм раньше, не дожидаясь рендеринга всей страницы.
Например, вот - https://en.wikipedia.org/wiki/HP_LaserJet_4 . У них нет памяти на весь лист.
И это чувствовалось на практике - векторная графика и шрифты печатались без проблем, т.к. , а вот растр высокого разрешения мог и не влезть, выходил наполовину белый лист и отображалась ошибка.
Я не очень понимаю, как полноценный векторный PCL можно рендерить на устройстве, не располагая памятью на целую страничку.
Грубо говоря, PCL/PS/что-там-еще-было — это описание границ, внутри которых надо залить краску. Начинаем печатать. Сначала пробуем напечатать первую строку. Она состоит из физических точек. Проверяем, попадает ли первая точка хоть в одну зону, которую нужно залить. Если попадает, то печатаем ее. Проверяем вторую, третью и т. д., потом то же самое со второй физической строкой, потом — с третьей... Если делать кэш растра на всю страницу, то никакой памяти не хватит, а так векторное задание помещалось в один – два – четыре мегабайта памяти принтера.
128 Кбайт RAM
В обчем, маловато будет
При любой нехватке своей памяти можно воспользоваться внешней, например, писать в файл (если SD карта подключена), использовать внешнюю RAM (портов для периферии навалом), либо (если это возможно) не принимать весь лист сразу и отрабатывать его построчно. Автор статьи про реверс инжениринг HP123 использовал ESP32, у которой, вроде 8 Кб RAM, возможно разные версии имеют разное количество - у меня не было возможности с ними работать. изначально я вообще планировал использовать SMT32F103C8 (20 Кб RAM, 64 Кб Flash), но, для большей уверенности, решил взять что-то побольше.
Заметим, что все перечисленные протоколы - сетевые. У Вас сеть предусмотрена?
Протоколы сетевые, это то на что я натыкался при вопросе : как передать задание на печать принтеру? Сеть будет в далёком будущем (далеко не в первую очередь). Пока что главное решить две задачи:
Понять как управлять картриджами и написать соответствующий код - банально разобраться как запускать нужные дюзы
Перед работой с сетью хочется наладить банальную работу по проводу. Существует бесконечное количество статей про реализацию принт-серверов, но ни одного про то как реализуется USB Printer Device Class. Иными словами, в интернете всем интересно управлять принтерами, а не создавать принтеры
Сеть можно организовать на той же ESP32 или на любом одноплатнике в режиме хоста.
В виде файла в одном из поддерживаемых принтером форматов.
Вот в этом у меня пока нет уверенности, возможно это справедливо для принт-серверов. В спецификации SB Printer Device Class упоминается PDL и PCL. Насколько я понимаю, это некий стандарт для передачи задания на печать.
Я вам могу ОЧЕНЬ сильно помочь с софтверной частью этого проекта, если вы смените процессор на что-то, способное запускать embedded Linux. И при условии, что весь проект будет open source.
Спасибо за отзывчивость! :) Но для вашей задумки нужно что-то ближе к Raspberry PI, мне кажется это слишком жирно и по производительности и по цене. Хочется остаться в рамках дешёвого Embedded решения на STM32. Этот проект собирается быть open source, возможно только поменяет название.
В спецификации SB Printer Device Class упоминается PDL и PCL
PDL - это page description language. Т.е., язык описания страниц, в общем смысле. Он может быть PCL, PostScipt, PDF, pwg-raster, ...
У принтера есть IEEE 1284 ID. Это такая строка, которую можно спросить у USB-принтера. В ней, помимо всего прочего, содержится перечисление PDL-ей, которые поддерживает данный принтер.
Ну или legacy driver может узнать, что ему нужно (в т.ч., список поддерживаемых PDL-ей) из PPD-файла.
Я не знаю в точности, как в общем случае на не-IPP принтер передаётся метаинформация, типа включения/выключения дуплексной печати. В случае IPP-принтера, эта информация передаётся не в документе, а в запросе на печать.
Спасибо за отзывчивость! :) Но для вашей задумки нужно что-то ближе к Raspberry PI, мне кажется это слишком жирно и по производительности и по цене
Мне было бы интересно поучаствовать в проекте создания опенсорсной прошивки для железного принтера. Но полнофункциональной прошивки - с IPP 2.x для печати, eSCL для сканирования, IPP over USB для USB-подключения и всякое такое.
У меня есть для этого хозяйства заготовка, там уже много чего реализовано. Но она на Go, так что на STM-ке вряд ли запустишь...
но ни одного про то как реализуется USB Printer Device Class
Забыл сказать. В линуксном ядре есть поддержка USB gadget (это когда не USB host, а, наоборот, умное устройство с линухом внутри, втыкаемое в USB), и там есть пример реализации USB Printer Class.
Не знаю уж, чего он потом с принятыми документами делает, это уже очень аппаратно-зависимо, потому, что действительно, должно завершиться в конечном итоге дёрганьем дюз. Но в общем, можно туда посмотреть, в качестве отправной точки.
но ни одного про то как реализуется USB Printer Device Class
Возможно слишком громко сказано. Я находил реализацию от STM в AzureRTOS (которая включена пакетом в CubeMX) и уже думаю как можно перенести это в свою программу.
В линуксном ядре есть поддержка USB gadget
Я далёк от кода ядра линукса, но имеет смысл посмотреть, спасибо! Это пригодится если всё таки STM32 окажется мало
Честно говоря, целеполагание проекта осталось мною непонятым. С какими именно проблемами предполагается бороться?
Лично я сталкивался только с недостатками драйверов. Да и то, большинство из них ушли в прошлое. А драйвера в статье даже не упоминаются.
В основном это что-то из разряда:
"хочу узнать как работает"
"хочется пустить свои навыки в полезное русло"
"хочется немного подкачать знания"
Всё это с катализатор в виде проблемы с принтером натолкнули на проект, который мог бы заключаться в написании ПО и какой-то минимальной электрической схемы, которую любой желающий может попытаться повторить сам. Увы, но всё ОП для принтеров закрыто и нельзя подобраться ни к профилям печати, ни к адекватной работе с картриджами (моя наболевшая проблема), ни к тонкой подстройке скорости печати, ни к любой другой кастомизации под свои условия. Возможно производственные решения дают больше, но вопрос цены заставит понервничать. Иными словами, доступ к ПО такого принтера, как, например, HP Deskjet 2630:
глючит и приводит к проблемам на ровном месте
не имеет никакой возможности подстройки
не имеет никакой возможности расширения
Да, в целом, пользователю это практически никогда не нужно, но я не тот случай. Мне хочется иметь больше контроля над процессом работы моего принтера и больше понимания того что именно происходит. Возможно я бы хотел передать принтер для печати страниц А3, но уже зашитые в память ПО профили бумаги просто не позволят.
В итоге цель проекта может быть описана как: "Сделать нечто полезное и интересное для DIY сообщества"
Лично я сталкивался только с недостатками драйверов. Да и то, большинство из них ушли в прошлое. А драйвера в статье даже не упоминаются.
Это тоже решаемая задача с open source проектом, если действительно будет необходимость писать их (если я правильно понимаю, речь про ПК драйверы). Данная статья скорее вступление к целому циклу статей по разработке моего проекта, так что говорить о драйверах ещё рано и для меня это непаханное поле и пока всё таки главная проблема это управление дюзами печатающей головы.
Идея неплохая для послойной 3д печати.
А книги печатать на струйнике странная затея. Все еще доступны всякие hp1100, картриджи к которым стоят какие-то копейки, да и сами они недорогие. Да, есть какие-то грабли с дровами, но проходимые.
3D печать, на поверхностный взгляд, довольно простая вещь. Слайсер для подготовки g-code может быть куда более затейлевым. hp1100 печатает только чёрным. Мой HP Deskjet 2630 тоже недорогой, но может решать гораздо больше задач.
Дело даже не в печати книг на струйнике, сколько в постоянно возникающих проблемах и отсутствия open source проектов в части бумажной печати
Совершенно не понимаю зачем книги разноцветным печатать. Там же буковы. Ониж черным наиболее удачно получаются. Читать удобнее гораздо. А художественные альбомы и каталоги выставок увы печатать не из чего, нет исходников доступных.
Наличии любого опенсорса лучше отсутствия, но может всё-таки на лазерники перейти ? Они потихоньку заканчиваются, а современные такое же пропиетарное г, как струйники.
Цветные иллюстрации и цветные обложки.
Текст чисто чёрным выходит лучше, но принтер часто подкручивает что-то и примешивает ещё и цветные (замечал снижение качества когда забивались цветные дюзы да в чёрно-белом режиме). Но иногда хочется заморочиться с красивой вёрсткой страниц или обложки. Не стоит забывать что принтер нужен не только для печати книг, а заводить под каждую задачу отдельный не хватит ни места, ни денег.
У лазерного принтера есть несколько существенных плюсов: они не засыхают как струйные, космическая скорость печати по сравнению со струйником. Однако, они сложнее устроены и зачастую не имеют возможности дозаправки.
Последний раз, когда открывал CLion видел в нём поддержку Stm23CubeMX проектов. Не пробовали?
Да, в CLion, вроде, даже была возможность создавать (или открывать) проект через .ioc файлы и требует установки нескольких программ типа CubeMX, Cube CLI и т.д. Я пробовал им воспользоваться на работе (это было одно из пожеланий заказчика) - но не зашло. У JetBrains очень удобные IDE, но я от них уже отвык. Думаю что при правильной структуре проекта можно параллельно вести разработку в чём угодно. В этом немного и помогает CMake:
можно сконфигурировать проект под любую IDE
можно быстро собирать без IDE, что помогло мне настроить CI/CD
Ну и я стараюсь использовать инструменты, которые могут быть подхвачены любой IDE и, теоретически, любой ОС. Речь про ARM GNU Toolchain и OpenOCD (к нему у меня есть претензия в лице неработающего из коробки SWO для ST-Link).
Имел неудачный опыт аналогичной затеи (но коммерческой), лет 10 назад (так что все высказывания обязательно сначала проверить на актуальность), речь не про Ваш принтер и Ваши головки.
Попробую вкратце описать нюансы и самые большие мои ошибки, может быть поможет скипнуть пару лет мучений:
1. Не стоит что-то делать из "домашних" печатных головок (бюджетные принтеры) - пока проект дойдёт хотя бы до альфа версии: принтер снимут с продажи (хоть головки подходят зачастую сразу к нескольким принтерам, но искать целенаправленно такие нужно)/чутка изменят протокол (так называемые "кодировки" в том числе, привет DX5)/трудно достать. Короче, Canon, Epson, HP и т.п. сразу мимо. И ещё - головка может общаться с чипами на картриджах для выявления "оригинальности" их.
Рекомендую попробовать головки XAAR - на них можно найти спецификации/распиновки и т.д., но стоят на порядок! дороже. Б/У не рекомендую брать на первых порах.
2. Не пытаться "распарсить" протокол современных головок - супер сложно, дорого и, к тому же, специально "кодируются" данные.
3. "Микроконтроллер"`а не хватит производительности, имхо от 400 МГц и выше. В идеале FPGA, но достаточно сложно для первого раза. Поэтому очень большой объём памяти нужен (сотни Мб?) и просчитывать всё заранее на "линию", точнее да же на 3-10 (в зависимости от количества дюз, желаемого разрешения печати). Просто взять и "вывести" линию без учёта предыдущих/следующих будет лажа по итогу.
3.1. Тайминги и фронты сигналов! Они очень жёсткие. По-моему DMA каналов на stm32 Вам не хватит (точнее, вероятно только на один цвет), и вроде на ней они не могут одновременно передавать, а нужно будет.
4. Основная проблема: напечатать одноцветный текст относительно легко, напечатать фото хотя бы 300DPI - мега сложно. Расчёты как поведёт себя "капля" при растекании, как смешается с остальными (кроющая способность у разных цветов разная, и не всегда нужно сначала грубо говоря капнуть пурпурной, потом жёлтой - иногда наоборот) и куда она упадёт (увы, не X==, а X~=) с учётом движения головки мне так и не дались. Когда добавилось ещё и капля переменного размера, тут всё, лапки к верху.
5. Обзаведитесь микроскопом - когда научитесь управлять дюзами по отдельности можно будет увидеть что не туда летят.
6. Не пытайтесь сразу получить картинку с ПК и т.п., начните с печати линий, простых паттернов, финал - окружность с плавными границами, переходите в цвет - градиент по двум цветам, потом трём. И не пытайтесь сразу в двунаправленную печать, как и менять скорость перемещения головки - всё "уплывёт". Нужно выводить некоторые "формулы" если можно так назвать.
Софт, цветовые профили, РИП, вот это вот всё после - так как после печати градиентов уже будет понимание про дизеринг, плотности точек, перекрытие, отчего понять будет сильно проще что зачем. Исходники WinGP в помощь.
7. Сжечь дюзы достаточно просто на первых порах, запаситесь запасными головками =)
8. Успехов!
Большое спасибо! Вы дали очень много ценной информации к которой я буду часто возвращаться. Мне еще предстоит многое изучить и найти правильный подход к управлению. Немного добавлю своих пояснений на некоторые моменты и (возможно) рассуждений
Canon, Epson, HP и т.п. сразу мимо. И ещё - головка может общаться с чипами на картриджах для выявления "оригинальности" их.
Возможно, я думал в эту сторону и это может стать главным блокирующим фактором. HP123 выбрались сами собой т.к. они у меня просто напросто стоят в принтере и у меня есть пара про запас. Но пара работ в сети убедили меня что для HP123 можно не переживать.
Рекомендую попробовать головки XAAR - на них можно найти спецификации/распиновки и т.д., но стоят на порядок! дороже
Они больше подходят для промышленного плоттера, чем для домашнего принтера. Мысль хорошая, но пока что дороговато для проекта на коленке. Меня всё ещё не покидает мысль сделать возможность подключения разных голов, но это уж очень далёкое будущее и пока это не первостепенная задача.
Не пытаться "распарсить" протокол современных головок - супер сложно, дорого и, к тому же, специально "кодируются" данные
Если бы я не наткнулся на почти готовые проекты, то даже не стал бы пытаться - я не прожжённый эмбеддер и задача для меня была бы неподъёмной
"Микроконтроллер"`а не хватит производительности
В крайнем случае, я вынесу в микроконтроллер только управление одной головкой
По-моему DMA каналов на stm32 Вам не хватит (точнее, вероятно только на один цвет), и вроде на ней они не могут одновременно передавать, а нужно будет.
Нужно что-то порядка 15 контактов для управления HP123, насколько понял одна половина нужна для тактирования (работают по 9В), а вторая половина уже нужна непосредственно формирования капли (16В). Мой контроллер (STM32F411RETx) поддерживает до 16 каналов DMA (если не ошибаюсь), часть из которых уже занята передачей по SPI и UART для отладки.
Основная проблема: напечатать одноцветный текст относительно легко, напечатать фото хотя бы 300DPI - мега сложно
Расчёты как поведёт себя "капля" при растекании, как смешается с остальными
Где-то натыкался на мысль что печатное дело является одной из самых технологически сложных отраслей. Буду есть слона по кусочкам - сначала необходимо научиться дёргать правильные пины чтобы стабильно иметь каплю без учета тонкостей формирования даже если это будет одна дюза:) это пункт 0 для моего проекта - без него я не смогу считать проект потенциально возможным
Не пытайтесь сразу получить картинку с ПК и т.п., начните с печати линий, простых паттернов
Таков и был мой план, это пункт 1 для того чтобы назвать проект возможным для меня. Возможно, в будущем я сформирую цели и план движения к ним в отдельную статью.
куда она упадёт (увы, не X==, а X~=) с учётом движения головки мне так и не дались. Когда добавилось ещё и капля переменного размера, тут всё, лапки к верху.
Кажется придётся вспоминать курс ТАУ и строить мат модели, возможно на эту тему есть научные статьи - я не изучал этот вопрос, видел только пару патентов на принцип работы печатающих головок, которые не давали никакой полезной информации. Весь пункт 6 говорит что процесс исследования сильно затянется. Честно говоря, в начале я надеялся что можно будет доработать практически готовый проект, но вопрос оказался сложнее и в нём пришлось захотелось разобраться.
Когда я делился своей идеей с коллегами по работе, то пошутил что нашёл себе занятие лет на 10 вперёд. Сама затея является воплощением поговорки: "Больная голова рукам покоя не даёт" - и даже не уверен что задача подъёмная для пет-проекта в свободное время в разумные сроки (хорошо что я никуда не тороплюсь).
Сжечь дюзы достаточно просто на первых порах, запаситесь запасными головками =)
С учетом принципа работы и что я буду использовать мосфеты (об этом писал человек работавший HP123), согласен. Насколько понял, в HP123 около дюзы нагревается резистор (который потребляет до 2.5А на один вход картриджа), который создаёт пузырь, толкающий чернила из дюз при расширении и втягивает новую порцию при уменьшении. Меня этот факт немного ввёл в ступор и я сначала не поверил, но это же насос абсолютно без подвижных деталей :D
Нужно не только не спалить сам резистор, так ещё и подобрать правильные параметры ШИМ не только для формирования капли и прокачки чернил, но еще и не перегреть голову при этом и не попасть в ситуацию когда пузырь превратится в воздушную пробку (не знаю всей конструкции, но думаю что это возможно при слишком большом расширении пузыря).
Да незачто особо.
Они больше подходят для промышленного плоттера, чем для домашнего принтера.
Да, Xaar это профессиональные/промышленные. Но если уж делать DIY принтер, то почти по-полной =) Дальше хотя бы есть перспектива коммерциализации. Мы ориентировались именно на профессиональные принтеры на Epson головках, но отказались в пользу Xaar. А до механики не дошли и Вам не рекомендую сразу и механику делать.
Насчёт "разных" есть вероятность, но каждую (за Epson только скажу) придётся подпиливать, хоть и "протокол" очень похож, но выяснение всего - тяжко.
Насколько понял, в HP123 около дюзы нагревается резистор
У HP термоэлектрическая печать, у Epson пьезоэлектрическая. Мы дюзы сжигали просто чрезмерной продолжительностью и интенсивностью "печати" (грубо говоря слишком долго "лили" из неё).
В целом то задача вполне подъёмная, да же для одиночки.
Кажется, вырисовывается совершенный способ печатать рисунок фотошаблонов печатных плат без зазоров между точками и нужды в разных "уплотнителях рисунка"?! Или даже сразу на самих печатных платах? Напечатал - и бросил в травление
Почему бы и нет? Это вполне возможно, а ещё я находил способы переделать обычный принтер в планшетный для печати шаблонов плат прямо на медной стороне текстолита, но не изучал этот вопрос подробно (хотя тоже иногда изготавливаю дома платы фоторезистом) и, к сожалению, не сохранил ссылки на ресурсы.
Могу предположить что не каждые чернила прилипнут к меди и придется долго и мучительно подбирать состав с подходящей адгезией и не растворяющийся в химикатах для травления. Возможно наилучшее решение использовать картридж от лазерного принтера в качестве базы, он, по сути, запекает пластик на печатающей поверхности, а суть чернил заключается в проникновении в слои бумаги для закрепления. Этакий ЛУТ версия 2.0 без утюга и ламинатора получается.
При должной точности печати можно даже делать несколько проходов для уплотнения рисунка (если чернила не растекутся).
Для печатных плат субтрактивные технологии уже есть, а также проекты, повышающие скорость работы - HLDI - скоростная засветка фоторезиста лазером. Я пробовал делать платы, покрывая текстолит краской, а затем выжигая ее в нужных местах - ну, тоже рабочая технология, хоть и довольно медленная.
Выжигали лазером? Каким софтом готовили g-code?
FlatCam. Лазер "20 вт китайских", но мощи особо не нужно, ставил лазер "3 вт" китайских - на полную мощность, вполне работает. Там больше по краске приколы, использовал запекаемую эпоксидную краску. Из баллончика и цапонлак - это все баловство. Нет, лазер все выжгет, но при травлении потом чтоб не отвалилось - это надо постараться.
FlatCam
Спасибо!
Жалуются что он не развивается. Погуглил это слово и нашёл более современный аналог: https://github.com/u-fire/kicnc
Откопал переделку принтера для печати плат: https://med.comp-lenta.ru/struynaya-golovka-svoimi-rukami/?ysclid=mflfo6wxsn856260134
Я как раз автор PrintSpider_Arduino и этого проекта на hackaday.
Этот проект у меня лежит не доделанный в столе.


Видео рабочего прототипа
Где-то потерял видео с кривой надписью HELLO WORLD.
Последнее на чем я остановился:
В целом все это как-то работало с ПО от SpriteTM. Здесь PrintSpiderLib какие-то баги которые до конца не отладил.
Направление по управлению из Arduino даже не стал дальше копать, так как она слишком медленная и не обеспечивает нужных таймингов по выдаче управляющих сигналов. Выше писали про жесткие тайминги. Думаю, что затея бесперспективная.
В схеме PCB здесь есть баги в защитном механизме который должен отсекать сигнал на нагрев сопел(выплевывание чернил), поэтому эта штука нещадно палит сопла на картридже и дольше пары тройки тестов сами картриджи не живут. Как раз про пузырь и перегрев это оно. Это основная проблема на которой застрял в последний подход.
Плюсуем сюда мою криворукость в паяльном деле + не доступность с определенного времени китайских площадок по выпуску дешевых эксперементальных плат. Из-за этого переключился на другие задачи.
В итоге пока этот проект лежит на полке и ждет своего времени.
У меня куча дубликатов самих готовых плат, но с указанными багами. Если есть интерес могу поделиться. В коллаборации даже поучаствовать в доработке.
Приятно познакомиться с товарищем по несчастью!) И поблагодарить за труды - меня натолкнуло на мысль продолжить.
Я пробовал запустить проект для Arduino. Но столкнулся с проблемой: код не помещался во память. Я это устранил, но встрял с тем что программа ни то ли зависала, то ли не запускалась, либо моей Arduino UNO пора на покой (что может быть вероятно, т.к. даже Arduino IDE не всегда шьёт).
Здесь PrintSpiderLib какие-то баги которые до конца не отладил.
Отладка Arudino дело неблагодарное.
Направление по управлению из Arduino даже не стал дальше копать
Adruino в целом плохо подходит для сложных задач управления, а тут понадобится контроль скорости, положения + формирование капли. Если подозрения что моя STM32F411RET6 тоже может не вытянуть два картриджа сразу, а я уже навешал дополнительной периферии чтобы и руку набить в STM32 и без дела не сидеть пока транзисторы едут.
не доступность с определенного времени китайских площадок по выпуску дешевых эксперементальных плат
Как раз это остановило от попыток повторить проект на EPS32 для изучения под лупой, а изготовить двустороннюю плату дома пока слабо. В попытках перерисовать понял что она получится либо будет двусторонней, либо оно того не стоит.
В схеме PCB здесь есть баги в защитном механизме который должен отсекать сигнал на нагрев сопел(выплевывание чернил)

Вы говорите об этом участке.
spritesmods тоже писал про импульсы кратные 10 мкс и это защита на случай зависания. Возможно получится соблюсти более жёсткие тайминги с STM32, вроде, можно настроить на ШИМ 200 КГц (даташит говорит про лимит в 100 МГц для GPIO, но у меня SYSCLK 48 МГц + кроме этого сигнала есть и другие задачи) и этот участок останется только крайней мерой. Возможно есть более надёжный способ ограничения длительности импульса.
У меня куча дубликатов самих готовых плат, но с указанными багами. Если есть интерес могу поделиться
Буду очень благодарен! Расходы на доставку, естественно, на мне - можем связаться через диалоги в хабре.
В коллаборации даже поучаствовать в доработке
Буду только рад, но пока толком участвовать не в чем. Я создал репозиторий, но я не описал ни общий стиль кода (не говоря о документации), ни архитектуру (то что есть в коде пока только уверенный набросок), и пока просто измываюсь над периферией дабы немного набить руку в работе с STM32 и упростить себе жизнь в будущем. На днях подключал шаговики, пока без управления, скорее проверить работоспособности в целом. Из серьёзного на повестке анализ USB Printer Class в AzureRTOS (+ народ в комментариях накидал куда ещё можно посмотреть) и попытка как-то интегрировать его в проект, была идея зайти со стороны UMC и реализовать из вместе, но пока не уверен, возможно CubeMX будет затирать изменения, а мне этого не надо.
Работу с самой головой ещё не начал разбирать, чуть позже будет немного больше возможностей для этого
Вы говорите об этом участке.spritesmods тоже писал про импульсы кратные 10 мкс и это защита на случай зависания.
Как раз с импульсами от контроллера все хорошо, а вот схема которая конвертит в нужное напряжение отрабатывает не очень хорошо, писал про это здесь.
Даже при корректных импульсах от МК, выходные F3, F5 сигналы растягиваются в >2200мкс.

Явно что-то не так с железом.
На днях подключал шаговики, пока без управления, скорее проверить работоспособности в целом.
Здесь думаю стоит взять како-то открытый проект готового протяжного плоттера и модифицировать его - иначе можно уйти надолго еще в эту тему.
Работу с самой головой ещё не начал разбирать, чуть позже будет немного больше возможностей для этого
Как раз это думаю, что это должен быть первый шаг. Без этого не на чем будет строить все остальное.
Я по началу тоже целился в opensource принтер, но как начал изучать тему понял, что это слишком долго и сосредоточился на более узком модуле для управления картиджем в качестве первого шага.
Буду очень благодарен! Расходы на доставку, естественно, на мне - можем связаться через диалоги в хабре.
Я покопаю в ближайшие дни, что у меня есть из более-менее стабильного и напишу.
Как раз с импульсами от контроллера все хорошо, а вот схема которая конвертит в нужное напряжение отрабатывает не очень хорошо, писал про это здесь.
Я бы попробовал включение одного транзистора в ключевом режиме. А дабы не мучаться на первых порах с развязкой, взять готовые модули. Я планировал использовать их и для преобразования уровней, что довольно жирно для логики, но зато надёжно.
Здесь думаю стоит взять како-то открытый проект готового протяжного плоттера и модифицировать его - иначе можно уйти надолго еще в эту тему.
Согласен, по подаче бумаги точно стоит посмотреть схемы и алгоритмы. Многие часто берут 3D принтер за основу или лазерный станок и кладут бумагу на рабочую поверхность. Мне пока что рулонная подача кажется самой простой с инженерной точки зрения. В классической подаче придётся бороться с замятием бумаги, затягиванием нескольких листов, сохранением угла и направления. И это только то что лежит на поверхности.
Как раз это думаю, что это должен быть первый шаг. Без этого не на чем будет строить все остальное
Это чертовски правильная мысль, особенно в коммерческой разработке, но с пет-проектом нужно можно позволить себе немного ветра в голове. Если взяться сразу за сложную задачу и не чередовать её с простыми, то можно разочароваться, потерять интерес и забросить проект. Т.к. я построил в голове глобальную и наивную карту того что я хочу видеть в проекте и как его можно расширять надо было хотя бы поверхностно разобраться RTOS и STM32 - без этого даже начинать смысла нет, ну и мне пока было нечего делать по решению главных проблем, так что я взялся за второстепенные.
А дабы не мучаться на первых порах с развязкой, взять готовые модули.
Дополнительно про эти модули. Посмотрел спецификацию по ним вроде ок, но есть еще одна деталь которую в спецификациях не всегда найдешь явно, а надо смотреть на графики в спецификациях. Это effective switching frequency - и это надо учитывать при подборе, правда не помню как это точно делать.
PS Нашел наконец в своих завалах готовые модули.

Схема для v1.3.

Схема для v2.0 - похоже очень кривая.

Как раз это остановило от попыток повторить проект на EPS32 для изучения под лупой
Через Aliexpress знаю, что можно это заказывать сейчас по вполне приемлемым ценам.
Снимаю шляпу перед автором. Вы очень круты, но чисто физически объем работы требует усилий команды, а не одного человека. Советую сразу организовывать это как общедоступный проект и активно привлекать единомышленников.
Замечательный проект! С моей точки зрения совершенно необходим для печати на плате и травления после. Можно использовать промышленные картриджи с краской УФ отверждения. И промстандарт реже меняется, и водостойкое, и лежит хорошо на разных материалах. А транспорт - да, от плоттера, лазерного гравера, чтоб хоть этим не заморачиваться. А печать на бумаге - для интереса только (если что - это достойный аргумент), и проблемы с транспортом.
совершенно необходим для печати на плате и травления после
Мне бы тоже этого хотелось! Я видел проект, где для печати плат приспосабливали старенький принтер. Промышленные печатающие головы хорошая идея, но стоят они дорого, всё таки хочется чтобы кто-то потом смог воспроизвести проект (если он дойдёт до логического завершения).
Давным-давно отец показал мне ЛУТ, а пару лет назад я перешёл на фоторезист (т.к. только он был самым доступным со струйным принтерами, а лазерного у меня нет). Лично у меня не всегда хорошо получалось переносить с их помощью сложные платы с тонкими дорожками и крошечными пятачками (всегда надо править шаблон), хотя видел как это делают другие.
промышленные картриджи с краской УФ отверждения
Где-то я встречал обычные чернила (т.е. без УФ), которые могут хорошо держаться на меди и спокойно выдержать процесс травления. Источник, к сожалению, не сохранился. Подозреваю что с этим могут хорошо справиться лазерные принтеры.
Мысль превратить принтер в печатный станок для плат вполне реализуема если проект дойдёт до релиза (я держал это в уме). Я рассматриваю это как форк или пару флагов компиляции. По сути, это планшетный принтер.
Если такой способ изготовления плат окажется не хуже и выгоднее чем на том же фрезерном станке и лучше или на уровне с ЛУТ и фоторезистом, то я, однозначно, хочу такой принтер для домашних поделок.
А транспорт - да, от плоттера, лазерного гравера, чтоб хоть этим не заморачиваться
Находил такое: используют базу от 3D принтера или гравера.
А печать на бумаге - для интереса только
Не совсем согласен. Печать на бумаге всё таки более востребована в массе. И, так получилось, она сложнее реализуется. Можно с относительной лёгкостью сделать простой CNC на базе GCODE (интернет ими пестрит), но вот получить полноценную печать на его базе сложно (если не невозможно) - видел что-то похожее на матричную печать на базе 3D принтера и картриджа от советского (?) принтера. Задумка хорошая, но для фотографий и рисунков не очень годится, не говоря о том что для CNC всегда нужен специализированный софт. Моя задумка сделать принтер (работает как принтер, все узнают в нём принтер и т.д.), а как это использовать и переделать народ справиться сам)
DIY Open Source принтер. Часть 0