Николай Павлов / Engineering Инженерный кейс · 2026

Embedded · Reverse engineering · Klipper

Как я поставил голову Anycubic Kobra X на самодельный CoreXY

Я интегрировал четырёхканальную голову ACE GEN2 в самодельный CoreXY, сохранив её штатную электронную плату и всю исполнительную механику. Самое сложное было не закрепить модуль на портале, а разобраться в его электронике, подготовить для контроллера головы прошивку Klipper и собрать надёжный цикл смены четырёх материалов с резаком, датчиками и определением Z по усилию на сопле.

  • 4 канала · 1 сопло
  • GD32F303 + STM32F446
  • UART · 576000 бод
  • ≈250 с · полный T-цикл
  • Стол · 320 × 320 мм
Голова Anycubic Kobra X ACE GEN2, установленная на портале самодельного CoreXY-принтера
Общий вид экспериментальной установки после интеграции ACE GEN2.

01 · Задача

Что нужно было подружить

ACE GEN2 — это не просто экструдер. В одном корпусе у неё четыре входа филамента, селектор каналов, общий привод подачи, механический резак, хотэнд, два вентилятора, семисегментный индикатор, датчики движения по каждому каналу и тензодатчик в сопле. На собственной плате стоят микроконтроллер, драйверы двигателей и силовые ключи.

Отдельно стоящая четырёхканальная печатающая голова Anycubic Kobra X ACE GEN2 в сборе
Рисунок 1. Голова ACE GEN2 на лабораторном стенде до установки на принтер.

Подключить такую голову как обычный экструдер нельзя. Сначала нужно было понять, как с ней разговаривать, какой узел за что отвечает, чем подтверждать каждое движение и как безопасно останавливаться при ошибке. Базой стал самодельный CoreXY на алюминиевом профиле со столом 320 × 320 мм. Кинематикой управляет BTT Octopus на STM32F446, а Raspberry Pi 3 с Klipper, Moonraker и Mainsail отвечает за хостовую часть.

Мне было важно не просто заставить механику двигаться, а сделать так, чтобы у каждого действия было проверяемое подтверждение, а при его отсутствии система останавливалась.

Проверка узлов

Проверка шла от безопасного к рискованному: сначала осмотрены компоненты и прозвонена плата без питания, затем плата запущена от лабораторного источника с ограничением тока, записан UART-обмен и отдельно проверены исполнительные механизмы. На принтер голова попала только после этого. Функция считалась рабочей, когда команда стабильно давала ожидаемое действие и его можно было подтвердить независимо: импульсами энкодера, датчиком, током, температурой или выходом материала из сопла.

02 · Контроллеры

Кто за что отвечает

Первый вариант сохранял штатную прошивку и эмулировал для неё материнскую плату Anycubic. Удалось восстановить идентификацию устройства, часть команд и общую модель каналов. Но закрытый протокол не давал достаточно надёжно связать команду, действие механизма и его подтверждение. Поэтому контроллер головы переведён на прошивку, совместимую с Klipper.

Основной MCU · BTT Octopus STM32F446, USB CDC, кинематика CoreXY, ось Z, нагреватель стола и основной экран ST7920.
MCU головы · KXHead GD32F303, CP2102, UART 3,3 В на 576000 бод, локальное исполнение событий головы.

Klipper раздаёт события двум MCU. Octopus занимается кинематикой CoreXY, осью Z и нагревателем стола. GD32F303 локально управляет головой: селектором, подачей, хотэндом и датчиками. Связь с KXHead организована через CP2102 по UART 3,3 В на скорости 576000 бод. После этого EBB42, BLTouch и отдельный датчик окончания филамента больше не нужны.

Схема распределённой архитектуры Raspberry Pi, BTT Octopus и контроллера головы KXHead
Рисунок 2. Разделение функций между хостом, основным MCU и контроллером головы.
Плата головы Anycubic Kobra X с микроконтроллером GD32F303 и подписанными тестовыми точками
Рисунок 3. Плата контроллера головы: GD32F303, силовые драйверы, тестовые точки и разъёмы датчиков.

