CANBUS¶
Diese Dokumentation beschreibt die Kompatibilität zwischen Klipper und Can bus.
Geräte-Hardware¶
Klipper unterstützt derzeit CAN auf stm32, SAME5x und rp2040 Chips. Zusätzlich muss der Mikrocontrollerchip auf einer Platine sein, die einen CAN-Transceiver aufweist.
Um für CAN zu kompilieren, führen Sie make menuconfig aus und wählen Sie "CAN bus" als Kommunikationsschnittstelle. Schließlich kompilieren Sie den Mikrocontroller-Code und flashen ihn auf die Zielplatine.
Host Hardware¶
Um einen CAN-Bus zu verwenden, wird ein Host-Adapter benötigt. Es wird empfohlen, einen "USB-zu-CAN-Adapter" zu verwenden. Es gibt viele verschiedene USB-zu-CAN-Adapter unterschiedlicher Hersteller. Bei der Auswahl empfehlen wir zu prüfen, ob sich die Firmware aktualisieren lässt. (Leider haben wir festgestellt, dass manche USB-Adapter mit fehlerhafter Firmware laufen und gesperrt sind - prüfen Sie dies daher vor dem Kauf.) Achten Sie auf Adapter, die Klipper direkt (im "USB-zu-CAN-Bridge-Modus") ausführen können, oder die die candlelight-Firmware verwenden.
Es ist auch notwendig, das Host-Betriebssystem für die Verwendung des Adapters zu konfigurieren. Dazu wird normalerweise eine neue Datei mit dem Pfad /etc/network/interfaces.d/can0 mit folgendem Inhalt erstellt:
allow-hotplug can0
iface can0 can static
bitrate 1000000
up ip link set $IFACE txqueuelen 128
Endwiderstände¶
Ein CAN-Bus sollte zwei 120-Ohm-Widerstände zwischen den CANH- und CANL-Leitungen haben. Idealerweise befindet sich jeweils ein Widerstand an jedem Enden des Busses.
Beachten Sie, dass manche Geräte über einen eingebauten 120-Ohm-Widerstand verfügen, der sich nicht ohne Weiteres entfernen lässt. Manche Geräte enthalten überhaupt keinen Widerstand. Andere Geräte verfügen über einen Mechanismus zur Auswahl des Widerstands (üblicherweise durch Setzen eines "Pin-Jumpers"). Prüfen Sie unbedingt die Schaltpläne aller Geräte am CAN-Bus, um sicherzustellen, dass sich genau zwei 120-Ohm-Widerstände am Bus befinden.
Um zu prüfen, ob die Widerstände korrekt sind, kann man die Stromversorgung des Druckers unterbrechen und mit einem Multimeter den Widerstand zwischen den CANH- und CANL-Drähten messen - bei einem korrekt verdrahteten CAN-Bus sollte er ~60 Ohm anzeigen.
Suche nach der canbus_uuid für neue Mikrocontroller¶
Jedem Mikrocontroller auf dem CAN-Bus wird eine eindeutige Kennung zugewiesen, die auf der werkseitigen Chip-Kennung basiert. Diese ist in jedem Mikrocontroller fest kodiert ist. Um die Geräte-ID jedes Mikrocontrollers zu finden, stellen Sie sicher, dass die Hardware mit Strom versorgt und korrekt verdrahtet ist, und starten Sie dann:
~/klippy-env/bin/python ~/klipper/scripts/canbus_query.py can0
Wenn nicht initialisierte CAN-Geräte erkannt werden, meldet der obige Befehl Zeilen wie folgt:
Found canbus_uuid=11aa22bb33cc, Application: Klipper
Jedes Gerät hat eine eindeutige Kennung. Im obigen Beispiel ist 11aa22bb33cc die "canbus_uuid" des Mikrocontrollers.
Beachten Sie, dass das Werkzeug canbus_query.py nur uninitialisierte Geräte meldet - wenn Klipper (oder ein ähnliches Werkzeug) das Gerät konfiguriert, erscheint es nicht mehr in der Liste.
Klipper einstellen¶
Aktualisieren Sie die Klipper mcu configuration, um den CAN-Bus zur Kommunikation mit dem Gerät zu verwenden - zum Beispiel:
[mcu my_can_mcu]
canbus_uuid: 11aa22bb33cc
USB zu CAN-Bus Brückenmodus¶
Manche Mikrocontroller unterstützen die Auswahl des Modus "USB-zu-CAN-Bus-Bridge" während Klippers "make menuconfig". Dieser Modus ermöglicht es, einen Mikrocontroller sowohl als "USB-zu-CAN-Bus-Adapter" als auch als Klipper-Knoten zu verwenden.
Verwendet Klipper diesen Modus, erscheint der Mikrocontroller unter Linux als "USB-CAN-Bus-Adapter". Der "Klipper-Bridge-MCU" selbst erscheint so, als befände er sich auf diesem CAN-Bus - er kann über canbus_query.py identifiziert werden und muss wie andere CAN-Bus-Klipper-Knoten konfiguriert werden.
Einige wichtige Hinweise bei der Verwendung dieses Modus:
- Es ist notwendig, die Schnittstelle
can0(oder ähnlich) in Linux zu konfigurieren, um mit dem Bus zu kommunizieren. Die CAN-Bus-Geschwindigkeit und die Bit-Timing-Optionen des CAN-Bus unter Linux werden von Klipper jedoch ignoriert. Aktuell wird die CAN-Bus-Frequenz während "make menuconfig" festgelegt, und die unter Linux angegebene Busgeschwindigkeit wird ignoriert. - Wird der "Bridge-MCU" zurückgesetzt, deaktiviert Linux die entsprechende
can0-Schnittstelle. Um eine korrekte Verarbeitung der Befehle FIRMWARE_RESTART und RESTART sicherzustellen, wird empfohlen,allow-hotplugin der Datei/etc/network/interfaces.d/can0zu verwenden. Zum Beispiel:
allow-hotplug can0
iface can0 can static
bitrate 1000000
up ip link set $IFACE txqueuelen 128
- Der "Bridge-MCU" befindet sich nicht tatsächlich am CAN-Bus. Nachrichten von und zum Bridge-MCU werden von anderen Adaptern, die sich möglicherweise am CAN-Bus befinden, nicht gesehen.
- Die verfügbare Bandbreite sowohl zum "Bridge-MCU" selbst als auch zu allen Geräten am CAN-Bus wird effektiv durch die CAN-Bus-Frequenz begrenzt. Daher wird bei Verwendung des "USB-zu-CAN-Bus-Bridge-Modus" eine CAN-Bus-Frequenz von 1000000 empfohlen.
- Die Verwendung des USB-zu-CAN-Bridge-Modus ist nur dann sinnvoll, wenn ein funktionierender CAN-Bus mit mindestens einem weiteren Knoten (zusätzlich zum Bridge-Knoten selbst) vorhanden ist. Verwenden Sie eine Standard-USB-Konfiguration, wenn nur mit dem einzelnen USB-Gerät kommuniziert werden soll. Die Verwendung des USB-zu-CAN-Bridge-Modus ohne einen vollständig funktionierenden CAN-Bus (einschließlich Abschlusswiderständen und eines zusätzlichen Knotens) kann zu sporadischen Fehlern führen, selbst bei der Kommunikation mit dem Bridge-Knoten.
- Eine USB-zu-CAN-Bridge-Platine erscheint nicht als USB-Seriell-Gerät, sie wird beim Ausführen von
ls /dev/serial/by-idnicht angezeigt und kann in Klippers printer.cfg-Datei nicht mit einemserial:-Parameter konfiguriert werden. Die Bridge-Platine erscheint als "USB-CAN-Adapter" und wird in der printer.cfg als CAN-Knoten konfiguriert.
Tipps zur Fehlerbehebung¶
Siehe das CAN bus troubleshooting Dokument.