Перейти к содержанию

MCU в Klipper

Klipper состоит из двух основных частей:

  • хост - Linux-компьютер с Klipper, например Raspberry Pi, Orange Pi, мини-ПК или другое устройство;
  • MCU - микроконтроллерная плата, которая физически управляет пинами.

Хост принимает высокоуровневые решения, читает конфигурацию, обрабатывает G-code и планирует действия. MCU выполняет точные команды на железе: включает выходы, читает входы, считает время, генерирует PWM и сообщает состояние обратно хосту.

Что такое MCU в Klipper

MCU - это micro-controller unit, то есть микроконтроллерный блок.

В контексте Klipper это конкретная плата:

  • основная плата 3D-принтера;
  • отдельная плата на RP2040;
  • отдельная плата на STM32;
  • CAN/toolhead-плата;
  • дополнительная плата ввода-вывода.

MCU не "думает как весь принтер". Она выполняет низкоуровневые команды, которые присылает хост. Это разделение делает Klipper гибким: можно добавить вторую или третью MCU и использовать её пины в одной общей конфигурации.

Как это выглядит

Упрощённая схема:

Хост Klipper и несколько MCU

Хост общается с MCU по USB, UART или CAN. В конфигурации Klipper каждая MCU получает свою секцию, а пины этой MCU потом используются в настройках вентиляторов, датчиков, нагревателей, выходов и других модулей.

Что делает хост

Хост:

  • хранит и читает printer.cfg;
  • принимает G-code и команды пользователя;
  • ведёт высокоуровневую логику;
  • планирует действия во времени;
  • синхронизирует связь с MCU;
  • решает, когда нужно включить вентилятор, нагреватель или другой выход;
  • получает показания и статусы от MCU.

Хост не подаёт ток на вентилятор и не читает термистор напрямую, если эти пины находятся на внешней плате. Он говорит MCU, что нужно сделать.

Что делает MCU

MCU:

  • физически управляет GPIO;
  • читает входы и датчики;
  • генерирует PWM;
  • выполняет команды в нужное время;
  • сообщает хосту результаты;
  • уходит в shutdown при ошибках, если прошивка и конфигурация так настроены.

Например, если в конфигурации есть вентилятор на пине PA8, именно MCU с этим пином меняет его состояние. Хост только отправляет команду.

Что значит [mcu]

В printer.cfg секция [mcu] описывает микроконтроллер, с которым должен соединиться Klipper.

Пример для USB/serial:

[mcu]
serial: /dev/serial/by-id/usb-Klipper_stm32f446xx_...

Для дополнительной MCU используют имя:

[mcu chamber]
serial: /dev/serial/by-id/usb-Klipper_rp2040_...

После этого пины дополнительной MCU можно указывать с префиксом:

[temperature_sensor chamber_air]
sensor_type: Generic 3950
sensor_pin: chamber:gpio26

[fan_generic chamber_fan]
pin: chamber:gpio15

Смысл простой: chamber:gpio15 означает "пин gpio15 на MCU с именем chamber".

Имена пинов и префиксы

Klipper использует аппаратные имена пинов.

Примеры:

  • для STM32: PA4, PB0, PC13;
  • для RP2040: gpio15, gpio26;
  • для Arduino/AVR могут встречаться свои алиасы.

Перед именем пина могут быть символы:

  • ! - инвертировать логику;
  • ^ - включить подтяжку вверх, если MCU это поддерживает;
  • ~ - включить подтяжку вниз, если MCU это поддерживает.

Пример:

[gcode_button chamber_door]
pin: ^chamber:gpio12

Это уже не "магия Klipper", а конкретная настройка входного пина на конкретной MCU. Поэтому распиновка платы должна быть точной.

Зачем нужна дополнительная MCU

Дополнительная MCU полезна, когда нужно вынести периферию в отдельный блок.

Примеры для iDryer-подобных устройств:

  • датчики температуры и влажности камеры;
  • вентилятор циркуляции;
  • вентилятор фильтра;
  • подсветка;
  • кнопка двери;
  • датчик открытия крышки;
  • сервопривод заслонки;
  • отдельный модуль с тензодатчиком;
  • дополнительный OLED или RFID;
  • аварийный вход, который удобнее завести ближе к устройству.

