PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fragen zum CAN-Bus



Kampi
26.01.2012, 09:57
Hallo,

ich weiß nicht ob das Thema hier richtig aufgehoben ist aber es erschien mir am sinnvollsten es hier zu posten J

Also zu meinem Problem bzw. Frage.
Ich habe mir von Elektor Verlag das Buch „Controller Area Network Projects“ bestellt und lese es auch schon fleißig :D
Allerdings bin ich einer ein paar Fragen noch nicht ganz durchgestiegen….
In dem Buch steht, dass der CAN-Bus nur das Data Link Layer und das Physical Layer des ISO/OSI Models darstellt. Den genauen Unterschied zwischen den 7 Layern hab ich noch nicht so ganz verstanden (wahrscheinlich weil das Buch in Englisch ist :D)
Kann mir jemand noch mal den genauen Unterschied zwischen den Layern erklären?
Und dann habe ich noch eine Frage….
Ein einfacher CAN-Baustein (z.B. http://docs-europe.electrocomponents.com/webdocs/0a78/0900766b80a78cdb.pdf) stellt (in diesem Fall) nur eine „Wandlung“ des UART Pegels auf CAN-H und CAN-L dar oder? Das komplette CAN-Protokoll, also mit Dataframe, CRC und RTR usw. muss ich dann im Mikrocontroller realisieren und quasi per UART auf diesen CAN-Baustein geben. Sehe ich das so richtig?
Und dann noch eine letzte, abschließende Frage
Der CAN-Bus ist ja ein Multi-Master Bus. Wenn ich das dann richtig verstanden habe gibt es dort keine „Baustein Hirachie“ (wie beim I²C mit Master und Slave) sondern jeder Baustein im CAN-Bus kann senden wann er will, wobei nur das Datenpaket auf dem Bus liegt was die höchste Priorität (also den niedrigsten Identifier hat) und dieses Datenpaket wird dann auch von allen CAN-Bausteinen empfangen und die Entscheidung ob das nun benötigt wird oder nicht wird dann von dem dazu gehörigen Mikrocontroller entschieden. Ist das so korrekt?

Danke fürs durchlesen und korrigieren :D
Englische Fachbücher sind nun mal etwas schwerer zu verstehen :D

lorcan
26.01.2012, 11:15
Zum Schichtenmodel guckst du hier (http://de.wikipedia.org/wiki/OSI-Modell).
Der Baustein ist wie du schon sagst ein Pegelwandler, wo du den Rest des Protokolls selber auf einem Controller implemtieren musst.
Bzgl. Multimaster: Stimmt das so grob.

EZ81
26.01.2012, 13:16
Und dann habe ich noch eine Frage….
Ein einfacher CAN-Baustein (z.B. http://docs-europe.electrocomponents.com/webdocs/0a78/0900766b80a78cdb.pdf) stellt (in diesem Fall) nur eine „Wandlung“ des UART Pegels auf CAN-H und CAN-L dar oder? Das komplette CAN-Protokoll, also mit Dataframe, CRC und RTR usw. muss ich dann im Mikrocontroller realisieren und quasi per UART auf diesen CAN-Baustein geben. Sehe ich das so richtig?

Theoretisch kann man das machen, da das CAN-Protokoll aber höchst komplex ist, nimmt man einen CAN-Controller wie MCP2515, der das CAN-Protokoll in Hardware beherrscht oder einen uC mit integriertem CAN-Controller (AT90CAN128 böte sich für AVR-erfahrene an).



Und dann noch eine letzte, abschließende Frage
Der CAN-Bus ist ja ein Multi-Master Bus. Wenn ich das dann richtig verstanden habe gibt es dort keine „Baustein Hirachie“ (wie beim I²C mit Master und Slave) sondern jeder Baustein im CAN-Bus kann senden wann er will, wobei nur das Datenpaket auf dem Bus liegt was die höchste Priorität (also den niedrigsten Identifier hat) und dieses Datenpaket wird dann auch von allen CAN-Bausteinen empfangen und die Entscheidung ob das nun benötigt wird oder nicht wird dann von dem dazu gehörigen Mikrocontroller entschieden. Ist das so korrekt?

Ergänzung: Die Nachrichten mit niedrigerer Priorität gehen nicht verloren, sondern der CAN-Controller versucht, sie solange nochmal zu versenden, bis die Übertragung erfolgreich war.
Beim Empfang bieten die üblichen Can-Controller eine Filterfunktion an, d.h. man kann vorgeben, welche IDs interessant sind, alle anderen werden schon in Hardware ignoriert und belasten den uC nicht

Kampi
26.01.2012, 14:05
Supi danke für die Antworten :D
Ich glaube ich hab sogar noch 8051er von Atmel Zuhause liegen die einen CAN-Bootloader haben.....war eine sehr teure Fehlbestellung, weil ich eigentlich welche mit RS232 Bootloader wollte....
Die sollten ja auch ein CAN-Interface haben denke ich mal....
Ich habe mir jetzt mal den MCP2515 angeschaut. Preislich ist der ja fast so günstig wie der Pegelwandler....vielleicht nehme ich doch den um paar Versuche mit dem CAN-Bus zu machen.
Was ich allerdings noch nicht verstehe....der Controller hat einen TXCAN und einen RXCAN Pin. Welcher ist den nun CAN-H und CAN-L?
Weil beim CAN-Bus ergibt doch die Spannungsdifferenz auf den beiden CAN-Leitungen eine 0 oder 1. Und was für einen Quarz nimmt man am besten für den Chip?

Nochmals danke für die Antworten :)

lorcan
26.01.2012, 16:23
RX-Can liest quasi den CAN-Bus im sog. Rezessivenmodus, und TX-Can schreibt auf den CAN-Bus im Activenmodus. Wird über den RS-Pin gesteuert.

Kampi
26.01.2012, 16:34
Ich hab mir gerade das Datenblatt vom CAN-Controller näher angeschaut und gesehen das die dort noch einen Bustreiber verwenden.
Kann ich das so machen das ich als CAN-Controller den hier nehme:

http://docs-europe.electrocomponents.com/webdocs/0806/0900766b808065ca.pdf

Und an den RXCAN und TX CAN dann RX und RX von dem hier anschließe:

http://docs-europe.electrocomponents.com/webdocs/0a78/0900766b80a78cdb.pdf

Sodass mir dieser Baustein dann den eigentlichen CAN-H und CAN-L Pegel herstellt. Würde das funktionieren?