Forum: Mikrocontroller und Digitale Elektronik CAN-Interface


von Haitham A. (haitham)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

ich brauche mal Ihre Hilfe, wie mache ich mit CAN-BUS- weiter. Welche 
Hardware brauche ich noch. sehen Sie das Bild.
Danke im Voraus

von Heinzel (Gast)


Lesenswert?

Wahrscheinlich liegt es an meinen Augen, aber wo soll bei dem Konzept 
der CAN Bus eingebeaut werden (sein)?

von Haitham A. (haitham)


Lesenswert?

Heinzel schrieb:
> Wahrscheinlich liegt es an meinen Augen, aber wo soll bei dem
> Konzept
> der CAN Bus eingebeaut werden (sein)?

also die Aufgabe ist

Übertragung der Steuerbefehle und Rückmeldung per CAN-BUS:

o  Getriebesteuergerät empfängt Steuerbefehle und sendet Status als 
Rückmeldung
o  Senden der Steuerbefehle und Empfangen der Rückmeldung mit Hilfe 
eines zweiten Arduinos (simuliert das Fahrzeugsteuergerät).

ich wollte mit Ihre Hilfe ein CAN BUS ausbauen.

von CC (Gast)


Lesenswert?

CAN-Bus shield auf den Arduino stecken, dazu ein paar Beispiele 
anschauen und umsetzen. Da es ja eine Aufgabe ist, kannst Du sicherlich 
den Betreuer fragen, wenn du nicht weiterkommst. Er hat bestimmt Tipps 
auf Lager.

von Heinzel (Gast)


Lesenswert?

Die Bus Struktur eines CAN Busses bedingt entsprechende 
Treiberbausteine.
Für den Arduino gibt es komplette Shields für den CAN Bus als auch 
seperate SPI - Can Module die man nutzen könnte.
Für 2 Busteilnehmer werden nätürlich 2 Treiber  Shields  Interfaces 
benötigt.
Die Anbieter der Module haben auch schon oft ne Lib im Download um die 
ersten Schritte zu machen.

von Haitham A. (haitham)


Lesenswert?

CC schrieb:
> CAN-Bus shield auf den Arduino stecken, dazu ein paar Beispiele
> anschauen und umsetzen. Da es ja eine Aufgabe ist, kannst Du sicherlich
> den Betreuer fragen, wenn du nicht weiterkommst. Er hat bestimmt Tipps
> auf Lager.

er möchte zuerst das Konzept komplett mit CAN-Interface sehen. dann die 
Bauteile bestellen lassen. gibt es mehrere Variante von CAN-BUS Schilds. 
Wie geht es dann mit dem zweiten Arduino weiter.  es sollte MATLAB 
verwendet werden.

von Heinzel (Gast)


Lesenswert?

MATLAB bin ich eher raus.
Aber grundsätzlich vieleicht prüfen, welche Ansprache der Module einem 
eher liegt oder von MATLAB spezifisch unterstützt wird.
Entsprechende  Module auswählen.
Prüfen, ob MATLAB "nur" als HMI dienen soll oder auch einen Sketch in 
das 2. System flashen kann.

von Sebastian W. (wangnick)


Lesenswert?

Haitham A. schrieb:
> Übertragung der Steuerbefehle und Rückmeldung per CAN-BUS:
> o  Getriebesteuergerät empfängt Steuerbefehle und sendet Status
>    als Rückmeldung
> o  Senden der Steuerbefehle und Empfangen der Rückmeldung mit Hilfe
>    eines zweiten Arduinos (simuliert das Fahrzeugsteuergerät).

Dein Mega2560 hat keine Hardware-Unterstützung für das CAN-Busprotokoll. 
Dazu brauchst du also einen CAN-Protokoll-IC. Und zur Anbindung dieses 
IC an die CAN-Buskabel (CANH, CANL, Masse) noch einen CAN-Transceiver. 
Ziemlich üblich im Arduino-Bereich ist die MCP2515/TJA1050-Kombo, 
entweder als Modul oder als "Shield". Der Arduino kommuniziert mit dem 
MCP2515 über SPI(MOSI/MISO/SCK/CS)/INT/Masse und evtl. RST, der MCP2515 
mit dem TJA1050 über TXCAN/RXCAN/Masse. Dito "rückwärts" für den zweiten 
Arduino der für das Steuergerät steht.