Такой подход удобен, если устройство должно быть частью Klipper-системы, а не отдельной Wi-Fi коробкой.

MCU-подход или автономный контроллер

Есть два разных пути.

MCU в Klipper:

  • устройство управляется из printer.cfg;
  • пины видны Klipper;
  • можно использовать существующие секции fan_generic, temperature_sensor, heater_generic, output_pin;
  • состояние видно в интерфейсе Klipper;
  • нужна связь с хостом.

Автономный контроллер:

  • устройство само принимает решения;
  • может иметь Wi-Fi, веб-интерфейс, MQTT;
  • не обязано зависеть от принтера;
  • требует собственной прошивки и логики безопасности;
  • не подключается как обычная [mcu] в Klipper.

ESP32 часто хорош для автономного Wi-Fi устройства. RP2040 и STM32 часто удобнее как проводная MCU в Klipper.

USB, UART и CAN

Связь между хостом и MCU может быть разной.

USB - самый частый и простой вариант для одной-двух плат рядом с хостом. Удобен для Pico, STM32-плат и многих printer board.

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

CAN - удобен для удалённых модулей, toolhead-плат и более устойчивой проводной архитектуры. Но для CAN нужны поддерживаемый микроконтроллер, CAN-трансивер, правильная шина, терминаторы и настройка Linux-интерфейса.

Для первого дополнительного контроллера обычно проще USB. CAN имеет смысл, когда есть реальная причина: длиннее проводка, несколько узлов, toolhead-плата или уже готовая CAN-инфраструктура.

MCU не защищает силовую часть

Важно: добавление MCU не делает нагрузку безопасной.

Если MCU управляет вентилятором, нагревателем или SSR, всё равно нужны:

  • правильный силовой ключ;
  • нормальное питание;
  • провода и клеммы под ток;
  • предохранитель;
  • независимая термозащита для нагревателя;
  • безопасный корпус;
  • проверка поведения при ошибке связи или выключении хоста.

Если хост потерял связь с MCU, Klipper может остановить систему, но это не заменяет аппаратную защиту. Нагреватель должен быть спроектирован так, чтобы одиночный отказ прошивки, датчика, SSR или связи не приводил к опасному режиму.

Что проверить перед выбором MCU

Перед покупкой платы для Klipper MCU проверь:

  • поддерживается ли микроконтроллер Klipper;
  • есть ли готовая конфигурация или инструкции для платы;
  • какой способ связи нужен: USB, UART или CAN;
  • как плата прошивается;
  • хватает ли GPIO, ADC, PWM, I2C, SPI, UART;
  • какие пины реально выведены;
  • какая логика GPIO: обычно 3.3V;
  • нужны ли драйверы/MOSFET/SSR для нагрузок;
  • есть ли документация по питанию и распиновке;
  • что произойдёт при потере связи с MCU.

Для первой дополнительной MCU обычно проще выбрать RP2040/Pico или известную STM32-плату с понятной инструкцией.

Типовые ошибки

  • думают, что MCU сама содержит всю логику Klipper;
  • путают хост и MCU;
  • добавляют [mcu chamber], но потом указывают пин без префикса chamber:;
  • берут пин из чужой распиновки;
  • прошивают не тот тип микроконтроллера в make menuconfig;
  • не проверяют bootloader offset и способ прошивки платы;
  • используют нестабильный USB-кабель;
  • подключают 5V к 3.3V входу;
  • питают нагрузку от GPIO;
  • считают программный shutdown заменой предохранителя и thermal fuse.

Главное

В Klipper MCU - это плата, которая физически управляет пинами, а хост планирует и координирует работу. Дополнительная MCU позволяет расширить систему и вынести периферию ближе к устройству.

Для iDryer-подобных задач это удобно для вентиляторов, датчиков, фильтра, подсветки, кнопок и некоторых исполнительных механизмов. Но силовая часть и безопасность нагревателей остаются отдельной аппаратной задачей.

Материалы по теме