Комплект MKS DLP (плата с дисплеями ) на поиграться
Получил тут на днях комплект MKS DLP - https://aliexpress.ru/item/4000027986113.html
В комплекте материнская плата версии 1.1, сенсорный дисплей интерфейса и 2к-дисплей засветки. В принципе, плата аналогична подобным платам от Chitu и Anycubic. Даже компоновка платы практически один-в-один. Только вместо FPGA стоит CPLD, что несколько странно, но не принципиально. Как и на тех платах, на этой есть:
- вход питания (12-24 вольта)
- выход на паралед или матрицу засветки
- выход вентилятора для параледа
- выход для вентилятора общего охлаждения
- разъем USB-хост для втыкания флэшек
- драйвер ШД (A4988) с разъемом для ШД
- предусмотрен разъем для подключения внешнего драйвера ШД
- входы для концевиков Z+ и Z-
Еще тут предусмотрены разъемы для WiFi-модуля.
Самое интересное в этом комплекте - что он идет как открытый проект. То есть для него доступны и схема и исходники прошивки. Поэтому я и взял его с дальним прицелом заменить в своем Фотоне S, подправив в прошивке все так как мне хотелось бы.
Ну что сказать... Во-первых, родная прошивка сырая. Вот прям совсем на грани того, что пользоваться ею нельзя. Из того, что на вскидку сейчас вспомню:
- - ускорения по умолчанию просто дикие для фотополимерной печати, и даже настроив их в конфиге мне как-то все равно не очень нравится как он двигает ось
- - ооооооочень меееееедленно читает с флэшки каждый слой, примерно 5-7 секунд. Причем он как-то странно вообще с этим работает - читать новый слой начинает во время поднятия платформы и пока слой не будет дочитан до конца, платформа вниз не поедет. При этом, алгоритм чтения на нижних и основных слоях отличается, на нижних он как-то по-другому читает, не помню уже деталей. И в процессе чтения слоя принтер никак не реагирует на нажатия экрана, он целиком поглощен этим процессом :)
- во время печати нельзя поменять параметры - время засветки, высоту и скорость подъема и т.д.
- при нажатии паузы печати он немедленно поднимает платформу, даже если время засветки еще не вышло.
- реакция на нажатия тач-панели на дисплее очень невнятная - то не реагирует, то реагирует несколько раз на одно нажатие
Из плюсов - как я понял он пытается продолжить печать после пропадания питания во время печати. Правда, я совершенно не понимаю как он это сможет. Тут ведь, в отличии от FDM-дрыгостола нельзя заново отхомить Z если часть модели уже напечаталась. По крайней мере когда концевик Z стоит внизу, как это сделано практически во всех принтерах.
Когда я залез в исходники (которые, кстати, еще и с ошибками, пришлось их исправлять, чтобы откомпилировалось), то понял, что ловить там в плане правок нечего. Это ужаснейшая мешанина кода, 80% которого растут из FDM-принтеров. К этим 80% какими только можно костылями прикрутили особенности фотополимерной печати и кое-как заставили это хоть как-то работать. В составе прошивки - полный Мерлин! С работой по всем осям! И ардуина для STM32 там же участвует - ну ёмаё... В общем, править нормально это просто невозможно, если только сам это не писал и не помнишь обо всех примененных костылях.
В общем, решил я писать прошивку заново.
Начал с оживления дисплея. Основной код инициализации взял из исходников MKS, однако основные процедуры написал сам заново, потому что в их исходниках 70% - ненужный мусор. Доработал и адаптировал свою библиотеку для пропорциональных шрифтов, потому что мне не нравятся стандартные моноширинные шрифты, кочующие по почти всем проектам в интернете. К тому же и места они занимают больше. В моей библиотеке была еще возможность отрисовки с антиалиасингом, но эту часть я выкинул. Рисуется медленнее, размера жрет в два раза больше... Отрисовка шрифтов в оригинальных исходниках не отличается оригинальностью (прошу прощения за тавтологию). Стандартная процедура, взятая из какой-нибудь ардуины или адафруит.
После отладки сравнил ради интереса скорость вывода текста процедурой из оригинальной прошивки и моей библиотеки:
Голубой и верхний белый тексты выведены моей библиотекой. Нижний белый текст - стандартной библиотекой. Мало того, что стандартные моноширинные шрифты жрут слишком много пространства на экране (в верхней строке еще осталось место на экране справа, а в нижней экрана не хватило на всю строку) и весят больше в прошивке, так еще и скорость отрисовки у моей библиотеки оказалась выше примерно в 15 раз. Вон тот большой голубой текст нарисовался в несколько раз быстрее, чем короткая нижняя белая строчка. Хотя это, конечно, вопросы не столько к типу шрифтов, сколько к криворукости программистов.
Кстати, попробовал перевести вывод данных в дисплей на DMA, но прирост скорости составил всего 3-5%. Сама шина данных дисплея не позволяет использовать преимущества DMA на частоте этого микроконтроллера (168 МГц), DMA все равно вынужден ждать готовность этой шины.
После запуска дисплея и вывод на него текста я взялся за USB-хост для подключения флэшек и файловую систему. Инициализацию периферии и создание низкоуровневых функций для FatFS отдал на откуп CubeMX. Но после генерации проекта обновил сам FatFS и немного перелопатил полученные исходники для своего удобства. Хотя я впервые возился и с USB-хостом и с библиотекой FatFS, все получилось достаточно легко и быстро. Флэшки определяются, читаются. Был затык с парой флэшек - FatFS не хотела находить на них файловую систему, не помогало ни форматирование, ни переразбивка. Потом я обнаружил, что эти флэшки были подготовлены специальной утилитой как загрузочные для установки винды. После приведения их в стандартный вид той же утилитой, они стали нормально видеться прошивкой :)
Заодно перелопатил весь код для поддержки в выводимых текстах кодировки UTF-8 и добавил несколько функций для работы с UNICODE - это необходимо для нормального чтения русских имен файлов.
Скорость чтения в принципе получилась нормальная.
Не максимальные для USB FS 12 Мбит/сек, но вполне приличные 6-9 МБит/сек - зависит от флэшки. То есть один слой файла для печати, который весит с учетом сжатия 30-50 КБ, должен считываться не больше, чем за 0.1 секунды. Ну пусть еще 5 раз по столько уйдет на его распаковку (хотя скорее всего гораздо меньше), все равно это будет далеко до тех 5-7 секунд, которые тратит родная прошивка на его чтение.
Потом освоил тач-панель дисплея. Не стал разбираться как это сделано в оригинальных исходниках и почему там все так отвратительно работает, просто написал свою библиотеку. Нажатия теперь воспринимаются четко, координаты усредняются по 16 значениям. Библиотека рапортует о состояниях:
- короткое нажатие
- отпущено после короткого нажатия
- длительное нажатие
- отпущено после длительного нажатия
- количество "тиков" за время длительного нажатия
При этом произошедшее нажатие будет сохранено даже если основная прошивка в это время чем-то занята и сможет быть обработано позже.
Единственное, чего не стал делать - это обработки свапов. Да и стоит ли... Если только сделать какие-то элементы управления на дисплее в виде ползунков, но надо ли оно - не уверен.
Последнее, что я на сегодня сделал - это отрисовка картинок. Причем, их не нужно ничем конвертировать - жрет обычные .bmp-файлы. Единственное требование - 16-битный формат в виде R5G6B5.
Пока что тестовая картинка - загрузочное лого - встроена прямо в прошивку. Отрисовывается эта картинка размером на весь экран (480х320) всего за 20 мс.
Вот так выглядит на дисплее:
Дизайнер из меня никакой, так что сделал как смог, лишь бы было :))
За несколько часов мучений получилось вот такое, не побоюсь этого слова, убожество для главного экрана :)
И для экрана "Сервис":
Вот кстати, о часах на главном экране - в микроконтроллер встроены часы реального времени с календарем. Для их работы предусмотрено отдельное питание, на которое можно повесить 3-вольтовую батарейку. По моим подсчетам элемента CR2032 должно хватать по потреблению лет на 10 минимум. На плате эта батарейка не предусмотрена, но я собираюсь в будущем это исправить :)
В родных исходниках MKS интерфейс рисуется отдельными элементами, для каждого из которых есть свое изображение. Но я решил пойти по пути Эникубика - не рисовать интерфейс из отдельных окошек, кнопок, элементов, а сразу весь дизайн оформлять как одну фоновую картинку . Для каждого меню или состояния принтера - свой фон со всем интерфейсом (кроме текстов). И храниться они должны, конечно, в отдельной SPI-флэшке размером 8 МБ, которая для этого и имеется на плате. Все же каждая такая фоновая картинка весит больше 300 КБ, а места в микроконтроллере всего 512 КБ.
Все тексты будут не встроены в картинки, а рисоваться отдельно, шрифтами. Нужно переключиться в меню теста - считали из SPI-флэшки полную картинку интерфейса этого меню и поверх нарисовали нужные надписи на текущем языке.
Сейчас потихоньку обдумываю организацию работы интерфейса в целом, чтобы при желании что-то изменить в нем (перенести кнопку в другое место, или добавить новую кнопку) не приходилось перелопачивать половину прошивки. У меня уже есть моя библиотека, решающая подобную задачу именно для сенсорного дисплея, нужно будет посмотреть как она сюда впишется.
Ну и остальной работы, конечно, еще выше крыши. Работа с мотором оси Z, работа с засвечивающим дисплеем, чтение и раскодировка файлов для печати, организация самого процесса печати... Возиться и возиться. Интересных вечеров предстоит еще очень много :))
ЗЫ: И, к сожалению, эти товарищи не предоставляют исходники для CPLD, которая управляет засвечивающим дисплеем. Может быть был бы шанс адаптироваться для подключения монохромного дисплея :) Так, на будущее :)
Еще больше интересных статей
Обзор на EasyThreed K7
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
...
Решение интересной проблемы печати..
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Наблюда-Ski 04.6: Наращиваем в длину, или Фьюз и не только
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Недавно было несколько тем по сращиванию прутков,
и для начи...
Комментарии и вопросы
В теории да, но когда на один....
Честно говоря, разобрать шпинд...
Блин, там же автосмена инструм...
посоветуйте камеру что бы цепа...
Добрый день, поставил печатать...
пришлось удлинить провода возм...
Добрый день, хочу просить помо...