Marlin для Anycubic Chiron
Russian version | English version | Sources: GitHub: Landgraph/Marlin
Приветствую уважаемых участников сообщества!
Сомоизоляция выдалась относительно продуктивной в плане разных 3D-принтерных развлечений.
Дошли, наконец, руки до перепрошивки моего Anycubic Chiron. Особенно хотелось попробовать так широко разрекламированную везде функцию Linear Advance. Ну и заодно попробовать какие-нибудь ещё функции Марлина.
Не буду ходить вокруг да около, исходники лежат в репозитории на GitHub: Landgraph/Marlin
Конечно, возможно я плохо искал, но я не нашёл Marlin для Anycubic Chiron. Поймите меня правильно - да, я тоже нашёл кастомные прошивки для Anycubic Chiron на базе Marlin. Во-первых, не всегда прошивки предоставляются в виде исходных кодов (отдельная беда). Во-вторых, даже те прошивки, что удалось найти в исходных кодах - это один-два коммита, значительно отличающихся от базовой прошивки доступной в репозитории Anycubic Chiron 1.3.0 (ссылки будут в конце). И даже особо сравнить не получалось исходники между собой, чтобы понять что изменилось относительно базовой прошивки.
Собственно поэтому я решил собрать свой Marlin с необходимыми изменениями для работы на Anycubic Chiron (а также, полагаю, на Anycubic Mega, но нужны некоторые изменения и тесты). Кстати, недавно встречал подобные отзывы в одном из обзоров на ютюбе - автор также искал Marlin для тестов и, судя по контексту, не нашёл.
Итак, что я сделал?
Взяв исходную прошивку из репозитория Anycubic Chiron (v1.3.0) - нашёл коммит с минимальной, на мой взгляд, разницей с Marlin. У меня получилось, что прошивка для Chiron собрана на базе Marlin 1.1.0-RC8. Т.е. даже не релизная версия.
Немного поразбиравшись в прошивке сделал следующие выводы:
- Сенсорный экран является отдельным и независимым устройством, осуществляющим коммуникацию с платой через один из доступных последовательных портов. Идея понравилась, есть потенциал. Marlin 2.0 поддерживает подключение экрана как "принт-сервера", но судя по тому, что я увидел, Anycubic поддерживают собственный протокол
- Исходный код производителя тесно интегрирован в код Marlin
- Поломана функциональность команды G5 (кривые Безье), на этот код повешена функциональность потери питания
- Скорости, ускорения и т.п. настройки значительно ограничены прошивкой, поэтому все эксперименты с ускорениями 1800, 500 и т.п. - были впустую
Далее я вынес крупные блоки кода производителя в отдельные файлы VendorCode.cpp и VendorCode.h.
После этого приступил к чистке исходного кода от вкраплений кода производителя. Где-то удалось вырезать функционал в файлы с кодом производителя, где-то пришлось изолировать код с помощью define'ов, вернув при этом на место исходный код Marlin.
После предварительной чистки кода удалось подготовить патч и перенести изменения производителя на новую версию Marlin. Как это было - можете посмотреть в истории изменений. Также теперь можно легко использовать diff для просмотра разницы между разными версиями кода.
Теперь же и ребейз изменений на новую версию исходного кода Marlin стал менее ресурсоёмким.
Таким образом у меня получился код Marlin с изменениями для Anycubic Chiron, а не прошивка для Anycubic Chiron на базе Marlin, для меня это важно.
Пока что работа над чисткой кода ещё не закончена, кому интересно - можете посмотреть на текущий результат и присоединиться к работе. На данный момент я уже почти месяц сижу на новой прошивке и не вижу принципиальной разницы с родной прошивкой - т.е. у меня нет дискомфорта от того, что что-то работало в заводской прошивке, а в новой не работает. За исключением калибровки поверхности - не могу проверить.
Я не буду утверждать, что у меня получилось что-то совершенно новое или уникальное, но меня этот вариант устраивает значительно больше, чем те, что я находил.
Также появилась возможность плавно перенести изменения в Marlin 2.0. Только, если честно, я пока не уверен стОит ли. На мой взгляд - Marlin 2.0 получил много архитектурных изменений для поддержки разного железа, а на счёт функционала - не уверен.
Также теперь можно пользоваться всеми возможностями последней версии Marlin 1.1.* на Anycubic Chiron (включая, но не ограничиваясь Linear Advance).
Планы на будущее
- Продолжить чистку исходных кодов от кода производителя
- Нормально переименовать файлы
- Рассмотреть возможность выкинуть лишние файлы типа дополнительной поддержки последовательного порта
- Улучшить начальные настройки принтера. Было бы классно скооперироваться с другими владельцами принтера и подобрать лучшие настройки на базе общего опыта
- Добавить поддержку Marlin 2.0 (если найдётся достаточное основание этого, ну или кто-нибудь поможет в разработке в том же ключе)
- Проверить/отладить калибровку датчиком (сам датчик забыл в другом городе, не могу протестировать)
- Добавить поддержку других принтеров от Anycubic (судя по исходникам - добавить пару файликов с обозначениями пинов). Но тут проблема - мне не на чем это тестировать. В первую очередь я бы добавил поддержку Anycubic Mega
В качестве заключения
Также, после переезда принтера в дом с честным заземлением выяснилось, что есть большая разница во включении вилки в розетку. Да-да, Вы не ослышались. Перевернув вилку в розетке я получил периодическое (раз в минуту-две) моргание дисплея/подсветки. Решилось переворачиванием вилки. Думаю, где-то подтекает между фазой и землёй.
А также выяснились проблемы с работой кода G5 (даже не родной прошивке): принтер периодически зависал в произвольном месте печати. Пока что отказался от данной функции.
Ссылки
- Моя версия изменений для Marlin с поддержкой Anycubic Chiron - https://github.com/Landgraph/Marlin
- Официальная прошивка Marlin - https://github.com/MarlinFirmware/Marlin
- Репозиторий Anycubic с прошивкой Chiron v1.3.0 - https://github.com/ANYCUBIC-3D/ANYCUBIC_CHIRON_V1.3.0
- Кастомная прошивка на базе Marlin 1.1.9 - https://github.com/dkoch83/Marlin-1.1.9_Anycubic_Chiron
- Кастомная прошивка на базе Marlin 2.0 - https://github.com/coolio986/Marlin_2.0.x_Anycubic_Chiron
Marlin for Anycubic Chiron
Hello community!
While we were on self-isolation due to COVID-19 I spent some time on upgrading my Anycubic Chiron. I thought on installing new firmware.
But I became sad after reviewing an existing firmwares and they didn't satisfy me. First of all, most of them provides custom Marlin for Anycubic Chiron. I wanted to have pure Marlin with minimal Vendor changes in source code. It will allow me easily upgrade/rebase changes if needed.
Next thing which isn't applicable for me: provided sources doesn't contain history of changes and I didn't want to spend much time for comparison with original Anycubic Chiron v1.3.0.
What I have done
I downloaded Marlin's repository and I was looking for commit by comparing folder sources. I found a commit in Marlin's repository which is mostly aligned (for me) with Anycubic Chiron v1.3.0. It is version Marlin 1.1.0-RC8.
After I got high-level understanding about changes in Vendor's firmware I made several conclusions:
- Touch screen is a dedicated device. It communicates with mainboard using Serial connection. Marlin 2.0 supports such approach when Touch Screen become print-server. But as I understand - Anycubic implemented their own communication protocol
- Vendor's source code is tight coupled with Marlin's source code
- GCode G5 functionality is broken. Anycubic uses G5 for enabling power-loss detection
- Speed, velocity, jerk and some other things are hardcoded in firmware. Actual values are pretty low (velocity is 350mm/s2 for example)
I moved big parts of Vendor-specific code into VendorCode.cpp and VendorCode.h.
Then I prepared some cleanup from small parts of code by using defines. It allowed me to align source files with original Marlin's firmware.
When cleanup was done I prepared patch for original Marlin's firmware and got Marlin with small specific changes for Anycubic Chiron.
I don't think it is necessary to apply changes on Marlin 2.0 because I don't see big difference in feature set. For me Marlin 2.0 focused on architecture changes which allows use it on different hardware. Please correct me if I'm wrong.
But now I can work with Marlin's firmware as it described on most internet resources. I don't need looking back on Anycubic's firmware.
To Do
Continue cleaning up sources by removing Vendor-specific parts
Make some Vendor-specific files named correctly
Find possibility to remove some Vendor-specific functionality and/or replace it by existing Marlin's parts
Improve default setting for printer. Will be great to calloborate with community to find best default settings
Add support of Marlin 2.0 (if it is required)
Check/fix work of table calibration feature
Add changes which will allow to use firmware for other Anycubic's printers. As for me source code mostly same and it shouldn't be hard.