На подобные слова я и рассчитывал, когда писал это).
Я слышал о проблемах с таймингами при доступе к памяти (как RAM, так и Flash) и видел на работе как периферия начинает чудить при повышении частот (но один опытный человек быстро привел всё в норму), а могла даже не запускаться. Это настораживает, но я попробую разогнаться когда у меня появится кварц в 24 МГц (текущие 8 считаю не очень надёжными). Где-то в районе написания части 0, я, интереса ради, пробовал установить SYSCLK в 96 МГц, но они выводились из максимально неудобных 25 МГц или от внутреннего источника. В итоге контроллер не всегда проходил инициализацию :D
Если полученные тайминги действительно следствие оверхеда прерываний (а не, например, приоритета), то надо повышать производительность в 1.5-2 раза, т.к. оптимизировать бесконечно у меня не выйдет, единственным выходом остаётся повышение частот. Где-то в даташите должны быть описаны тонкости при повышении частот.
на коленке сбацанного рефлектометра
Это та штука, которая подключается к спутниковой тарелке чтобы найти спутник?
У STM32 старших моделей (например, линейки STM32F4), кстати, есть встроенный с завода USB MSC бутлоадер
Не знал, посмотрю как дойдёт дело. В плане логики работы загрузчика пока в голове три варианта:
Хранить дамп старой и новой прошивки в энергонезависимой памяти снаружи (например, SD карта, EEPROM, внешняя flash) и перешивать область основной прошивки по необходимости (с соблюдением каких-то условий). Так обновление разделится на 2 этапа - загрузка новой прошивки и непосредственно перезапись flash
Иметь двойной буфер во flash для основной прошивки. При глюках новой прошивки будет возможность запустить старую без перепрошивки контроллера лёгким движением руки, но я пока не уверен что мне хватит памяти на такое. Самое главное, так можно сдеать бутлоадер потоком внутри RTOS, а не отдельной программой со своим местом внутри flash
Прошивка так прошивка. Останавливаем основную прошивку и переключаемся на бутлоадер при прошивке. Перешивается область памяти где лежит основная прошивка.
Сейчас я использую Nucleo - у неё есть ST-Link с возможностью подключения как MSC к ПК и на неё можно сбросить новый файл прошивки, который при каких-то условиях загрузится во flash подключённого к ST-Link контроллеру. В принципе, в этом плане можно ничего не менять, разве что объединить 2 USB в один через хаб, но это уже звучить как излишняя заморочка.
Я ещё изучу этот вопрос, для меня это пока не изученная тема.
Composite device потом ещё попробую. Моё внимание привлёк не столько HID, сколько Image, MSC. Хочется сразу иметь доступ хотябы к логам на SD карте, возможно отдавать задание на печать (что потребует рендера на устройстве, но вполне можно и RAW отправить). Ну а через Image можно сканер попробовать завести.
Ещё, возможно, имеет смысл познакомиться с Download Firmware Update, насколько понял, его можно использовать для обновления прошивки, но надо будет заиметь минимальный бутлодер для запуска и обновления этой самой прошивки (двойной буфер?).
Да, по факту, никто не мешает использовать любую понравившуюся комбинацию vid:pid.
большая часть принтеров начинают определяться полноценно только после установки драйвера, который прописывает vid:pid
Так работает почти всё что подключается к Windows. Честно говоря, я туда пока не погружался - полезу и буду пытаться писать свой драйвер когда заработает печатающая голова (уже в процессе).
У меня сложилось впечатление что Windows смотрит на класс устройства и представляет стандартный драйвер. Однако, если есть специальный драйвер для какой-то комбинации vid:pid, то подхватываться будет он.
можно как-то намекнуть, что ваше устройство втыкается в порт вот примерно такой формы.
Можно написать свой inf файл, в котором указываетсч какой драйвер должен использоваться для конкретного устройства и принципе описывается что это за устройство. Это будет иметь смысл только если комбинация vid:pid действительно уникальна. Уникальность обеспечивается наличием официально зарегистрированных vid:pid и подписей у драйвера и т.е. наличием организации, которая выдаёт vid (какой дали, с таким и живёшь) и через которую, вроде, можно (а может и не нужно) зарегистрировать pid (производитель выбирает сам для своих устройств).
В процессе разработки демо vid:pid более чем достаточно. Меня совершенно никак не коробит использовать левый vid:pid в релизе (вдруг он случится - можно помечтать) и драйвер, на который будет ругаться ОС т.к. это моё устройство и я знаю что это такое и что оно делает. Других пользователей подобное может напугать, да и выглядит не очень профессионально ;)
Надо будет озадачиться поисками, я слышал что на Aliexpess можно заказать плату, но обходил его стороной в этом вопросе. Я был удивлён что в моём городе на avito (и других сервисах) не нашлось ни одного человека с ЧПУ фрезером, который бы этим занимался
Как раз с импульсами от контроллера все хорошо, а вот схема которая конвертит в нужное напряжение отрабатывает не очень хорошо, писал про это здесь.
Я бы попробовал включение одного транзистора в ключевом режиме. А дабы не мучаться на первых порах с развязкой, взять готовые модули. Я планировал использовать их и для преобразования уровней, что довольно жирно для логики, но зато надёжно.
Здесь думаю стоит взять како-то открытый проект готового протяжного плоттера и модифицировать его - иначе можно уйти надолго еще в эту тему.
Согласен, по подаче бумаги точно стоит посмотреть схемы и алгоритмы. Многие часто берут 3D принтер за основу или лазерный станок и кладут бумагу на рабочую поверхность. Мне пока что рулонная подача кажется самой простой с инженерной точки зрения. В классической подаче придётся бороться с замятием бумаги, затягиванием нескольких листов, сохранением угла и направления. И это только то что лежит на поверхности.
Как раз это думаю, что это должен быть первый шаг. Без этого не на чем будет строить все остальное
Это чертовски правильная мысль, особенно в коммерческой разработке, но с пет-проектом нужно можно позволить себе немного ветра в голове. Если взяться сразу за сложную задачу и не чередовать её с простыми, то можно разочароваться, потерять интерес и забросить проект. Т.к. я построил в голове глобальную и наивную карту того что я хочу видеть в проекте и как его можно расширять надо было хотя бы поверхностно разобраться RTOS и STM32 - без этого даже начинать смысла нет, ну и мне пока было нечего делать по решению главных проблем, так что я взялся за второстепенные.
Насчёт микронного сопла не знаю, но на hackaday есть довольно классная попытка изготовить печатающую голову струйный принтер на безе 3D принтера. Он печатает довольно крупными точками и использует специальный софт для предобработки. Как мысль идея на будущее мне очень нравится. В кратце, для прокачки чернил используется пьезо-элемент, а вместо дюз сопло 3D принтера. Решение рабочее, но надо подумать как формировать каплю стабильного размера и регулировать её размер. Если обзавестись хотя бы 3D принтером, то можно попробовать.
Приятно познакомиться с товарищем по несчастью!) И поблагодарить за труды - меня натолкнуло на мысль продолжить. Я пробовал запустить проект для 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 будет затирать изменения, а мне этого не надо.
Работу с самой головой ещё не начал разбирать, чуть позже будет немного больше возможностей для этого
Можно, но, на мой взгляд, технически сложно изготовить в домашних условиях что-то хорошо работающее. Формирование правильной капли даже с готовыми головами непростой процесс, а с самодельной он умножится ещё и на сильно плавающую погрешности изготовления
Текст чисто чёрным выходит лучше, но принтер часто подкручивает что-то и примешивает ещё и цветные (замечал снижение качества когда забивались цветные дюзы да в чёрно-белом режиме). Но иногда хочется заморочиться с красивой вёрсткой страниц или обложки. Не стоит забывать что принтер нужен не только для печати книг, а заводить под каждую задачу отдельный не хватит ни места, ни денег.
У лазерного принтера есть несколько существенных плюсов: они не засыхают как струйные, космическая скорость печати по сравнению со струйником. Однако, они сложнее устроены и зачастую не имеют возможности дозаправки.
Почему бы и нет? Это вполне возможно, а ещё я находил способы переделать обычный принтер в планшетный для печати шаблонов плат прямо на медной стороне текстолита, но не изучал этот вопрос подробно (хотя тоже иногда изготавливаю дома платы фоторезистом) и, к сожалению, не сохранил ссылки на ресурсы.
Могу предположить что не каждые чернила прилипнут к меди и придется долго и мучительно подбирать состав с подходящей адгезией и не растворяющийся в химикатах для травления. Возможно наилучшее решение использовать картридж от лазерного принтера в качестве базы, он, по сути, запекает пластик на печатающей поверхности, а суть чернил заключается в проникновении в слои бумаги для закрепления. Этакий ЛУТ версия 2.0 без утюга и ламинатора получается.
При должной точности печати можно даже делать несколько проходов для уплотнения рисунка (если чернила не растекутся).
но ни одного про то как реализуется USB Printer Device Class
Возможно слишком громко сказано. Я находил реализацию от STM в AzureRTOS (которая включена пакетом в CubeMX) и уже думаю как можно перенести это в свою программу.
В линуксном ядре есть поддержка USB gadget
Я далёк от кода ядра линукса, но имеет смысл посмотреть, спасибо! Это пригодится если всё таки STM32 окажется мало
Большое спасибо! Вы дали очень много ценной информации к которой я буду часто возвращаться. Мне еще предстоит многое изучить и найти правильный подход к управлению. Немного добавлю своих пояснений на некоторые моменты и (возможно) рассуждений
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
Нужно не только не спалить сам резистор, так ещё и подобрать правильные параметры ШИМ не только для формирования капли и прокачки чернил, но еще и не перегреть голову при этом и не попасть в ситуацию когда пузырь превратится в воздушную пробку (не знаю всей конструкции, но думаю что это возможно при слишком большом расширении пузыря).
Да, в CLion, вроде, даже была возможность создавать (или открывать) проект через .ioc файлы и требует установки нескольких программ типа CubeMX, Cube CLI и т.д. Я пробовал им воспользоваться на работе (это было одно из пожеланий заказчика) - но не зашло. У JetBrains очень удобные IDE, но я от них уже отвык. Думаю что при правильной структуре проекта можно параллельно вести разработку в чём угодно. В этом немного и помогает CMake:
можно сконфигурировать проект под любую IDE
можно быстро собирать без IDE, что помогло мне настроить CI/CD
Ну и я стараюсь использовать инструменты, которые могут быть подхвачены любой IDE и, теоретически, любой ОС. Речь про ARM GNU Toolchain и OpenOCD (к нему у меня есть претензия в лице неработающего из коробки SWO для ST-Link).
3D печать, на поверхностный взгляд, довольно простая вещь. Слайсер для подготовки g-code может быть куда более затейлевым. hp1100 печатает только чёрным. Мой HP Deskjet 2630 тоже недорогой, но может решать гораздо больше задач. Дело даже не в печати книг на струйнике, сколько в постоянно возникающих проблемах и отсутствия open source проектов в части бумажной печати
Всё это с катализатор в виде проблемы с принтером натолкнули на проект, который мог бы заключаться в написании ПО и какой-то минимальной электрической схемы, которую любой желающий может попытаться повторить сам. Увы, но всё ОП для принтеров закрыто и нельзя подобраться ни к профилям печати, ни к адекватной работе с картриджами (моя наболевшая проблема), ни к тонкой подстройке скорости печати, ни к любой другой кастомизации под свои условия. Возможно производственные решения дают больше, но вопрос цены заставит понервничать. Иными словами, доступ к ПО такого принтера, как, например, HP Deskjet 2630:
глючит и приводит к проблемам на ровном месте
не имеет никакой возможности подстройки
не имеет никакой возможности расширения
Да, в целом, пользователю это практически никогда не нужно, но я не тот случай. Мне хочется иметь больше контроля над процессом работы моего принтера и больше понимания того что именно происходит. Возможно я бы хотел передать принтер для печати страниц А3, но уже зашитые в память ПО профили бумаги просто не позволят.
В итоге цель проекта может быть описана как: "Сделать нечто полезное и интересное для DIY сообщества"
Лично я сталкивался только с недостатками драйверов. Да и то, большинство из них ушли в прошлое. А драйвера в статье даже не упоминаются.
Это тоже решаемая задача с open source проектом, если действительно будет необходимость писать их (если я правильно понимаю, речь про ПК драйверы). Данная статья скорее вступление к целому циклу статей по разработке моего проекта, так что говорить о драйверах ещё рано и для меня это непаханное поле и пока всё таки главная проблема это управление дюзами печатающей головы.
При любой нехватке своей памяти можно воспользоваться внешней, например, писать в файл (если 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, возможно только поменяет название.
Спасибо на добром слове!) Самая большая сложность в отсутствии документации к печатающим головам и невозможности их изготовления в кустарных условиях (ну либо я плохо искал). Остальное должно быть делом техники и уже протоптанной дорожкой
На подобные слова я и рассчитывал, когда писал это).
Я слышал о проблемах с таймингами при доступе к памяти (как RAM, так и Flash) и видел на работе как периферия начинает чудить при повышении частот (но один опытный человек быстро привел всё в норму), а могла даже не запускаться. Это настораживает, но я попробую разогнаться когда у меня появится кварц в 24 МГц (текущие 8 считаю не очень надёжными).
Где-то в районе написания части 0, я, интереса ради, пробовал установить SYSCLK в 96 МГц, но они выводились из максимально неудобных 25 МГц или от внутреннего источника. В итоге контроллер не всегда проходил инициализацию :D
Если полученные тайминги действительно следствие оверхеда прерываний (а не, например, приоритета), то надо повышать производительность в 1.5-2 раза, т.к. оптимизировать бесконечно у меня не выйдет, единственным выходом остаётся повышение частот. Где-то в даташите должны быть описаны тонкости при повышении частот.
Это та штука, которая подключается к спутниковой тарелке чтобы найти спутник?
Не знал, посмотрю как дойдёт дело.
В плане логики работы загрузчика пока в голове три варианта:
Хранить дамп старой и новой прошивки в энергонезависимой памяти снаружи (например, SD карта, EEPROM, внешняя flash) и перешивать область основной прошивки по необходимости (с соблюдением каких-то условий). Так обновление разделится на 2 этапа - загрузка новой прошивки и непосредственно перезапись flash
Иметь двойной буфер во flash для основной прошивки. При глюках новой прошивки будет возможность запустить старую без перепрошивки контроллера лёгким движением руки, но я пока не уверен что мне хватит памяти на такое. Самое главное, так можно сдеать бутлоадер потоком внутри RTOS, а не отдельной программой со своим местом внутри flash
Прошивка так прошивка. Останавливаем основную прошивку и переключаемся на бутлоадер при прошивке. Перешивается область памяти где лежит основная прошивка.
Сейчас я использую Nucleo - у неё есть ST-Link с возможностью подключения как MSC к ПК и на неё можно сбросить новый файл прошивки, который при каких-то условиях загрузится во flash подключённого к ST-Link контроллеру. В принципе, в этом плане можно ничего не менять, разве что объединить 2 USB в один через хаб, но это уже звучить как излишняя заморочка.
Я ещё изучу этот вопрос, для меня это пока не изученная тема.
Composite device потом ещё попробую. Моё внимание привлёк не столько HID, сколько Image, MSC. Хочется сразу иметь доступ хотябы к логам на SD карте, возможно отдавать задание на печать (что потребует рендера на устройстве, но вполне можно и RAW отправить). Ну а через Image можно сканер попробовать завести.
Ещё, возможно, имеет смысл познакомиться с Download Firmware Update, насколько понял, его можно использовать для обновления прошивки, но надо будет заиметь минимальный бутлодер для запуска и обновления этой самой прошивки (двойной буфер?).
Да, по факту, никто не мешает использовать любую понравившуюся комбинацию vid:pid.
Так работает почти всё что подключается к Windows. Честно говоря, я туда пока не погружался - полезу и буду пытаться писать свой драйвер когда заработает печатающая голова (уже в процессе).
У меня сложилось впечатление что Windows смотрит на класс устройства и представляет стандартный драйвер. Однако, если есть специальный драйвер для какой-то комбинации vid:pid, то подхватываться будет он.
Можно написать свой inf файл, в котором указываетсч какой драйвер должен использоваться для конкретного устройства и принципе описывается что это за устройство. Это будет иметь смысл только если комбинация vid:pid действительно уникальна. Уникальность обеспечивается наличием официально зарегистрированных vid:pid и подписей у драйвера и т.е. наличием организации, которая выдаёт vid (какой дали, с таким и живёшь) и через которую, вроде, можно (а может и не нужно) зарегистрировать pid (производитель выбирает сам для своих устройств).
В процессе разработки демо vid:pid более чем достаточно. Меня совершенно никак не коробит использовать левый vid:pid в релизе (вдруг он случится - можно помечтать) и драйвер, на который будет ругаться ОС т.к. это моё устройство и я знаю что это такое и что оно делает. Других пользователей подобное может напугать, да и выглядит не очень профессионально ;)
Надо будет озадачиться поисками, я слышал что на Aliexpess можно заказать плату, но обходил его стороной в этом вопросе.
Я был удивлён что в моём городе на avito (и других сервисах) не нашлось ни одного человека с ЧПУ фрезером, который бы этим занимался
Я бы попробовал включение одного транзистора в ключевом режиме. А дабы не мучаться на первых порах с развязкой, взять готовые модули. Я планировал использовать их и для преобразования уровней, что довольно жирно для логики, но зато надёжно.
Согласен, по подаче бумаги точно стоит посмотреть схемы и алгоритмы. Многие часто берут 3D принтер за основу или лазерный станок и кладут бумагу на рабочую поверхность. Мне пока что рулонная подача кажется самой простой с инженерной точки зрения. В классической подаче придётся бороться с замятием бумаги, затягиванием нескольких листов, сохранением угла и направления. И это только то что лежит на поверхности.
Это чертовски правильная мысль, особенно в коммерческой разработке, но с пет-проектом
нужноможно позволить себе немного ветра в голове. Если взяться сразу за сложную задачу и не чередовать её с простыми, то можно разочароваться, потерять интерес и забросить проект. Т.к. я построил в голове глобальную и наивную карту того что я хочу видеть в проекте и как его можно расширять надо было хотя бы поверхностно разобраться RTOS и STM32 - без этого даже начинать смысла нет, ну и мне пока было нечего делать по решению главных проблем, так что я взялся за второстепенные.Насчёт микронного сопла не знаю, но на hackaday есть довольно классная попытка изготовить печатающую голову струйный принтер на безе 3D принтера. Он печатает довольно крупными точками и использует специальный софт для предобработки. Как мысль идея на будущее мне очень нравится. В кратце, для прокачки чернил используется пьезо-элемент, а вместо дюз сопло 3D принтера. Решение рабочее, но надо подумать как формировать каплю стабильного размера и регулировать её размер.
Если обзавестись хотя бы 3D принтером, то можно попробовать.
Приятно познакомиться с товарищем по несчастью!) И поблагодарить за труды - меня натолкнуло на мысль продолжить.
Я пробовал запустить проект для Arduino. Но столкнулся с проблемой: код не помещался во память. Я это устранил, но встрял с тем что программа ни то ли зависала, то ли не запускалась, либо моей Arduino UNO пора на покой (что может быть вероятно, т.к. даже Arduino IDE не всегда шьёт).
Отладка Arudino дело неблагодарное.
Adruino в целом плохо подходит для сложных задач управления, а тут понадобится контроль скорости, положения + формирование капли. Если подозрения что моя STM32F411RET6 тоже может не вытянуть два картриджа сразу, а я уже навешал дополнительной периферии чтобы и руку набить в STM32 и без дела не сидеть пока транзисторы едут.
Как раз это остановило от попыток повторить проект на EPS32 для изучения под лупой, а изготовить двустороннюю плату дома пока слабо. В попытках перерисовать понял что она получится либо будет двусторонней, либо оно того не стоит.
Вы говорите об этом участке.
spritesmods тоже писал про импульсы кратные 10 мкс и это защита на случай зависания. Возможно получится соблюсти более жёсткие тайминги с STM32, вроде, можно настроить на ШИМ 200 КГц (даташит говорит про лимит в 100 МГц для GPIO, но у меня SYSCLK 48 МГц + кроме этого сигнала есть и другие задачи) и этот участок останется только крайней мерой. Возможно есть более надёжный способ ограничения длительности импульса.
Буду очень благодарен! Расходы на доставку, естественно, на мне - можем связаться через диалоги в хабре.
Буду только рад, но пока толком участвовать не в чем. Я создал репозиторий, но я не описал ни общий стиль кода (не говоря о документации), ни архитектуру (то что есть в коде пока только уверенный набросок), и пока просто измываюсь над периферией дабы немного набить руку в работе с STM32 и упростить себе жизнь в будущем. На днях подключал шаговики, пока без управления, скорее проверить работоспособности в целом. Из серьёзного на повестке анализ USB Printer Class в AzureRTOS (+ народ в комментариях накидал куда ещё можно посмотреть) и попытка как-то интегрировать его в проект, была идея зайти со стороны UMC и реализовать из вместе, но пока не уверен, возможно CubeMX будет затирать изменения, а мне этого не надо.
Работу с самой головой ещё не начал разбирать, чуть позже будет немного больше возможностей для этого
Откопал переделку принтера для печати плат: https://med.comp-lenta.ru/struynaya-golovka-svoimi-rukami/?ysclid=mflfo6wxsn856260134
Можно, но, на мой взгляд, технически сложно изготовить в домашних условиях что-то хорошо работающее. Формирование правильной капли даже с готовыми головами непростой процесс, а с самодельной он умножится ещё и на сильно плавающую погрешности изготовления
Цветные иллюстрации и цветные обложки.
Текст чисто чёрным выходит лучше, но принтер часто подкручивает что-то и примешивает ещё и цветные (замечал снижение качества когда забивались цветные дюзы да в чёрно-белом режиме). Но иногда хочется заморочиться с красивой вёрсткой страниц или обложки. Не стоит забывать что принтер нужен не только для печати книг, а заводить под каждую задачу отдельный не хватит ни места, ни денег.
У лазерного принтера есть несколько существенных плюсов: они не засыхают как струйные, космическая скорость печати по сравнению со струйником. Однако, они сложнее устроены и зачастую не имеют возможности дозаправки.
Почему бы и нет? Это вполне возможно, а ещё я находил способы переделать обычный принтер в планшетный для печати шаблонов плат прямо на медной стороне текстолита, но не изучал этот вопрос подробно (хотя тоже иногда изготавливаю дома платы фоторезистом) и, к сожалению, не сохранил ссылки на ресурсы.
Могу предположить что не каждые чернила прилипнут к меди и придется долго и мучительно подбирать состав с подходящей адгезией и не растворяющийся в химикатах для травления. Возможно наилучшее решение использовать картридж от лазерного принтера в качестве базы, он, по сути, запекает пластик на печатающей поверхности, а суть чернил заключается в проникновении в слои бумаги для закрепления. Этакий ЛУТ версия 2.0 без утюга и ламинатора получается.
При должной точности печати можно даже делать несколько проходов для уплотнения рисунка (если чернила не растекутся).
Возможно слишком громко сказано. Я находил реализацию от STM в AzureRTOS (которая включена пакетом в CubeMX) и уже думаю как можно перенести это в свою программу.
Я далёк от кода ядра линукса, но имеет смысл посмотреть, спасибо! Это пригодится если всё таки STM32 окажется мало
Большое спасибо! Вы дали очень много ценной информации к которой я буду часто возвращаться. Мне еще предстоит многое изучить и найти правильный подход к управлению. Немного добавлю своих пояснений на некоторые моменты и (возможно) рассуждений
Возможно, я думал в эту сторону и это может стать главным блокирующим фактором. HP123 выбрались сами собой т.к. они у меня просто напросто стоят в принтере и у меня есть пара про запас. Но пара работ в сети убедили меня что для HP123 можно не переживать.
Они больше подходят для промышленного плоттера, чем для домашнего принтера. Мысль хорошая, но пока что дороговато для проекта на коленке. Меня всё ещё не покидает мысль сделать возможность подключения разных голов, но это уж очень далёкое будущее и пока это не первостепенная задача.
Если бы я не наткнулся на почти готовые проекты, то даже не стал бы пытаться - я не прожжённый эмбеддер и задача для меня была бы неподъёмной
В крайнем случае, я вынесу в микроконтроллер только управление одной головкой
Нужно что-то порядка 15 контактов для управления HP123, насколько понял одна половина нужна для тактирования (работают по 9В), а вторая половина уже нужна непосредственно формирования капли (16В). Мой контроллер (STM32F411RETx) поддерживает до 16 каналов DMA (если не ошибаюсь), часть из которых уже занята передачей по SPI и UART для отладки.
Где-то натыкался на мысль что печатное дело является одной из самых технологически сложных отраслей. Буду есть слона по кусочкам - сначала необходимо научиться дёргать правильные пины чтобы стабильно иметь каплю без учета тонкостей формирования даже если это будет одна дюза:) это пункт 0 для моего проекта - без него я не смогу считать проект потенциально возможным
Таков и был мой план, это пункт 1 для того чтобы назвать проект возможным для меня. Возможно, в будущем я сформирую цели и план движения к ним в отдельную статью.
Кажется придётся вспоминать курс ТАУ и строить мат модели, возможно на эту тему есть научные статьи - я не изучал этот вопрос, видел только пару патентов на принцип работы печатающих головок, которые не давали никакой полезной информации. Весь пункт 6 говорит что процесс исследования сильно затянется. Честно говоря, в начале я надеялся что можно будет доработать практически готовый проект, но вопрос оказался сложнее и в нём
пришлосьзахотелось разобраться.Когда я делился своей идеей с коллегами по работе, то пошутил что нашёл себе занятие лет на 10 вперёд. Сама затея является воплощением поговорки: "Больная голова рукам покоя не даёт" - и даже не уверен что задача подъёмная для пет-проекта в свободное время в разумные сроки (хорошо что я никуда не тороплюсь).
С учетом принципа работы и что я буду использовать мосфеты (об этом писал человек работавший HP123), согласен. Насколько понял, в HP123 около дюзы нагревается резистор (который потребляет до 2.5А на один вход картриджа), который создаёт пузырь, толкающий чернила из дюз при расширении и втягивает новую порцию при уменьшении. Меня этот факт немного ввёл в ступор и я сначала не поверил, но это же насос абсолютно без подвижных деталей :D
Нужно не только не спалить сам резистор, так ещё и подобрать правильные параметры ШИМ не только для формирования капли и прокачки чернил, но еще и не перегреть голову при этом и не попасть в ситуацию когда пузырь превратится в воздушную пробку (не знаю всей конструкции, но думаю что это возможно при слишком большом расширении пузыря).
Да, в CLion, вроде, даже была возможность создавать (или открывать) проект через .ioc файлы и требует установки нескольких программ типа CubeMX, Cube CLI и т.д. Я пробовал им воспользоваться на работе (это было одно из пожеланий заказчика) - но не зашло. У JetBrains очень удобные IDE, но я от них уже отвык. Думаю что при правильной структуре проекта можно параллельно вести разработку в чём угодно. В этом немного и помогает CMake:
можно сконфигурировать проект под любую IDE
можно быстро собирать без IDE, что помогло мне настроить CI/CD
Ну и я стараюсь использовать инструменты, которые могут быть подхвачены любой IDE и, теоретически, любой ОС. Речь про ARM GNU Toolchain и OpenOCD (к нему у меня есть претензия в лице неработающего из коробки SWO для ST-Link).
3D печать, на поверхностный взгляд, довольно простая вещь. Слайсер для подготовки g-code может быть куда более затейлевым. hp1100 печатает только чёрным. Мой HP Deskjet 2630 тоже недорогой, но может решать гораздо больше задач.
Дело даже не в печати книг на струйнике, сколько в постоянно возникающих проблемах и отсутствия open source проектов в части бумажной печати
В основном это что-то из разряда:
"хочу узнать как работает"
"хочется пустить свои навыки в полезное русло"
"хочется немного подкачать знания"
Всё это с катализатор в виде проблемы с принтером натолкнули на проект, который мог бы заключаться в написании ПО и какой-то минимальной электрической схемы, которую любой желающий может попытаться повторить сам. Увы, но всё ОП для принтеров закрыто и нельзя подобраться ни к профилям печати, ни к адекватной работе с картриджами (моя наболевшая проблема), ни к тонкой подстройке скорости печати, ни к любой другой кастомизации под свои условия. Возможно производственные решения дают больше, но вопрос цены заставит понервничать. Иными словами, доступ к ПО такого принтера, как, например, HP Deskjet 2630:
глючит и приводит к проблемам на ровном месте
не имеет никакой возможности подстройки
не имеет никакой возможности расширения
Да, в целом, пользователю это практически никогда не нужно, но я не тот случай. Мне хочется иметь больше контроля над процессом работы моего принтера и больше понимания того что именно происходит. Возможно я бы хотел передать принтер для печати страниц А3, но уже зашитые в память ПО профили бумаги просто не позволят.
В итоге цель проекта может быть описана как: "Сделать нечто полезное и интересное для DIY сообщества"
Это тоже решаемая задача с open source проектом, если действительно будет необходимость писать их (если я правильно понимаю, речь про ПК драйверы). Данная статья скорее вступление к целому циклу статей по разработке моего проекта, так что говорить о драйверах ещё рано и для меня это непаханное поле и пока всё таки главная проблема это управление дюзами печатающей головы.
При любой нехватке своей памяти можно воспользоваться внешней, например, писать в файл (если SD карта подключена), использовать внешнюю RAM (портов для периферии навалом), либо (если это возможно) не принимать весь лист сразу и отрабатывать его построчно. Автор статьи про реверс инжениринг HP123 использовал ESP32, у которой, вроде 8 Кб RAM, возможно разные версии имеют разное количество - у меня не было возможности с ними работать. изначально я вообще планировал использовать SMT32F103C8 (20 Кб RAM, 64 Кб Flash), но, для большей уверенности, решил взять что-то побольше.
Протоколы сетевые, это то на что я натыкался при вопросе : как передать задание на печать принтеру? Сеть будет в далёком будущем (далеко не в первую очередь). Пока что главное решить две задачи:
Понять как управлять картриджами и написать соответствующий код - банально разобраться как запускать нужные дюзы
Перед работой с сетью хочется наладить банальную работу по проводу. Существует бесконечное количество статей про реализацию принт-серверов, но ни одного про то как реализуется USB Printer Device Class. Иными словами, в интернете всем интересно управлять принтерами, а не создавать принтеры
Сеть можно организовать на той же ESP32 или на любом одноплатнике в режиме хоста.
Вот в этом у меня пока нет уверенности, возможно это справедливо для принт-серверов. В спецификации SB Printer Device Class упоминается PDL и PCL. Насколько я понимаю, это некий стандарт для передачи задания на печать.
Спасибо за отзывчивость! :) Но для вашей задумки нужно что-то ближе к Raspberry PI, мне кажется это слишком жирно и по производительности и по цене. Хочется остаться в рамках дешёвого Embedded решения на STM32. Этот проект собирается быть open source, возможно только поменяет название.
Спасибо на добром слове!) Самая большая сложность в отсутствии документации к печатающим головам и невозможности их изготовления в кустарных условиях (ну либо я плохо искал). Остальное должно быть делом техники и уже протоптанной дорожкой