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 и использовать её пины в одной общей конфигурации.
Как это выглядит¶
Упрощённая схема:
Хост общается с 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 используют имя:
После этого пины дополнительной 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 это поддерживает.
Пример:
Это уже не "магия 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-подобных задач это удобно для вентиляторов, датчиков, фильтра, подсветки, кнопок и некоторых исполнительных механизмов. Но силовая часть и безопасность нагревателей остаются отдельной аппаратной задачей.
Материалы по теме¶
- Klipper: Code overview - архитектура Klipper, разделение host code и micro-controller code, временная модель и GPIO.
- Klipper: Configuration reference - Micro-controller configuration -
[mcu], дополнительные[mcu name], формат имён пинов и префиксы. - Klipper: Installation - Building and flashing the micro-controller - общий процесс
make menuconfig, сборки и прошивки MCU. - Klipper: Bootloaders - почему у разных плат разные способы прошивки и почему важно учитывать bootloader.
- Klipper: CANBUS - CAN-связь,
canbus_uuid, USB-to-CAN bridge и требования к аппаратной части.