Forum: Mikrocontroller und Digitale Elektronik MCP2515 Erfahrungen


von Thomas (Gast)


Lesenswert?

Hallo,

ich möchte mehrere Arduinos mit einem MCP2515 Bus miteinander 
kommunizieren lassen. Erste Tests habe ich bereits gestartet, 
funktioniert soweit.

Trotzdem hätte ich noch eine paar Fragen:

1.) Reicht es tatsächlich, die RX & TX Leitungen zu den MCP2515 zu 
verbinden? Gemeinsame Erdung zwischen den Arduinos bzw. MCP2515 (3te 
Leitung) wird keine benötigt?
2.) Teilweise liest man im Internet, dass man am Ende der RX/TX Leitung 
einen Widerstand benötigt, ist es tatsächlich so?
3.) Das CAN Protokoll garantiert mir, wenn Daten ankommen, dass diese 
korrekt sind. Aber ich habe keine Garantie, dass, wenn ich Daten 
lossende, diese am Ziel ankommen? Ob die Daten angekommen sind, müsste 
ich in meinem Protokoll implementieren?

Danke!

lG

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Thomas schrieb:
> Gemeinsame Erdung zwischen den Arduinos bzw. MCP2515 (3te Leitung) wird
> keine benötigt?
Natürlich musst du die Masse (die meinst du vermutlich mit der "Erde") 
verbinden. Die ist ja der Bezugspunkt der Signale.

> Aber ich habe keine Garantie, dass, wenn ich Daten lossende, diese am
> Ziel ankommen?
Wenn keiner der Teilnehmer was mit den Daten anfangen kann, dann 
bekommst du einen Fehler. Und bei wiederholten Fehlübertragungen 
schaltet sich der Sender ab, um einen "Babbling Idiot" zu verhindern.
https://de.m.wikipedia.org/wiki/Babbling_idiot
Zum Thema Fehlerbehandlung einfach mal die Spec vom CAN lesen.

> 2.) Teilweise liest man im Internet, dass man am Ende der RX/TX Leitung
> einen Widerstand benötigt, ist es tatsächlich so?
Willst du den CAN Bus ohne CAN Transceiver betreiben? Der Transceiver 
macht aus RX und TX nämlich die differentiellen Signale CANHI und CANLO. 
Erst mit diesem Transceiver hast du wirklich einen CAN Bus.

: Bearbeitet durch Moderator
von René F. (Gast)


Lesenswert?

Lothar M. schrieb:
> Natürlich musst du die Masse (die meinst du vermutlich mit der "Erde")
> verbinden. Die ist ja der Bezugspunkt der Signale.

Bei CAN ist die Masseverbindung optional weil differenzielles Signal, 
Ausnahme wäre SWCAN.

von HildeK (Gast)


Lesenswert?

René F. schrieb:
> Bei CAN ist die Masseverbindung optional weil differenzielles Signal,

Man muss sicherstellen, dass die Signale im Common-Mode Bereich des 
Empfängers bleiben. Ob das Masse ist oder ein anderes Potential ist 
zweitrangig.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

René F. schrieb:
> Bei CAN ist die Masseverbindung optional weil differenzielles Signal,
Soweit die Theorie. Aber zeig mir mal den Empfänger, der mit einem 
Sender zurechtkommt, der 100m weiter weg an einer anderen 
Spannungsversorgung hängt.

Das Stichwort "Gleichtakteingangsbereich" ist ja schon gefallen. Das 
sind üblicherweise so maximal 40V. Wenn die Potentialdifferenz größer 
ist, dann kommt am Empfänger nur Käse rein, und die Fehlerzähler laufen 
ratzfatz hoch...

von Dr. Sommer (Gast)


Lesenswert?

René F. schrieb:
> Bei CAN ist die Masseverbindung optional weil differenzielles Signal,
> Ausnahme wäre SWCAN.

Auch bei einem differentiellen Signal fließt ein Strom. Der fließt durch 
die Signalleitungen "hin", und durch GND "zurück" (techn. 
Stromrichtung). Der Strom kann bedingt durch die Konstruktion der 
Transceiver nicht auf CANH hin und auf CANL wieder zurück. 
Dementsprechend ist eine Verbindung beider GND immer nötig (automatisch 
gegeben bei identischer Stromversorgung).
Bei Kupfer-Ethernet z.B. ist das anders, da bildet ein differentielles 
Paar eine Schleife in der der Strom im Kreis fließt, und auf den beiden 
Enden magnetisch ein/aus-gekoppelt wird. GND wird hier nur zur Schirmung 
eingesetzt.

von H.Joachim S. (crazyhorse)


