Интерфейс CAN¶
CAN - это интерфейс связи для нескольких устройств на общей дифференциальной линии. Расшифровка: Controller Area Network.
CAN пришёл из автомобильной и промышленной электроники, но в 3D-принтерах стал популярным для toolhead-плат, удалённых MCU и модулей, где нужно вести связь дальше и надёжнее, чем через I2C/SPI.
Где CAN полезен¶
В принтерной и iDryer-подобной периферии CAN используют для:
- toolhead-платы на голове принтера;
- дополнительной MCU в удалённом блоке;
- уменьшения количества проводов в жгуте;
- связи с CAN-платой фильтра, камеры или сушилки;
- распределённой системы из нескольких контроллеров;
- случаев, где USB или длинный I2C/SPI неудобны.
CAN особенно полезен, когда узел находится далеко от хоста или основной платы, а рядом есть моторы, нагреватели и другие источники помех.
CANH, CANL и GND¶
Физическая CAN-шина обычно использует:
CANH;CANL;- иногда
GNDили общий reference-провод; - питание модуля отдельно, если оно нужно.
Сигнал передаётся как разница между CANH и CANL. Поэтому CAN лучше переносит помехи, чем одиночные сигнальные линии.
Упрощённая схема:

Источник: Wikimedia Commons, EE JRW, CC BY-SA 4.0
Практически для проводки часто используют витую пару для CANH/CANL. GND зависит от конкретной схемы, плат и документации, но в небольших DIY-системах общий reference часто нужен для стабильной работы и безопасности интерфейса.
Нужен CAN-трансивер¶
Важно: поддержка CAN в микроконтроллере и наличие CAN на плате - не одно и то же.
Для работы CAN нужны:
- микроконтроллер с CAN-контроллером или подходящей поддержкой в прошивке;
- CAN-трансивер на плате;
- правильные
CANH/CANLразъёмы; - питание трансивера;
- терминаторы;
- прошивка, собранная под CAN.
Если в техническом описании микроконтроллера есть CAN, но на плате нет трансивера, напрямую подключиться к CAN-шине нельзя.
Топология и терминаторы¶
CAN - это шина. Хорошая топология выглядит как линия с узлами, подключёнными короткими ответвлениями.
Обычно нужны два терминатора по 120 Ohm:
- один на одном физическом конце шины;
- второй на другом физическом конце шины.
Не один, не три и не "на каждой плате". Именно два на концах.
Если питание выключено, на правильно терминированной шине мультиметр между CANH и CANL часто показывает около 60 Ohm, потому что два резистора по 120 Ohm стоят параллельно.
Многие платы имеют перемычку терминатора. Некоторые имеют встроенный терминатор без удобного отключения. Поэтому перед сборкой нужно смотреть схемы всех плат на шине.
Bitrate¶
У CAN должна совпадать скорость на всех узлах. В Klipper CAN часто используют 1000000, то есть 1 Mbit/s, но конкретное значение зависит от прошивки, настроек и длины шины.
Если bitrate разный, узлы не смогут нормально общаться.
Для длинной или проблемной проводки скорость может быть критичной. Чем выше скорость, тем требовательнее шина к топологии, терминаторам и качеству проводов.
CAN в Klipper¶
В Klipper CAN используется как способ связи с MCU.
Устройство на CAN обычно не указывается через serial:. Вместо этого в конфигурации используется canbus_uuid:
На стороне Linux обычно нужен интерфейс can0. Хост должен иметь CAN-адаптер:
- USB-CAN адаптер;
- плата в режиме USB-to-CAN bridge;
- HAT/адаптер для SBC;
- другая поддерживаемая схема.
Klipper имеет инструмент для поиска canbus_uuid новых неинициализированных устройств. Важно понимать: если устройство уже настроено Klipper, оно может больше не появляться в списке как "новое".
USB-to-CAN bridge¶
Некоторые платы можно прошить в режиме USB-to-CAN bridge. Тогда плата подключается к хосту по USB, а для Linux выглядит как CAN-адаптер.
Это удобно, но есть важное ограничение: bridge-режим нужен для связи с настоящей CAN-шиной и другими CAN-узлами. Если у тебя только одна плата рядом с хостом и нет реальной CAN-шины, обычно проще использовать обычный USB/serial режим.
Также USB-to-CAN bridge не будет виден как /dev/serial/by-id/.... Его настраивают как CAN-интерфейс и используют canbus_uuid, а не serial:.
Когда CAN оправдан¶
CAN стоит рассматривать, если:
- нужно подключить toolhead-плату;
- нужно вести связь по длинному жгуту;
- нужно несколько удалённых MCU;
- хочется уменьшить количество проводов между движущейся частью и корпусом;
- уже есть готовая CAN-инфраструктура;
- выбранная плата хорошо документирована для Klipper CAN.
CAN может быть лишним, если:
- плата стоит рядом с хостом;
- нужна всего одна дополнительная MCU;
- USB работает стабильно;
- нет опыта с прошивкой,
can0, терминаторами и Linux-сетью; - выбранная плата плохо документирована.
Для первого простого дополнительного контроллера USB часто быстрее и понятнее. CAN имеет смысл, когда решает реальную проблему проводки или распределения плат.
CAN не питает нагрузку¶
CAN - это только связь.
Если CAN-плата управляет вентилятором, нагревателем, SSR или сервоприводом, ей всё равно нужны:
- питание платы;
- питание нагрузки;
- MOSFET/драйвер/SSR;
- предохранители;
- нормальные клеммы;
- термозащита для нагревателей;
- безопасный корпус.
CAN не заменяет силовую электронику и не делает нагреватель безопасным.
Что проверить перед покупкой¶
Перед покупкой CAN-платы проверь:
- какой микроконтроллер стоит;
- поддерживает ли плата Klipper CAN;
- есть ли CAN-трансивер;
- где
CANHиCANL; - есть ли терминатор и как он включается;
- какой разъём используется;
- как плата питается;
- как плата прошивается;
- есть ли инструкция для
canbus_uuid; - нужен ли отдельный USB-CAN адаптер;
- есть ли схема и распиновка;
- какие пины и силовые выходы доступны.
Если продавец пишет "CAN" только потому, что чип теоретически это умеет, но на плате нет трансивера и документации, это плохой выбор.
Типовые ошибки¶
- перепутали
CANHиCANL; - забыли, что нужен CAN-трансивер;
- поставили один терминатор вместо двух;
- включили терминаторы на каждой плате;
- не проверили сопротивление между
CANHиCANL; - выбрали разный bitrate на узлах;
- ждут
/dev/serial/by-idот USB-to-CAN bridge; - прошили плату под USB, а подключают как CAN;
- прошили под CAN, но не настроили
can0; - сделали звезду из длинных ответвлений вместо шины;
- считают CAN способом питания нагрузки.
Главное¶
CAN - хороший интерфейс для удалённых MCU, toolhead-плат и распределённых систем внутри принтера. Он использует дифференциальную пару CANH/CANL, требует CAN-трансиверов, правильной топологии и двух терминаторов на концах шины.
Для Klipper CAN полезен, но сложнее USB: нужно прошить плату под CAN, настроить адаптер/can0, найти canbus_uuid и проверить физическую шину. Используй CAN там, где он действительно упрощает проводку или повышает устойчивость связи.
Материалы по теме¶
- Klipper: CANBUS - официальная документация Klipper по CAN: hardware, host adapter,
can0,canbus_uuid, терминаторы и USB-to-CAN bridge. - Klipper: CANBUS protocol - как Klipper назначает CAN node id и использует
canbus_uuid. - CAN Bus Debugger: CAN Bus Termination Explained - практическое объяснение двух терминаторов
120 Ohm, измерения60 Ohmи типовых ошибок. - DigiKey: CAN Bus explained - общий обзор CAN-шины, дифференциальной связи и применения в распределённых системах.
- Texas Instruments: Introduction to CAN - базовое описание физического уровня CAN, трансиверов и типовой сети.