Und an beiden Enden des CAN-Bus je einen 120Ω-Abschlusswiderstand nicht 
vergessen. Aber vielleicht ist das auch schon zu viel Detail fürs 
"Konzept".

LG, Sebastian

: Bearbeitet durch User
von Haitham A. (haitham)


Lesenswert?

Ich habe diesen Arduino gewählt, weil der Matlab unterstützt. haben Sie 
vielleicht anderen Vorschlag ?

von Haitham A. (haitham)


Lesenswert?

kannst du mir ein Beispiel aus dem Internet geben.

vielen Dank.

von Heinzel (Gast)


Lesenswert?


Beitrag #6581554 wurde von einem Moderator gelöscht.
von Sebastian W. (wangnick)


Lesenswert?

Haitham A. schrieb:
> Ich habe diesen Arduino gewählt, weil der Matlab unterstützt. haben Sie
> vielleicht anderen Vorschlag ?

Haitham A. schrieb:
> kannst du mir ein Beispiel aus dem Internet geben.

Ob Mega2560, Uno, Nano oder Pro Mini ist eher Geschmackssage, jeder 
davon wird laut 
https://de.mathworks.com/hardware-support/arduino-matlab.html 
unterstützt. Bei Mega2560 und Uno passen die "Shields", aber die 
stinknormalen MCP2515-Module (was weiss ich, z.B. 
https://www.amazon.de/dp/B081W7BPB2) benutzen dieselben Datenleitungen 
zur Kommunikation mit dem Arduino wie die "Shields", und sollten also 
wohl auch von Matlab unterstützt werden (hab ich aber nicht probiert), 
brauchen dann aber eben noch einige Kabelverbindungen anstatt des 
"Shield"-Stecksystems. Für den Pro Mini würde man dann noch einen 
USB-zu-Seriell-Wandler brauchen (der ist Nano/Uno/Mega2560 schon an 
Bord), dafür ist der Pro Mini die kleinste Lösung.

Wie hast du dir denn die H-Brücke vorgestellt? Auch als "Shield"?

LG, Sebastian

: Bearbeitet durch User
von max123 (Gast)


Lesenswert?

hallo,
Nimm den Arduino DUE, der hat einen CAN eingebaut und die Beispiele
sollten sofort funktionieren. Mit einer Diode und einigen Verbindungs-
leitung, kann man bei kurzem Abstand den Treiber (von Tisch zu Tisch
bei einer Laborübung) einsparen.

PS
Der Arduino DUE ist ein Arm Prozessor und mit der mit der Arduino IDE
programmierbar.

von Sebastian (Gast)


Lesenswert?

max123 schrieb:
> Nimm den Arduino DUE, der hat einen CAN eingebaut und die Beispiele
> sollten sofort funktionieren.

Max, auf der MATLAB-Seite steht für den Due: "DAC and CAN channel not 
supported." Dann hat er den Due und braucht dennoch noch einen MCP2515 
...

LG, Sebastian

von Haitham A. (haitham)


Lesenswert?

L298N Modul H Brücke, ja als Shields.
danke für die Info.

von Haitham A. (haitham)


Angehängte Dateien:

Lesenswert?

Herr Sebastian,

könnten Sie bitte mein Datei öffnen und mir sagen ob ich so richtig 
gemacht habe?

Danke.

von Sebastian (Gast)


Lesenswert?

Haitham A. schrieb:
> könnten Sie bitte mein Datei öffnen und mir sagen ob ich so richtig
> gemacht habe?

Also ich sehe im Konzept noch ein, zwei Fehler.
 * Der Servo wird im Konzept vom Arduino mit Strom versorgt. Der 
Blockierstrom des Servos könnte oberhalb der Leistung des 5V-Reglers auf 
dem Arduino liegen - Datenblatt prüfen.
 * Die CAN-Busleitung besteht nur aus CANH und CANL, also ohne 
Massereferenz. Das kann gut gehen, muss aber nicht. Im Gegensatz zu 
Ethernet haben die CAN-Transceiver keine Übertrager zur 
Potentialtrennung eingebaut, und die Gleichspannungsebene darf darum nur 
einen bestimmten Betrag abweichen. Steht im TJA1050-Datenblatt. 
Ausserdem soll das Konzept ja die Situation im KFZ nachbilden, und dort 
ist die Massereferenz überall gegeben. Also noch eine Masseleitung neben 
CANH und CANL, wie oben schon vorgeschlagen.
 * Soll der Motor auch rückwärts drehen? Die Leitung zum Motor ist fest 
mit + und GND bezeichnet, als wäre nur eine Drehrichtung möglich. Der 
Witz einer H-Brücke ist ja aber die Umpolbarkeit! Also entweder es 
reicht ein simpler Transistor, oder die Bezeichnung ist widersinnig.

Soweit erst mal.

LG, Sebastian

von Sebastian (Gast)


Lesenswert?

Ach, und die vielen Netzteile mit ihren jeweiligen Massepotentialen 
machen mich etwas nervös. Da könnte aber vielleicht jemand was zu sagen 
der sich in der Materie besser auskennt.

LG, Sebastian

von Haitham A. (haitham)


Lesenswert?

>  * Der Servo wird im Konzept vom Arduino mit Strom versorgt. Der
> Blockierstrom des Servos könnte oberhalb der Leistung des 5V-Reglers auf
> dem Arduino liegen - Datenblatt prüfen.

das ist Richtig. soll ich den Servomotor mit externe Versorgungsspannung 
anschließen? oder was schlagen Sie vor.

>  * Die CAN-Busleitung besteht nur aus CANH und CANL, also ohne
> Massereferenz. Das kann gut gehen, muss aber nicht. Im Gegensatz zu
> Ethernet haben die CAN-Transceiver keine Übertrager zur
> Potentialtrennung eingebaut, und die Gleichspannungsebene darf darum nur
> einen bestimmten Betrag abweichen. Steht im TJA1050-Datenblatt.

ich habe hier Sie nicht verstanden, aber ich schaue mal nach?

> Ausserdem soll das Konzept ja die Situation im KFZ nachbilden, und dort
> ist die Massereferenz überall gegeben. Also noch eine Masseleitung neben
> CANH und CANL, wie oben schon vorgeschlagen.

in Youtube habe ich keine Massereferenz neben CANH und CANL gesehen.

>  * Soll der Motor auch rückwärts drehen? Die Leitung zum Motor ist fest
> mit + und GND bezeichnet, als wäre nur eine Drehrichtung möglich. Der
> Witz einer H-Brücke ist ja aber die Umpolbarkeit! Also entweder es
> reicht ein simpler Transistor, oder die Bezeichnung ist widersinnig.

ja, der Motor soll in beide Richtungen drehen. was ist falsch?
>
> Soweit erst mal.
>
vielen DANK.

> LG, Sebastian

von Haitham A. (haitham)


Angehängte Dateien:

Lesenswert?

Herr Sebastian
im Anhang ist ein Foto und hier einen Link von Youtube, es gibt kein 
Massenreferenz zwischen CANH und CANL.

https://www.youtube.com/watch?v=3GmVrIWT3Bo

von Sebastian (Gast)


Lesenswert?

Haitham A. schrieb:
> im Anhang ist ein Foto und hier einen Link von Youtube, es gibt kein
> Massenreferenz zwischen CANH und CANL.

Ja, es wird auch ohne gehen.

[Aber Youtube ist da nicht autoritativ, sondern die Datenblätter der 
Komponenten. Und das des TJA1050 sagt uns a) dass CANH und CANL nicht 
mehr als +33V über und nicht weniger als -27V unter der lokalen Masse 
liegen dürfen, aber dann auch b) dass lokal CANH und CANB jeweils über 
25kOhm auf das lokale VCC/2-Potential gezogen werden, und das sollte 
Potentialunterschiede zur Gegenstelle im erlaubten Bereich halten.]