Lesenswert?

Thomas schrieb:
> Hallo,
>
> ich möchte mehrere Arduinos mit einem MCP2515 Bus miteinander
> kommunizieren lassen. Erste Tests habe ich bereits gestartet,
> funktioniert soweit.

Einen MCP2515-Bus gibt es nicht. Es gibt den CAN-Bus, dessen Logik in 
einem CAN-Controller sitzt (hast du den?). Der MCP2515 ist nur die 
Schnittstelle zum physical layer.
>
> Trotzdem hätte ich noch eine paar Fragen:
>
> 1.) Reicht es tatsächlich, die RX & TX Leitungen zu den MCP2515 zu
> verbinden? Gemeinsame Erdung zwischen den Arduinos bzw. MCP2515 (3te
> Leitung) wird keine benötigt?
Doch. Es sei denn, alle liegen auf ungefähr gleichem Potential (durch 
gemeinsame Stromversorgung z.B.)
> 2.) Teilweise liest man im Internet, dass man am Ende der RX/TX Leitung
> einen Widerstand benötigt, ist es tatsächlich so?
Es gibt kein Ende der Rx/Tx-Leitung, es gibt allerdings CANH/CANL. Und 
die sollte man tunlichst an beiden Enden terminieren. Bei geringen 
Entfernungen und moderaten Baudraten funktionierts aber auch ohne, 
bleibt aber Pfusch. " Widerstände sind jetzt nicht so der Kostenfaktor.
> 3.) Das CAN Protokoll garantiert mir, wenn Daten ankommen, dass diese
> korrekt sind. Aber ich habe keine Garantie, dass, wenn ich Daten
> lossende, diese am Ziel ankommen? Ob die Daten angekommen sind, müsste
> ich in meinem Protokoll implementieren?
Also doch CAN? Da bekommst du erst mal nur ein ACK, wenn mindestens ein 
Empfänger die Botschaft formal korrekt empfangen hat. Ob es bei einem 
bestimmten Empfänger angekommen ist, ist nicht Teil der untersten 
CAN-Spezifikation. Wenn das wichtig ist, Protokoll aufsetzen.
>
> Danke!
>
> lG

von CANed (Gast)


Lesenswert?

Dr. Sommer schrieb:

> Stromrichtung). Der Strom kann bedingt durch die Konstruktion der
> Transceiver nicht auf CANH hin und auf CANL wieder zurück.

Nicht? Da sind doch 2x 120 Ohm!?

von Dr. Sommer (Gast)


Lesenswert?

CANed schrieb:
> Nicht? Da sind doch 2x 120 Ohm!?
Schon, aber den Strom der durch den Terminierungswiderstand fließt, kann 
der Transceiver nicht riechen. Es muss ein Strom durch den Transceiver 
fließen, damit der etwas mitbekommt. So ist das im Stromkreis. Eine 
stromfreie Spannungsmessung gibt es nicht.

von Thomas (kosmos)


Lesenswert?

nicht verwechseln der MCP2515 ist der CAN-Controller, der MCP2551 wäre 
der Tranceiver für die BUS-Anbindung.

von Robert S. (bimbo385)


Lesenswert?

Also wir verwenden die Kombination aus MCP2515 und MCP2551 in unserem 
Rennauto (Formula Student) um untereinander und mit dem Motorsteuergerät 
zu reden (natürlich alles CAN).

Funktioniert völlig einwandfrei. Der erste und der letzte Busteilnehmer 
sollte CANH und CANL mit einem 120 Ohm Widerstand abschließen. Achtung 
P=U²/R = 0,21 W! Also nicht unbedingt eine 0402 Bauform nehmen :-)

Einen gemeinsamen Massebezug brauchen alle Busteilnehmer. Im KFZ ist das 
normalerweise die Fahrzeugmasse und CAN wird als 2-Draht Leitung 
verlegt. Im Industriebereich (CAN-Open) werden typischerweise M8 
Steckverbinder und geschirmte Kabel eingesetzt, sowie eine Signalmasse 
mitgeführt und die Transceivermodule teilweise sogar vom restlichen 
Feldbusgerät potentialgetrennt.

Geringere Potentialunterschiede werden durch den 
Gleichtakteingangsbereich der Transceiver ausgeglichen.

Mehr Infos zum Thema CAN Bus kennt Google. Der Einsatz ohne MCP2551 ist 
soweit ich weiß nicht vorgesehen und funktioniert maximal als Punkt zu 
Punkt Verbindung zwischen zwei MCP2515, aber dann kann ich auch einfach 
UART mit TTL-Leveln machen...

Mfg Bimbo385

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.