Forum: Mikrocontroller und Digitale Elektronik CAN BUS Emulation / Raspberry PI / Arduino - Wie am besten??


von Tobias F. (itob)


Lesenswert?

Hallo Leute,

ich beschäftige mich seit einigen Wochen näher mit dem Thema IoT und 
habe mich schon mit entsprechender Hardware versorgt und auch schon ein 
paar gewisse Erfolgserlebnisse gehabt. Ich möchte mein Wissen gerne 
ausbauen und zwar über die CAN Kommunikation. Bisher habe ich meinen 
Raspberry und meinen Arduino UNO über I2C kommunizieren lassen und 
diverse Tutorials absolviert. Nun möchte ich gerne CAN Bus erlernen. Zu 
meinem Verständnis würde ich gerne erstmal wissen, was ich für ein 
Testsystem alles benötige (Hard- und Softwaremäßig)? Aktuell besitze ich 
wie schon erwähnt, einen Raspberry PI 3 mit Win 10 IoT, einen Arduino 
UNO + Starterkit und ein Arduino CAN Bus shield von SparkFun.

Benötige ich einen MCP1525 CAN Controller?
Benötige ich Treiber, wenn ja, welche?
Welche Hardwareknoten würdet ihr empfehlen für ein Testbussystem?
Würdet Ihr für den Anfang den Raspberry mit Win 10 IoT oder den Arduino 
zur CAN-Bus-Anbindung nehmen?

Bitte nicht erschlagen, wenn teilweise Fragen dabei sind, die keinen 
Sinn ergeben, denn ich bin absolut Neu in der Materie der embedded 
systems ;)

PS.: CanAtHome.de ist schon sehr gut, jedoch steige ich nach wie vor 
nicht dahinter bzw. seh immernoch nicht Lösungsweg um mein Testsystem 
aufbauen zu können.

Danke im Voraus!

von volksvorg (Gast)


Lesenswert?

Du brauchst 2 Konten für dein Testsystem.
Du kannst dem RPI auch mit einem CAN-Bus ausstatten. Ist aber nicht ganz 
trivial. Mit Windows 10 wirst du glaube ich nicht weit kommen. Es gibt 
zwar für den MCP2515 einen Linux Kernel Treiber aber der ist meines 
Wissens nicht im Standardkernel von Rasbian enthalten. D.h man muss den 
Kernel selber neu kompilieren. Kann sein das der Treiber mittlerweile im 
Standardkernel enthalten ist. Wenn du nach RPI +MCP2515 suchst findest 
du ein haufen Anleitungen. Habe gesehen das man fertige Boards
kaufen kann wo schon der MCP2515 inkl. CAN Tranciever verbaut ist. Bei 
Ebay so für 1.80€ zu haben.
Der CAN-Bus wird dann auf dem RPI softwaremassig über die Socket API 
angesprochen. Also ähnlich wie eine klassische Netzwerkverbindung über 
TCP/UDP.
Wie gesagt CAN-Bus mit dem RPI geht. Ist sogar sehr günstig 2-3 € max. 
für die zusätliche Hardware. Aber man muss den Kernel mit dem Treiber 
neu bauen.
Die Socket API von Linux bzw. BSD verstehen und man sollte wissen wie 
man
für Linux Programme in C erstellt.
So hast du am Ende zwei Knoten einmal dein RPI und dann dein Arduino 
Board.

von temp (Gast)


Lesenswert?

Im aktuellen Raspian (Jessie) ist der mcp251x.ko enthalten. Je nachdem 
was man machen will ist manchmal auch ein billiger USB-Adapter die 
bessere Lösung:
z.B.
http://www.fischl.de/usbtin/

Socket-Can ist eine Spezialität unter Linux. Wenn man Programme 
schreiben will die unter Windows und Linux laufen sollen wird es damit 
schwierig. Dagegen ist das Lawicel-Protokoll an einer virtuellen 
COM-Schnittstelle auf allen Betriebssystemen (Windows,Linux,OSX) 
lauffähig.

von Tobias F. (itob)


Lesenswert?

Danke für deine ausführliche Antwort! :)

volksvorg schrieb:
> Habe gesehen das man fertige Boards
> kaufen kann wo schon der MCP2515 inkl. CAN Tranciever verbaut ist. Bei
> Ebay so für 1.80€ zu haben.

Ich habe für den Arduino ein CAN-BUS-Shield welches einen CAN-Controller 
und CAN-Transceiver besitzt. Das ganze schaut so aus:
https://cdn.sparkfun.com/r/600-600/assets/learn_tutorials/3/8/0/BoardFullySoldered.jpg

Ich stelle mir jetzt folgendes vor: Angenommen ich habe 2 Arduino mit 
jeweils einen CAN-Bus-Shield. An jedem Shield hängt (irgend)ein Sensor 
z.B. Wasserstand oder Temperatur.
Wie verbinde ich die beiden Arduino das Sie ein CAN Bus System ergeben? 
Also wo/was ist die Leitung, an dem ich die beiden Arduino's anschließen 
müsste?
Zur Info: Auf dem CAN-Bus-Shield habe ich diverse Anschlüsse, u.a. 
CANH/CANL. Daran würde ich gerne z.B. (irgend)ein Sensor anschließen, 
was gibt es da und kann man die einfach so via CANH/CANL anschließen?