LG, Sebastian

von Sebastian (Gast)


Lesenswert?

Haitham A. schrieb:
> ja, der Motor soll in beide Richtungen drehen. was ist falsch?

Die Leitungen zum Motor sind rot und schwarz und mit Plus-Pol und Masse 
beschriftet. Aber wenn der Motor rückwärts dreht ist Masse an dem 
Anschluss wo vorher Plus war, und Plus ist dort wo vorher Masse war. Das 
funktioniert, aber die Beschriftung stimmt dann nicht mehr ...

LG, Sebastian

von Sebastian (Gast)


Lesenswert?

Haitham A. schrieb:
> das ist Richtig. soll ich den Servomotor mit externe Versorgungsspannung
> anschließen? oder was schlagen Sie vor.

Entweder noch ein Netzteil, oder mit einen geeigneten DC/DC-Buckwandler 
aus den 12V 5V machen?

LG, Sebastian

von Haitham A. (haitham)


Angehängte Dateien:

Lesenswert?

Sebastian schrieb:
> Entweder noch ein Netzteil, oder mit einen geeigneten DC/DC-Buckwandler
> aus den 12V 5V machen?

ist so besser ? ich habe im Internet gelesen unter 
https://antwortenhier.me/q/wie-viel-strom-kann-ich-aus-den-stiften-des-arduino-ziehen-59828797044#:~:text=Laut%20Datenblatt%20kann%20dieser%20Pin,3%2DV%2DVersorgung%20bereitstellen.
Der 5-V-Ausgangspin ist für ~ 400 mA an USB und ~ 900 mA bei Verwendung 
eines externen Netzteils geeignet