03 · Плата и прошивка

Плата и обновление прошивки

Назначение узлов восстанавливалось по маркировке компонентов, прозвонке цепей и стендовым испытаниям с ограниченным током. Так удалось найти два шаговых привода, четыре пары энкодерных входов, четыре сигнала ready, нагреватель, термистор, два вентилятора, индикатор, акселерометр и АЦП CS1237 для тензомоста. Отдельно восстановлена разметка flash-памяти GD32F303.

ОбластьАдресНазначение
Bootloader0x08000000Штатный загрузчик
Application0x08004000Рабочая прошивка MCU
Staging0x08012000Предварительная запись образа
Metadata0x0801F800Признак готовности обновления

Обновление сделал транзакционным. Новый образ сначала записывается в staging-область, затем полностью читается обратно и сравнивается с исходным. Метаданные, разрешающие перенос в application, появляются только если совпали размер и содержимое. Если связь оборвётся, рабочая прошивка не меняется, а обновление можно повторить без внешнего программатора.

Схема безопасного обновления прошивки головы через UART и staging-область flash
Рисунок 4. Разметка flash и транзакционный порядок обновления через UART.
Голова Anycubic на лабораторном стенде при питании 24 вольта и подключении через UART
Рисунок 5. Первичный стенд: питание 24 В, контроль тока и UART через CP2102.

04 · Четыре канала

Как устроена подача филамента

В ACE GEN2 нет четырёх независимых экструдеров. Один двигатель крутит общий привод подачи, а второй ставит селектор напротив нужного тракта. Поэтому канал — это не просто номер, а набор параметров: позиция селектора, направление движения, входы encoder/ready и цифра на индикаторе. Позиции измерены и собраны в одну таблицу конфигурации.

КаналПозиция селектораНаправление
131,4прямое
215,7прямое
362,8зеркальное
447,1зеркальное

Энкодеры подтверждают, что пруток действительно прошёл заданное расстояние, но не помогают уверенно определить направление: наблюдаемые окна каналов A и B не перекрываются. На стенде получилось 0,65–0,73 импульса на миллиметр. Это рабочий инженерный порог, а не метрологическая характеристика. Подача идёт шагами по 20 мм; после каждого шага система ждёт не меньше 10 импульсов. Сигнал ready говорит только о том, что пруток прошёл конкретную точку тракта, а не о наличии материала на катушке.

Схема четырёх трактов филамента, общего селектора, подачи, резака и цикла смены материала
Рисунок 6. Тракты филамента и конечный автомат смены материала.
Внутреннее устройство четырёхканальной головы Anycubic Kobra X
Рисунок 7. Внутренняя компоновка ACE GEN2: приводы, каналы филамента, вентилятор и жгуты датчиков.

05 · Смена материала

Смена материала по шагам

Команда выбора инструмента запускает последовательность шагов с понятными условиями перехода. Если на каком-то шаге нет ожидаемого физического признака, цикл останавливается именно там. Семисегментный индикатор сам показывает активный канал от 1 до 4.

  1. ТермоподготовкаПроверка температуры хотэнда и разрешения на движение филамента.
  2. РезКаретка проходит X=333, нажимает пружинный резак в X=347 и освобождает его в X=328.
  3. ОтводТекущий материал выводится участками по 20 мм под контролем энкодера и ready-сенсора.
  4. ВыборСелектор переходит в измеренную позицию нового канала.
  5. ПодачаНовый пруток продвигается до подтверждения движения и достижения зоны хотэнда.
  6. ПродувкаЧерез сопло подаётся 100 мм материала, после чего управление возвращается печати.

Полный цикл занимает около 250 с. На принтере проверены переход 1→2 и автоматические циклы 4→3 и 3→4. Успешный переход подтверждали импульсы нужного энкодера, выход материала из сопла и цифра на индикаторе, совпадающая с выбранным трактом. Если импульсов нет, цикл прекращается, голова паркуется вне модели и без подтверждения дальше не идёт.

06 · Калибровка Z

Z по касанию соплом

