====== CAN Grundlagen ====== CAN (Controller Area Network) wurde 1986 von Bosch entwickelt, um Kabelbäume leichter und effizienter zu gestalten. Das Bussystem ist also gut dafür geeignet, in einem 3D Drucker zur Verkabelung eingesetzt zu werden. Die Vorteile liegen klar auf der Hand: * mehr Störsicherheit als bei serieller Übertragung (durch differentielle Signalleitungen) * weniger Overhead als bei USB (dafür aber auch deutlich langsamer) * deutlich weniger Kabel - mit Zusatzplatine am Druckkopf reichen 4 Leitungen aus (inkl. Strom) * mehrere Teilnehmer an einen Bus anschließbar (also auch das Drucker-Board selber) * Kommunikation schon über 2 Leitungen realisierbar ===== YouTube Video #48 ===== {{youtube>y823HaBT_Sc?half}} \\ ===== verwendete Hardware ===== * Raspberry Pi mit USB oder HAT * andere SBCs mit USB (Anbindung über SPI möglich) * Drucker Board (bsp. Spider oder Octopus Board) * Kopf Board (bsp. EBB36, EBB42, ...) ===== Buskoppler ===== Ein CAN Buskoppler kommt immer dann zum Einsatz, wenn das Gerät keinen nativen CAN Anschluss besitzt. * USB BTT U2C \\ {{:wip:pasted:20230418-213000.png}} * aktuelle Firmware 2.1 \\ https://github.com/Esoterical/voron_canbus/tree/main/can_adapter/BigTreeTech%20U2C%20v2.1 * https://github.com/Esoterical/voron_canbus/tree/main/can_adapter * {{:wip:pasted:20230422-232126.png}} * Wenn Klipper connected war findet query kein Board !!! * USB Fysetec UCAN \\ {{:wip:pasted:20230418-213056.png}} * Raspberry Pi CAN HAT \\ {{:wip:pasted:20230418-212840.png}} * SPI direkt verbunden (wie HAT) \\ {{:wip:pasted:20230418-212856.png}} ===== Transceiver ===== Der CAN Transceiver stellt die Verbindung dar zwischen den CAN Daten die geschrieben und gelesen werden sollen und dem physikalischem CAN BUS. Er „übersetzt“ sozusagen die Daten in passende Bussignale. Von diesen Transceivern (= Gerät was lesen und schreiben kann) gibt es eine ganze Menge, jedoch sind sie sich alle ziemlich ähnlich - meist kleine 8 pinnige ICs. Hier eine kleine Übersicht: * SN65HVD23x (Vcc 3.3V) \\ https://www.ti.com/lit/ds/symlink/sn65hvd230.pdf \\ https://www.reichelt.de/high-speed-can-transceiver-1-mbit-s-3-3-v-so-8-sn-65hvd230d-p58427.html?search=SN65HVD230 * TCAN33x (Vcc 3.3V) \\ https://www.ti.com/lit/ds/symlink/tcan330.pdf?ts=1655887915717 * XINLUDA XL1050 (Vcc 5.0V) \\ https://www.micros.com.pl/mediaserver/UITJA1050t_XL_0001.pdf * SN65HVD1050 (Vcc 5.0V) \\ https://www.ti.com/lit/ds/symlink/sn65hvd1050.pdf * MCP2515 (Vcc 5.0V) \\ https://ww1.microchip.com/downloads/en/DeviceDoc/MCP2515-Stand-Alone-CAN-Controller-with-SPI-20001801J.pdf * MCP2542 (Vcc 5.0V) \\ http://ww1.microchip.com/downloads/en/devicedoc/20005514a.pdf * MCP2551 (Vcc 5.0V) \\ http://ww1.microchip.com/downloads/en/devicedoc/21667e.pdf * TJA1050 (Vcc 5.0V) \\ https://www.nxp.com/docs/en/data-sheet/TJA1050.pdf ===== Verkabelung ===== * Immer Gleiches mit Gleichem verbinden -> CAN L an CAN L ... * CAN H & CAN L über verdrillte, gleich lange Leitungen führen (zur Not geht auch nicht verdrilltes Kabel) * keine Sternverkabelung aufbauen! Die Busteilnehmer werden eher wie auf einer Perlenkette aneinander gereiht. * Kabel am besten mit einem Wellenwiderstand / Impedanz von 120Ω (108...132Ω empfohlen) * https://www.elektronik-kompendium.de/sites/grd/0301036.htm * http://www.afug-info.de/Tipps-Tricks/Impedanz-messen/ * Der Wellenwiderstand (ZW) ist eine Eigenschaft von Leitungen und gibt an, welcher elektrische Widerstand an das Ende der Leitung angeschlossen werden muss, damit die elektrische Energie effektiv durch die Leitung übertragen wird. Wenn der Widerstand angepasst ist, werden Reflektionen reduziert und die Signalübertragung wird optimiert. * nicht zu dünnes Kabel verwenden (bis 40m Länge -> 0,25 - 0,34mm²) * zu dicke Kabel lassen sich schlecht crimpen - vor allem bei einer Weiterleitung wo 2 Kabel zusammenlaufen * Stichleitungen möglichst meiden * Masse \\ Im Falle von Kupferleitungen arbeitet der CAN-Bus mit zwei verdrillten Adern, CAN_HIGH (CAN_H) und CAN_LOW (CAN_L) (symmetrische Signalübertragung). CAN_GND (Masse) als dritte Ader ist optional, jedoch oft zusammen mit einer vierten Ader zur 5-V-Stromversorgung vorhanden. * Vcc Optional * Schirmung \\ Meiner Meinung nach ist es das wichtigste den Schirm nur an einer Kabelseite auf Masse zu legen und da wurde ich die Seite wählen wo mit der größten Einstreuung zu rechnen ist, damit die Störungen auf kürzesten Weg gegen Masse geleitet wird. \\ Grundsätzlich gehört ein Schirm HF-mässig auf beiden Seiten an Masse. DC- bzw NF-mässig will man ihn meistens (aber nicht immer) nur einseitig angebunden haben, um Masseschleifen zu verhindern. Daher wird meistens eine Seite nur kapazitiv geerdet. Der Kapazitätswert liegt typßisch zwischen 100 pF und 10 nF. Um zu vermeiden, dass sich der Kondensator auflädt wird meist ein Entladewiderstand parallel geschaltet. Das sind typ. 470k - 1M. ==== Kabel ==== * Ölflex Classic 110 4*0.5 * igus CF9 \\ https://www.voelkner.de/products/71853/Igus-CF9.10.04-Schleppkettenleitung-Chainflex-CF-4G-1mm-Blau-Meterware.html * https://www.sab-kabel.de/produkte/trommelbare-leitungen/dr-cb-689-p-highflex.html * verdrillte 0,25 - 0,5mm² Adern === Stromberechnung === Wer noch Strom zum Kopf führen will sollte das vorher mal grob überschlagen. Gehen wir mal von 24V aus und ca. 60W Heizpatrone. Dazu kommen vielleicht nochmal 0,5A an Strom für die Elektronik. Dann bedeutet das wir müssen ca. 60W/24V = 2,5A + 0,5A = ~3A zum Kopf transportieren. Gehen wir weiter davon aus das im Drucker ca. 3m Kabel lieben (und das wäre schon arg lang) dann hat ein Kabel mit 0,5mm² Querschnitt überschlagen ca. 0,11Ω an Leitungswiderstand. Damit lässt sich dann der Spannungsabfall berechnen ... U = R*I = 0,11Ω * 3,0A = 0,33V. Am Kopf kommen also von den 24V ca. 23,7V an. Das passt :-) -> http://www.e-formel.info/elektrotechnik/leitungswiderstand.html ===== Endwiderstände ===== Wie im Schaubild oben zu sehen ist muss der CAN Bus am Ende mit jeweils einem 120Ω Widerstand terminiert werden. Wenn diese Endwiderstände nicht vorhanden sind kommt es auf dem Bus zu Signalreflektionen und damit früher oder später zu Störungen. Man muss allerdings aufpassen wo und wie viele Widerstände “aktiv” am Bus hängen. Denn viele Boards bringen die Möglichkeit mit diese 120Ω zu aktivieren. Auf einigen Boards (wie z.B. die billigen eBay CAN Transceiver) lässt sich der Widerstand auch gar nicht deaktivieren (mittels Jumper). Deshalb immer 2x hinschauen wo sich am BUS Kabel Widerstände befinden. Die Widerstände sollten immer am Ende des Kabels sein. Bei einem Drucker ist das oft direkt vorgegeben. Es gibt einen Buskoppler am Raspberry PI und ein Drucker Board z.B. am Druckkopf. Beide haben in der Regel einen 120Ω Widerstand direkt verbaut und der BUS ist damit sauber terminiert. Hängen aber mehrere Teilnehmer am CAN Bus kann das durchaus ein Thema werden. Im Zweifel Messen Wer sich unsicher bezüglich der korrekten Terminierung ist kann dies mit einem Digitalmultimeter (Ohm Messung) prüfen. Dazu alle Elektronik erstmal stromlos machen! Dann kann man mit dem Ohmmeter den Widerstand zwischen der L und H CAN Leitung messen. Dabei sollte das Messgerät ~60Ω anzeigen (Das Ergebnis von 120Ω parallel zu 120Ω). Ist das Ergebnis kleiner ist garantiert ein Widerstand zu viel aktiv am Bus. Misst man hingegen 120Ω fehlt ein Widerstand - bei unendlich Ω fehlen beide ;-) ===== CAN Bridge Mode ===== Macht das Sinn? Druickerboard eh nahe am Pi -> USB Kopf per CAN ===== Probleme ===== * USB Buskoppler hat keine / falsche Firmware * SPI Buskoppler haben meist geringen Buffer und sind abhängig von einem funktionierenden Treiber * SPI nicht aktiviert * Buskoppler muss auf dem SBC korrekt eingerichtet werden (Stichwort CAN Netzwerk Interface) * Buskoppler (oder Board) hat eine falsche Geschwindigkeit eingestellt * Druckerboard und oder Kopfboard muss eine Firmware installiert haben, die CAN unterstützt als Communication Interface * Transceiver muss vorhanden sein, muss richtige Spannung haben und korrekt mit Rx / Tx verdrahtet sein * Niemals Rx Tx an CAN L oder CAN H anklemmen ! * Keine passende Leitung (Wellenwiderstand, nicht gedrillt, zu dünn, ungeeignet wegen mechanischer Belastung (Biegeradien, Schleppkette, ...) * Abzweigungen sind schlecht gecrimpt / haben schlechten Kontakt (u.a. weil Kabel zu dick) * Generell falsch verdrahtet (Can H an Can L) * Stichleitungen sind vorhanden und ggf. zu lang * Endwiderstände falsch gesetzt oder gar nicht vorhanden / Bus hat stromlos keine 60 Ohm) * schlechte oder keine Masseverbindung * Ab 55 grad und mehr als 60cm länge machts probleme * https://klipper.discourse.group/t/usb-vs-can-performance/2423/10 * mcp2515 -> geringer Buffer * Konfig komplizierter als bei USB / Seriell * Schlecht zu testen wenn der CAN Bus nicht funktioniert * zu dicke Kabel -> lassen sich schlecht crimpen bei den meisten Steckern und man bekommt es schlecht in den Stecker geschoben -> dadurch schlechter Kontakt -> Ausfall * https://os.ratrig.com/blog/no-you-dont-want-to-use-can/ ===== Unterschiede CAN / USB ===== CAN (Controller Area Network) und USB (Universal Serial Bus) sind beide Bus-Protokolle, die zur Übertragung von Daten zwischen verschiedenen Geräten verwendet werden. Es gibt jedoch einige Unterschiede zwischen den beiden Protokollen, die zu unterschiedlichen Vor- und Nachteilen führen. ==== Vorteile von CAN gegenüber USB ==== * Hohe Zuverlässigkeit: CAN ist ein robustes Protokoll, das speziell für den Einsatz in industriellen Anwendungen entwickelt wurde. Es ist resistent gegen elektromagnetische Störungen und bietet eine höhere Fehlertoleranz als USB. * Längere Kabel: CAN kann über längere Kabelstrecken eingesetzt werden als USB. Dies macht es ideal für Anwendungen, bei denen Geräte über große Entfernungen miteinander kommunizieren müssen. * Bessere Integration: CAN wird häufig in industriellen Anwendungen wie der Automobilindustrie eingesetzt und ist in viele Systeme integriert. Dadurch ist es einfacher, CAN in vorhandene Systeme zu integrieren. ==== Nachteile von CAN gegenüber USB ==== * Langsamer Datentransfer: CAN ist im Vergleich zu USB langsam und hat eine begrenzte Bandbreite. Es ist nicht geeignet für Anwendungen, die eine schnelle Datenübertragung erfordern. * Weniger vielseitig: CAN ist auf eine bestimmte Art von Anwendungen beschränkt und eignet sich nicht für alle Arten von Anwendungen. Es ist nicht so vielseitig wie USB. * Keine integrierte Stromversorgung: Im Gegensatz zu USB bietet CAN keine Möglichkeit, Geräte mit Strom zu versorgen. Dies kann in einigen Anwendungen ein Nachteil sein. ==== Vorteile von USB gegenüber CAN ==== * Schneller Datentransfer: USB ist ein schnelles Protokoll und bietet eine hohe Bandbreite. Es ist ideal für Anwendungen, die eine schnelle Datenübertragung erfordern. * Vielseitiger: USB ist ein vielseitiges Protokoll und eignet sich für eine breite Palette von Anwendungen. Es kann für die Übertragung von Daten, Audio- und Videodaten sowie für das Laden von Geräten verwendet werden. * Stromversorgung: USB bietet eine Möglichkeit, Geräte mit Strom zu versorgen, was es ideal für Anwendungen wie mobile Geräte und Ladegeräte macht. ==== Nachteile von USB gegenüber CAN ==== * Geringere Zuverlässigkeit: USB ist anfälliger für elektromagnetische Störungen und bietet eine geringere Fehlertoleranz als CAN. * Kürzere Kabel: USB ist auf kürzere Kabelstrecken beschränkt als CAN, was es weniger geeignet für Anwendungen macht, bei denen Geräte über große Entfernungen miteinander kommunizieren müssen. * Schwierigere Integration: USB ist weniger in industrielle Anwendungen integriert als CAN und kann schwerer in vorhandene Systeme integriert werden.