Ich würde gerne noch etwas Ordnung in meine Gedanken bekommen:
Folgende PDF http://www.ipsta.de/download/freies/CAN.pdf habe ich 
gefunden, die mir schon gut geholfen hat für das Verständnis. Auf Seite 
2 ist die physikalische Abbildung von einem CAN Bus zu sehen. Wenn ich 
jetzt die Elemente nehme, die ich besitze, wie müsste ich Sie in die 
Zeichnung reininterpretieren? Also was ist was?

Mein Verständnis ist so:
- In der Zeichnung wäre der MikroController mein Arduino
- In der Zeichnung wäre der CANController & CANTranceiver mein 
CAN-Bus-shield
- In der Zeichnung wäre die CAN-Busleitung "Was bei mir???"

Was ist der Bus, fehlen mir da nicht noch irgendwo die 120 Ohm 
Endstücke?


!! <-- WENN CAN MAL STEHT DANN SOLLEN GANZ ZUM SCHLUSS...
...die beiden Arduino vom RPI über I2C angesprochen werden, um die Daten 
der Senoren einzusammeln. (Ich weiß, es ist vllt nicht praktikabel,
aber ich möchte gerne mehr über CAN-Bus lernen und wie man die Daten 
visualisieren kann, deshalb so "umständlich")

: Bearbeitet durch User
von Soul E. (Gast)


Lesenswert?

Tobias F. schrieb:

> Mein Verständnis ist so:
> - In der Zeichnung wäre der MikroController mein Arduino
> - In der Zeichnung wäre der CANController & CANTranceiver mein
> CAN-Bus-shield
> - In der Zeichnung wäre die CAN-Busleitung "Was bei mir???"

ein paar Meter verdrilltes Kabel, das jeweils die Anschlüsse CAN_H und 
CAN_L aller CAN shields verbindet. Zusätzlich werden noch die Massen 
verbunden. Wahrscheinlich hast Du dafür eine Klemme CAN_GND oder so, 
sonst ist das der Minuspol der Versorgung.

> Was ist der Bus, fehlen mir da nicht noch irgendwo die 120 Ohm
> Endstücke?

An den ersten und letzten Shield in Deiner Kette kommt jeweils ein 
120Ohm-Widerstand zwischen CAN_H und CAN_L.


Du machst Dir das Leben leichter, wenn Du Dir irgendein Steuergerät 
besorgst, von dem Du weisst das der CAN funktioniert und irgendwelche 
Daten gesendet werden.

von Tobias F. (itob)


Lesenswert?

soul e. schrieb:
> Du machst Dir das Leben leichter, wenn Du Dir irgendein Steuergerät
> besorgst, von dem Du weisst das der CAN funktioniert und irgendwelche
> Daten gesendet werden.

An was denkst Du da konkret? Würde ein Autoradio mit CAN-Anschluss 
funktionieren?

soul e. schrieb:
ein paar Meter verdrilltes Kabel, das jeweils die Anschlüsse CAN_H und
CAN_L aller CAN shields verbindet.

Wie sind diese verbunden? CANH und CANL von Shield 1 geht direkt in CANH 
und CANL von Shield 2? Das macht ja kein Sinn, sobald ich mehrere 
Shields habe...
Sorry, hab Geduld :)

von volksvorg (Gast)


Lesenswert?

Was  soul e. meinte ist. Du solltest dir ein CAN zu USB Gerät zulegen um 
am Computer CAN-Nachrichten abzuhören oder zu erstellen. Mit einem 
fertigen Gerät kannst du dir sicher sein das dieses auf alle Fälle 
funktioniert. Eine Fehlerquelle ist somit schon mal ausgeschlossen.

So nochmal zur Verdrahtung. Ja du schließt die einzelnen CAN Knoten 
hintereinander wie Perlen auf einer Kette. D.h Konten1 CANH zu Knoten 2 
CANH,
Knoten 2 CANH zu Knoten 3 CANH zu Knoten X CANH usw. Nur in den beiden 
Knoten am Busanfang und am Busende steckt nur ein Kabel. Und das gleiche 
gilt für CANl. Zusätzlich noch alle GNDs der Knoten verbinden. Der 
Knoten am Anfang und der Knoten am Ende brauchen einen sog.120 Ohm 
Abschlusswiderstand. Der wird zwischen CANH und CANL geschaltet.

von Thomas F. (igel)


Lesenswert?

Tobias F. schrieb:
> Wie sind diese verbunden? CANH und CANL von Shield 1 geht direkt in CANH
> und CANL von Shield 2?

Du hast doch oben schon dieses PDF verlinkt:
http://www.ipsta.de/download/freies/CAN.pdf

Bild 2.4.2 und 2.4.3 zeigen den Anschluss der einzelnen CAN-Knoten 
(deine Shields).

Den Rest des PDFs kannst du erst mal vergessen, ist für einen Einsteiger 
völlig unnötig.
Für den Anfang reicht es zu wissen was CAN-ID, DLC und die acht 
Datenbytes sind.


Tobias F. schrieb:
> Das macht ja kein Sinn, sobald ich mehrere
> Shields habe...
Was macht keinen Sinn?

von Tobias F. (itob)


Lesenswert?

Ich habe ein ganz nettes Tutorial gefunden, welches zufällig meine 
Vorstellung relativ gut abdeckt. Ich will es nicht vorenthalten:

http://matthewcmcmillan.blogspot.de/2013/10/arduino-sending-data-over-can-bus.html

Interessant ist auch, dass die Shields einen eigenen 120 Ohm Widerstand 
besitzen und damit den Bus sauber schließen.

Vielen Dank für Eure Unterstützung!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.