Механический Z-концевик заменён сигналом тензомоста, который считывает CS1237 с усилением 128 и частотой 640 выборок в секунду. Ноль определяется при запуске и ещё раз перед базированием при текущей температуре хотэнда: нагрев и состояние механики заметно меняют исходный уровень сигнала.

Порог срабатывания выбрал равным 75 внутренним единицам. На стенде с контрольными массами это примерно 50 г нагрузки. Это инженерная оценка, а не аттестованное измерение силы. Когда порог превышен, GD32F303 отдаёт событие виртуального Z-endstop, а Klipper через trsync синхронно останавливает ось. Проверены одиночные защищённые касания и серии из трёх повторов. Рабочая карта поверхности содержит 7 × 7 точек при температуре стола 70 °C.

Алгоритм калибровки оси Z по тензодатчику сопла и синхронной остановке Klipper trsync
Рисунок 8. Последовательность определения Z и построения горячей карты поверхности.
CS1237640 SPS, усиление 128, автоматический tare при текущей температуре.
Klipper trsyncВиртуальный endstop и синхронная остановка движения Z при контакте.

07 · Связь и задержки

Почему для этого узла выбран UART

Сначала система работала по CAN 500 кбит/с через Waveshare HAT на MCP2515. Когда пошёл поток данных тензодатчика, появились потери связи, переполнение приёмной очереди и ошибки планирования. Уменьшение частоты публикации помогало, но не устраняло первопричину. В итоге Octopus подключён напрямую по USB, а голове выделен отдельный быстрый UART.

Отдельные измерения показали задержки диспетчеризации Linux до 526,9 мс. На них влияли подробное синхронное логирование, расчёт от устаревшей метки события и отсутствие приоритета реального времени у Klipper. После сокращения логов, перехода на монотонное время и запуска с политикой FIFO и приоритетом 50 в контрольной серии задержек выше разрешения используемого измерителя не было. Диагностические счётчики оставил в прошивке, чтобы дальше следить за ситуацией.

08 · Защита

Что происходит, когда что-то пошло не так

Оба драйвера головы используют общий активный-low вход разрешения PC15. Программная блокировка не даёт селектору и приводу подачи двигаться одновременно, а watchdog снимает разрешение, если управляющие обновления прекращаются. Вентилятор радиатора включается при заданном нагреве или когда температура хотэнда поднимается выше 45 °C.

Контроль по участкамКаждые 20 мм подачи подтверждаются импульсами энкодера.
Единая карта каналовПозиция, направление, ready-сенсор и цифра индикатора задаются в одном месте.
Watchdog приводовОбщий PC15 отключает оба привода при потере управляющего обновления.
Безопасная парковкаПри ошибке голова уходит за пределы модели, а цикл не продолжается вслепую.

Эти ограничения появились не на всякий случай, а после реальных сбоев. Ошибка в номере или направлении канала стачивала пруток, поэтому проверка по энкодеру теперь есть в каждой фазе подачи. После электростатического разряда один раз завис контроллер. Причинная связь пока не доказана, поэтому отдельная ESD-проверка остаётся в списке следующих испытаний.

09 · Результат

Что в итоге работает

Голова Anycubic работает на самодельном CoreXY. Проверка подтвердила позиционирование всех четырёх трактов, показ активного канала, нагрев до 230 °C, экструзию PETG, работу обоих вентиляторов, механического резака и контроль по энкодерам. Контур Z откалиброван, принтер печатает реальные задания.

ПодсистемаСтатусПодтверждение
Все четыре позиции селектораПодтвержденоФизическое сопоставление каналов и индикатора
Нагрев, PETG и вентиляторыПодтверждено230 °C и выход материала из сопла
Переходы 1→2, 4→3, 3→4ПодтвержденоПолные циклы с резом, отводом и продувкой
Горячая сетка и первый слойПодтвержденоСетка 7 × 7 и Z-offset используются в рабочей печати
Эксплуатационный циклПодтвержденоПринтер выполняет реальные задания печати
Prime tower и продувкаНастроеноРабочий профиль применяется при печати

Процесс работы

Видео 1. Стендовый запуск головы во время исследования интерфейса.