Модернизация Easythreed K10 с помощью GPT: Marlin, управление с ПК и Wi-Fi
Что ж было дело вечером, делать было нечего. И тут до меня доходит мысль почему бы мне не улучшить свой Easythreed K10 и присобачить к нему управление через ПК.
В работе я использовал GPT6.1 Sol. С его помощью я разобрался куда и как нужно припаяться что бы выгрузить родную прошивку и в последствии залить другую (да я знаю что достаточно просто положить новую прошивку на MicroSD и дать ей имя p10_printer.bin из статьи https://3dtoday.ru/blogs/maximka003/modernizaciya-easythreed-k10-v21-cast-2).
1. Разобрался, что находится внутри принтера
На моей плате K10 V2.1 установлен микроконтроллер **GD32F303CBT6**: 128 КиБ Flash и 32 КиБ оперативной памяти.
2. Сохранил заводскую прошивку и нашёл способ подключения
Для того что бы перевести GD32F303CBT6 в режим ROM-загрузчика нужно подать сигнал 3.3v на контакт BOOT0, сделал я это через припайку резистора 330 Ом и ближайшего источника питания на плате 3.3v.
Tx и Rx оказались контакты PA9/PA10, припаяв к ним 2 провода и подсоединив к USB to TTL переходнику (не забыв про GND) я подключил принтер к ПК (отключил всю периферию: двигатели, нагреватель и т.д).Дав команду GPT проверить связь и попробовать считать прошивку, и о чудо это сработало. В моих руках оказалась заводская прошивка принтера, а это значит что GPT может полностью ее разобрать и понять принцип работы принтера и мне не придется все ему объяснять.
Поиск подходящих выводов связи занял заметную часть работы. Сначала я смотрел на стандартную пару PA9/PA10, но позвонка и разбор прошивки показала, что на моей плате эти выводы связаны с осью Z. Подозрение на свободные PB6/PB7 тоже не подтвердилось: они участвуют в схеме управления током двигателей. Но как же мне управлять принтером во время его штатной работы, решил искать просто свободные пины в надежде что получиться использовать программный Serial, GPT в прошивке нашел что контакты PA0 и PB11 не задействованы , но это не точно. Прозвонив плату и не найдя куда они идут решил рискнуть и выбрать их для управления принтером. Помимо управления принтером это так же дало прошивать его через PA0 и PB11 не переводя микроконтроллер в режим ROM-загрузчика.
Передача с контроллера через PA0 осталась программной, а приём на PB11 удалось перевести на аппаратный USART2. PA9/PA10 сохранили своё штатное назначение.
3. Подготовил Marlin для конкретной платы
Основой стала **Marlin 2.1.3-b3** с HAL GD32_MFL. Это beta-версия, и готовой конфигурации моей платы в ней не было. GPT подготовил отдельную конфигурацию K10 и окружение сборки.
Пришлось учитывать небольшой объём памяти. Под основное приложение выделили 110 КиБ, сохранив заводской загрузчик и область настроек. Запись стандартной EEPROM Marlin во Flash в этой конфигурации отключили, чтобы исключить пересечение областей памяти.
Из заводской конфигурации перенесли, в частности, шаги на миллиметр:
Для X и Y оставили ограничение **40 мм/с**. Это верхний предел настройки, а фактическая скорость зависит ещё от ускорений, геометрии детали и возможностей экструдера.
Отдельно реализовали поиск нуля K10 без концевиков, сохранили штатные кнопки и предусмотрели ограничения обычных перемещений. После включения или отключения двигателей координаты считаются недостоверными — перед ручным управлением требуется поиск нуля.
4. Проверил движение и нагрев по отдельности
Первый запуск новой прошивки я проводил с отключёнными нагрузками. Затем подключал двигатели по одному: сначала X, потом Y и Z.
Проверял небольшие перемещения, затем ходы по 5 мм в обе стороны. После этого отдельно проверил поиск нуля каждой оси и сравнил поведение с заводским. Такой порядок позволил увидеть ошибки до общего запуска всей механики.
Нагреватель и термистор проверял отдельным этапом. Для нагрева пришлось настроить ограничение мощности; в прошивке остались проверки датчика и температурные защиты. Задаваемую рабочую температуру хотэнда ограничили 230 °C, а тестовую печать PLA проводил при 200 °C.
5. Добился нормального первого слоя
Первый квадрат показал, что одного правильного движения осей недостаточно: сопло оказалось слишком близко к столу. Что в принципе ожидаемо, из-за люфта всей конструкции я давно подметил что когда настраиваешь стол то зазор между столом и соплом должно быть примерно 1 мм что бы при печати первых слоев принтер не сплющивал их.
Я выставил зазор по обычной бумаге: она должна двигаться под соплом с лёгким трением. Под найденное положение подобрал поправку Z и проверили её повторной печатью. Конкретное значение такой поправки относится к моему экземпляру и регулировке стола. Поправка Z избавила меня от угадывания нужного расстояния стола от сопла на глаз.
Добавили и нормальное завершение печати: небольшой ретракт, отключение нагрева, подъём сопла и парковку в стороне от модели.
6. Сделал программу K10 Studio
Для управления с Windows я попросил GPT написать программу **K10 Studio** на Python. Интерфейс выполнен на HTML/CSS и открывается отдельным окном программы.
В неё вошли:
- подключение и журнал обмена;
- температура, координаты и состояние принтера;
- перемещения XYZ с выбранным шагом, поиск нуля и отключение моторов;
- аварийная остановка;
- загрузка G-code на SD, список моделей, запуск и удаление файлов;
- загрузка и выгрузка пластика до нажатия кнопки остановки;
- настройка коэффициента Linear Advance (чего не было в родной прошивке) и поправки Z;
- перемещение к четырём точкам регулировки стола, расположенным в 15 мм от его краёв;
- передача пакета обновления прошивки принтера.
Файлы на карте имеют короткие имена формата 8.3. Чтобы я видел привычные названия моделей, K10 Studio хранит соответствие между именем на SD и исходным файлом на компьютере.
7. Добавил подготовку G-code под мой K10
Модели я продолжил готовить в Cura с профилем от Easythreed K10. Программа **K10 Studio** принимает готовый G-code и адаптирует его к принтеру: формирует начало и завершение печати, подставляет температуру, значение K (Linear Advance) и поправку Z, учитывает ограничения скоростей и добавляет парковку.
Геометрия модели и значения экструзии, рассчитанные слайсером, при этом сохраняются. Брим, поддержки и остальные параметры самой модели остаются задачей слайсера.
Важная деталь: параметры подготовки записываются в загружаемый файл. Уже лежащая на SD модель не переписывается от того, что я поменял профиль в программе. Для применения нового профиля к её содержимому нужно подготовить и загрузить файл заново.
8. Ускорил передачу файлов и проверил целостность
Первоначальная построчная передача файлов на SD была долгой так как GPT решил что лучше передавать пакеты данных по 128 байт, половина которых была служебная информация.
Попросил GPT сделать загрузку блоками до **1024 байт**. Данные передаются в бинарном виде с COBS-кодированием и проверкой CRC. После окончания прошивка читает записанный файл с SD обратно и проверяет CRC всего содержимого. Незавершённая загрузка не становится готовой к печати моделью.
Скорость соединения изначально была 9600 бод что было ну слишком медленно для передачи файлов на печать, постепенно начал повышать скорость и тестировать. На 115200 бод возникли повреждённые ответы: в журнале вместо `K10_BLOCK_READY` иногда приходило `K10_BHOCK_READY` или совсем нечитаемый текст. Это приводило к потере подтверждений и остановке передачи.
Для прямого подключения к плате в итоге остановились на **57600 бод**. На простаивающем принтере GPT проверили 1000 ответов без искажений и три загрузки примерно по 217 КБ. Каждая заняла около 59 секунд с учётом чтения с SD и проверки CRC. Повторов блоков в этих тестах не потребовалось.
Отдельно в программе появились безопасные повторы согласования блоков. Команды движения автоматически при потере ответа не повторяются.
9. Сделал мост на ESP8266 с Wi-Fi и USB
Следующим этапом стала **ESP8266 D1 mini**. Я хотел управлять принтером по локальной сети и сохранить подключение по USB через разъём самой ESP.
В прошивку ESP внесли две домашние сети на подстраховку, а в K10 Studio добавили выбор Wi-Fi, IP-адреса и TCP-порта. Управлять мостом одновременно может один клиент, чтобы команды разных подключений не перемешивались.
С UART у ESP8266 пришлось повозиться. У неё один полноценный аппаратный UART и второй UART только с передатчиком. Первые варианты с программной передачей USB, а затем с программным приёмом ответов принтера на 57600 не прошли большие тесты.
В рабочем варианте распределение получилось таким:
Аппаратный UART0 перенес через `Serial.swap()` на D7/GPIO13 и D8/GPIO15. Второй аппаратный передатчик работает на D4/GPIO2. Чтобы его сигнал попал на USB–UART чип платы, на ESP добавлена перемычка **D4–TX**, то есть GPIO2–GPIO1.
Эта перемычка относится именно к нашей прошивке: она освобождает GPIO1 как вход.
Связь с моей платой принтера подключена так:
Что можно добавить
- Попробовать увеличить скорость перемещения на осях X и Y, но это лишь в теории и маловероятно, так как по документации самих шаговиков их максимальная скорость 40 mm/s;
- Добавить концевики используя свободные пины esp, но толка от этого немного, так как текущий способ поиска нуля вполне рабочий;
- Подключить nema17 увеличив скорость печати, в теории родные драйвера HR4988SQ это позволяют, но для этого для начала нужно измерить напряжение VREF непосредственно в цепи REF драйвера, что я забыл сделать. Так же это потребует допиливания конструкции принтера и добавления концевиков. Да и целесообразность вообще нужно проверять, не факт что родной нагреватель будет успевать плавить пластик на максимальной доступной скорости с nema17, хотя запас по нагреву точно присутствует но насколько большой это вопрос.
Что в итоге
Теперь Easythreed K10 я могу управлять с ПК, как по USB, так и по WiFi. правда по USB скорость передачи осталась на 19200 бод, так как на больших скоростях связь не стабильна. Появилась функция Linear Advance хотя при ее включении скорость печати довольно сильно проседает. Кнопки которые есть на принтере не работают, но их функционал можно вернуть так как их пины на микроконтроллере я не задействовал, но пока что мне лень с этим возиться. Данный принтер мне обошелся в 3500 рублей еще год назад, покупал я его для того что бы собрать большой принтер, а на маленьком печатать запчасти для большого, но проект ушел в долгий ящик. Стоит ли вообще возиться с этим принтером и как то его улучшать думаю что нет. Я это все сделал лишь потому что мог и это был небольшой вызов для меня, ОСОБЕННО имея такую вещь как GPT 6.1 Sol благодаря которому я не написал ни единой строчки кода, без него я бы провозился бы с этим не один месяц, да и вообще бы не начинал. На все ушло 2 вечера + 3 вечера на тесты и до настройку.
Еще больше интересных статей
И ещё раз про безопасность...
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Bambu Studio без окна: как мы считаем граммы и время для партии из консоли
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Сопла и сопли
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Сколько раз этот вопрос поднимался. Сколько тем...






Комментарии и вопросы
Нарвавшись на такой пластик, о...
Спасибо, очень познавательно.
https://www.reddit.com/r/Craft...
Здравствуйте, уважаемые!Пробле...
Подскажите что за творится, ит...
Заглушка ручки на стойку на Па...
Здравствуйте, я новичок в 3D п...