was sagen Sie dazu ?

von Sebastian W. (wangnick)


Lesenswert?

Haitham A. schrieb:
> ist so besser ?

Es wird. Immerhin sind Motor und Servo nun festgelegt.

Haitham A. schrieb:
> ich habe im Internet gelesen unter
> 
https://antwortenhier.me/q/wie-viel-strom-kann-ich-aus-den-stiften-des-arduino-ziehen-59828797044#:~:text=Laut%20Datenblatt%20kann%20dieser%20Pin,3%2DV%2DVersorgung%20bereitstellen.
> Der 5-V-Ausgangspin ist für ~ 400 mA an USB und ~ 900 mA bei Verwendung
> eines externen Netzteils geeignet

Ein Linearregler verwandelt für einen gewissen Stromfluss die 
Spannungsdifferenz zwischen Eingang und Ausgang in Wärme. Siehe zum 
Beispiel Beitrag "Re: Schaltplan für Pflanzenprojekt": Der 
Regler wird bei 1,2 Watt Abwärme am Gehäuse 70°C warm, im Inneren 85°C.

Der Artikel "im Internet" sagt nun auch: "900 mA ist für einen Adapter, 
der ~ 7V liefert. Mit zunehmender Adapterspannung steigt auch die 
Wärmemenge, mit der der Regler umgehen muss, sodass der maximale Strom 
mit zunehmender Spannung abfällt. Dies wird als thermische Begrenzung 
bezeichnet."

Eine längere Belastung des 5V-Ausgangs mit 600mA (z.B Servo mehrmals 
hin- und her) wird bei 12V Eingangsspannung wohl den Linearregler des 
Arduino Mega 2560 in die thermische Abschaltung bringen (und dabei dem 
Mikrocontroller natürlich auch den Strom kappen). Immerhin muss der 
Linearregler dann über 4 Watt ((12V-5V)*0,6A) an Abwärme abführen!

Und ich kann nur wiederholen, im Internet steht vieles, autoritativ sind 
die Datenblätter der Komponenten.

Ich würde die 5V-Versorgung des Servo stattdessen über ein Buck-Modul 
aus den 12V erzeugen (die kleinen sollten ausreichen).

Haitham A. schrieb:
> was sagen Sie dazu ?

Die Pin-Nummern des Konzepts beziehen sich anscheinend auf die Pins des 
Atmega2560. Vielleicht sollte dazu auch noch die Arduino-Pinnummerierung 
genannt werden. So ist der Pin 1 im Konzept auf dem Arduino Mega 2560 
mit D4 bezeichnet, und der Pin 6 mit D2, Pin 36 entspricht D48,Pin 37 
D47 und Pin 38 D46.

Für die Kommunikation mit dem MCP2515-Modul müssen zwingend die SPI-Pins 
(MOSI, MISO, SCK) verwendet werden. Im Konzept werden diese als Pin 24 
(MOSI), Pin 25 (MISO) und Pin 26 (SCK) bezeichnet. Dies sind aber nicht 
die  korrekten SPI-Pins des Atmega2560, diese sind Pin 21 (MOSI), Pin 22 
(MISO) und Pin 20 (SCK), und diese Pins finden sich auf dem Arduino Mega 
2560 bezeichnet als D51 (MOSI, Pin 21), D50 (MISO, Pin 22) und D52 (SCK, 
Pin 20). Für CS nimmt man gemeinhin D53 (SS, Pin 19).

Und wie gesagt, ich bin inzwischen der Auffassung, dass der zweite 
Arduino ruhig an einem separaten Netzteil betrieben werden kann, so dass 
man einen längeren CAN-Bus testen kann.

LG, Sebastian

: Bearbeitet durch User
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.