Forum: Mikrocontroller und Digitale Elektronik CAN-Bus am µC


von tex (Gast)


Lesenswert?

Hi!
Hat irgendjemand schon Erfahrungen mit CAN-Bus gemacht? Ich hab
irgendwo schon µCs gefunden die sowas integriert haben aber ich bin
noch von dem LCD-Treiber im Mega169 bedient.
Gibt es da was, was man an den seriellen Port des µCs anhängen kann?

von Jörg Maaßen (Gast)


Lesenswert?

Ich glaube ein guter einstieg wäre

http://www.canathome.de

Gruß Jörg

von Peter Mahler (Gast)


Lesenswert?

Hallo,

der CAN-Bus ist eine sehr gute Möglichkeit uC miteinander zu vernetzen.
Durch seine Multi-Master-Fähigkeit spart man sich richtig viel Code im
uC. Trotzdem hat der CAN einige Fallstricke die es zu beachten gilt.
Das Preis-Leistungsverhältnis stimmt dabei auch, es ist unwesentlich
teurer als ein RS485-Netzwerk.

Eine Umsetzung auf eine serielle Schnittstelle ist nur bedingt möglich.
Der CAN definiert Baudraten bis 1 MBit ein 08/15-PC kommt damit nicht
richtig gut zurecht. Es gibt zwar ein paar Möglichkeiten über die
sogenannte Aktzeptanz-Filterung das zu verbessern, eine professionelle
Möglichkeit ist dies aber nicht.
Alternativ stehen als die CAN-Paralellport-Adapter zur Verfügung, die
das zumindest im Low-Cost Bereich vernünftig können.

Eine Selbstbauvariante ist dabei das CAN200-Projekt aus dem
Linux-Umfeld -> http://private.addcom.de/horo/can200/ für das es jedoch
auch Windows-Treiber gibt.


Gruss,

Peter

von tex (Gast)


Lesenswert?

Danke! Die Beiden Seiten sind schon mal nicht schlecht. Ich hatte mit
dem Gedanken gespielt die Übertragungsrate zu reduzieren, um die 6.2km
Leitungslänge ausnutzen zu können. (Habe ich irgendwo im Internet
gefunden). Im Moment sehe ich da noch nicht so ganz durch. Ich hatte
mir das einfacher vorgestellt als ich gelesen habe, dass die Blinker im
Daimler inzwischen auch nur noch per CAN-Bus bedient werden. Nach dem
was ich bisher habe steckt da aber ein irrsinniger Programmieraufwand
für die Serielle Schnittstelle dahinter?

von Michael (Gast)


Lesenswert?

Nimm einen Microchip-Controller, die kannst Du einfach per SPI an Deinen
MC hängen.
Gab schon etliche Beiträge dazu hier im Forum.
Suche benutzen.

von tex (Gast)


Lesenswert?

@Michael
Super Idee! Welches der 0 Suchergebnisse nach CAN im Forum hälts Du für
das Aussagekräftigste? Ich würde mir Deinen Vorschlag je gerne mal
anschauen wenn ich dazu was finden würde.

von Teletubbi (Gast)


Lesenswert?

3 Punkte für Dich!
Er mein aber wahrscheinlich den MCP2515 von Microchip.

von Jörg Maaßen (Gast)


Lesenswert?

Such mal nach CANBUS.

Gruß Jörg

von Peter Mahler (Gast)


Lesenswert?

Hallo tex,

der Blinker vom Daimler ist ein gutes Beispiel :

Stell dir mal vor Blinker-Schlalter, Bremslicht-Schalter,
Bremslicht-Lampe, Blinker-Lampe sind miteinander vernetzt mit zwei
Drähten (CAN).
Du drückst auf die Bremse deines SL500 und auf die uS zeitgleich setzt
du den Blinker. Bei einem selbstprogrammierten RS485-Netzwerk müsstest
du richtig viel Code investieren, um diese Kollisionen zu detektieren
oder zu verhindern. In dem Blinkerschalter(z.B. von Hella) müsste
zusätzlich noch das gleiche Protokoll laufen wie in der
Rücklicht-Einheit (z.B. von OSRAM).
Die CAN-Controller sorgen automatisch dafür, dass die wichtigere
Botschaft (Bremslicht) sofort ohne Kollisionen durchkommt, aber die 2.
Botschaft (Blinker) anschliessend gesendet wird ohne dass die
Übertragung ein zweites mal angestossen werden muss.
Gleichzeitig hören alle anderen Teilnehmer am Bus diese Boschaften auch
mit. Dein Instrument weiss somit auch gleich dass es die
Kontrolllämpchen für den Blinker blinken lassen muss.

CAN ist für mich die optimale Möglichkeit mehrere uC auf einfachstem
und gleichzeitig sicheren Weg zu vernetzen. Hast du nur zwei uC die
Punkt-zu-Punkt miteinander reden, reicht die serielle Schnittstelle
aus, werden es mehr bist du mit CAN allemal besser bedient als mit
RS485-Low-Level.
Bei Kosten von 8-12.- Euro für einen PIC18F258 ist das auch noch für
die Märklin-Eisenbahn im Keller noch tragbar.

Eine Möglichkeit, die die wenigsten realisert haben, ist die Low-Speed
Vernetzung der CAN-Controller. Damit hast du die Möglichkeit über 3
Leitungen(+12V, Masse, CAN) deine Slaves zu versorgen und gleichzeitig
den CAN zu betreiben. Dafür brauchst du lediglich Low-Speed-Transceiver
anstatt den differentiellen Typen (... mit viel Erfahrung kannst du es
auch diskret mit Widerständen aufbauen).


Gruss,

Peter

von tex (Gast)


Lesenswert?

@Peter
Die theoretischen Grundlagen, hier noch einmal sehr schön von Dir
dargelegt, habe ich schon zusammen, darum die Entscheidung auf mein
neues Bastelboard eine CAN - Bus draufzubringen ..
ABER....
ich habe nichst praktisches.
Woher kommt denn nun diese Prioritätsaufteilung? (Aus der Adresse,
schon klar! und wo kommt die her?)
Es muss doch irgendwo jemanden geben, dem ich sage "Du bist die
Blinkleuchte". Das muss doch irgendwo rein.
Irgend so ein kleiner schwarzer Tausendfüßer muss mit irgend etwas an
mein Mega128 ran? Und der muss irgendwie Daten an das Ding verschicken.

Es muss doch sowas wie Schaltungsbeispiele, Programmbeispiele und
solches geben und ich will mir fast nicht vorstellen das in jedem
Daimler-Blinker ein kompletter µC steckt. Ich gebe aber zu dass ich
noch nicht geschafft habe zu schauen, was in diesem MCP2515 steckt.

Daimler ist für mich übrigens, was das Steak für den Veganer. Ich würde
sowas nicht fahren wenn man mich dafür bezahlen würde. Soviel zu
"meinem" SL500 ;-)

von Ratber (Gast)


Lesenswert?

CAN-Bus Controller ?

Schau mal bei Motorola rein.
Die haben reichlich Controller mit Can-Schnittstelle.

Einige PIC's bieten ebenfalls Can an.

Bei Atmel müßte ich jetzt nachsehen aber ich bin sicher das es auch
hier was gibt.

von Ratber (Gast)


Lesenswert?

Hoppla,zu schnell gesendet.


@Tex


Zu "Daimler" und "Steak für Veganer" :

Es ist absiolut latte ob Daimler,BMW,Ford,Opel oder Volkswagen.

Is überall der selbe Müll drinne ;-)

von tex (Gast)


Lesenswert?

Nein nein! Bitte nicht CAN im µC wenn es sich vermeiden lässt. Ich bin
noch bedient von LCD-Controller im µC! Und wenn der Zauber nicht so
will wie ich, dann will ich die Chance haben noch mal meinen guten
alten 80537 um Rat zu fragen.

von Peter Mahler (Gast)


Lesenswert?

Hi tex,

nicht böse sein wegen dem SL :-)
Doch es ist wirklich so dass in den Fahrzeugen für alles mögliche
sogenannte Steuergeräte (...ein uC) verwendet wird. Es macht auch Sinn,
der Aufwand zu verkabeln, z.B.  Blinker links, Blinker
rechts,Bremslicht, Rücklicht, Rückfahrleuchte, Nebelschlussleuchte,....
macht sehr viel Montage-Aufwand und Verkabelungskosten, usw. aus. Ein
uC, für den Daimler keine 8-12.- Euro bezahlt sondern ein paar Cent ist
dort besser angebracht und bietet zusätzlich noch (aufpreispflichtigen)
Mehrwert wie z.B. Überwachung der Lampen o.ä.

Zum Thema CAN-Controller am uC :

Bei deinem Mega128 kannst du den 1000-Füssler auf 28 Pins mit einem
SJA1000. Von den 28 Pins kannst du schon mal 11(AD ALE,RD,WR) direkt
ohne weitere Beschaltung mit dem SJA verbinden. den 12ten (/CS) kannst
bildest du dir aus deinen Adressleitungen. Der Rest ist CAN-Leitungen
Versorgung, Mode, Clock,.... Schaltungen hierfür müsste es zu dutzenden
in Netz geben.

Sind dir die 12 Leitungen zu viel  kannst du dir auch den besagten
MCP2515 (SPI) gönnen der braucht ein paar Leitungen weniger, dafür ein
paar Code-Zeilen mehr.

zum Thema CAN-Controller im uC :
Kann ich bei meinen bisherigen Erfahrungen 68HC12,ARM,... nur positives
Berichten. Atmel baut den ATMega128 auch als AT90CAN (..oder so)
pinkompatibel zum Mega128 auch mit CAN (schwer erhältlich)


Gruss,

Peter

von Peter Mahler (Gast)


Lesenswert?

...noch was vergessen.

Die Priorisierung wird anhand der CAN-ID festgelegt. Diese vergibt
wiederum der Hersteller an seine Zulieferer. Jedem ist dabei etwas
anderes wichtig. Bei den Italienern kann z.B. die Fanfare wichtiger
sein als so schnöde Sachen wie ein Bremslicht ;-)

von Peter D. (peda)


Lesenswert?

"Bitte nicht CAN im µC wenn es sich vermeiden lässt."

Kann ich nicht nachvollziehen.
Ich nehme den AT89C51CC03, das ist ein voll kompatibler 8051 Core mit
CAN.

Als nächstes ist auch der LPC2119 (ARM + 2*CAN) geplant.


Peter

von tex (Gast)


Lesenswert?

Also das mit dem CAN auf dem "MEGA128" prüfe ich gerade.
Gibt es dann so etwas wie ein Register in dem ich die ID per Software
festlegen kann? Was passiert dann beim Reset. Es braucht doch dann
jeder eine eigene ID, oder?

von Tobias (Gast)


Lesenswert?

Ja es gibt so ein Register.
Nach einem Reset wird hoffentlich zuerst wieder Initialisiert, genau
wie nach jedem Einschalten???
Jede Nachricht bekommt eine ID. Jeder Empfänger wertet diese ID aus und
entscheidet, ob die Nachricht für ihn gedacht ist.
Schaltest Du in deinem SL das Licht an und setzt den Blinker, so wird
der Controller z.B. eine Nachricht mit der ID 0x20 und dem Inhalt 0x01
und eine zweite mit ID 0x21 und Inhalt 01 senden. Die Blinkercontroller
sind auf ID 0x20 eingestellt und sehen 0x01 für einschalten. 0x21 ist
für die beiden Scheinwerfer und die Rücklichter. Die Lichter könnten
dann mit den IDs 22-25 die korrekte Funktion bestätigen.

von tex (Gast)


Lesenswert?

@Alle
Erst mal vielen, vielen Dank für die Unterstützung. Ich baue jetzt mein
Board noch mal neu auf mit 90CAN128. Ich werde mich jetzt erst mal auf
die Suche nach Daten und Schaltungsbeispielen begeben. Ich denke, dass
ich den 90CAN128 an den CAN - Ports noch mit einem PCA82C251
unterstützen muss oder gibt es da noch was besseres?

von tex (Gast)


Lesenswert?

Hi Leute.
Es gibt da noch ein Paar Fragen, die sich da nunmehr zu diesem Thema
aufgetan haben.
1. Wieviele Teilnehmer darf der CAN-Bus denn haben? Ich habe mal was
von  1023 gehört, wegen der Anzahl der max, verfügabren Adressen, nun
habe ich gelesen dass es keine Adressse gibt und alles über die
Identifier gelöst wird? Es muss aber eine Grenze geben, weil irgendwann
kann der beste Treiber nix mehr treiben.
2. Ich habe mir einen SN65HVD230 als Treiber auserkohren. Ich habe aber
nicht rausgefunden wofür ich Vref brauche oder ob ich es überhaupt
brauche und wofür.
3. In den Beschreibungen lese ich immer dass ich 3 Leitungen für den
CAN - Bus brauche, CAN H , CAN L und Ground, aber in den
Treiberbeschreibungen steht nix von GND. Da sind immer nur 2 Leitunegn
im Spiel. Was stimmt denn nun?
4. Wenn ich GND tatsächlich brauche, ist es dan der GND meiner
Stromversorgung? Das gibt doch höllische Störungen bei einer
Leitungslänge von 6,3km?!

von Florian Bantner (Gast)


Lesenswert?

Hi tex,

1. Kommt auf die Version an: CAN-A od. CAN-B. Unterscheiden sich in der
Bitzahl der 'Adresse': 11 od. 29. Empfehle sowieso grundsätzlich
Datenblatt (Standard) von Bosch. Link ist hier ein paar Threads hoeher
oder tiefer.

2. Bei Treibern musst Du grundsätzlich erst 'mal rausbekommen, welche
CAN Variante es gibt. Persönlich kenne ich Low- und Highspeed
Varianten, die sich in den Pegeln der Differenzleitungen unterscheiden.
Dann gibt es wohl 12V und 24V Varianten. Danach kannst Du Deinen Treiber
auswählen. Auch danach, ob er noch zusätzliche Ein-/Ausgänge haben soll
z.B. für Error.

3. 3 Leitungen ist schon korrekt. GND ist gemeinsam. Im Auto: 2
Leitungen & Ground über Karosse oder von 'wo anders'. Aber bin kein
Elektroniker sondern nur Programmierer.

4. Leitungslänge im CAN hängt von Übertragungsgeschwindigkeit ab. (Und
von Lichtgeschindigkeit. Die soll aber konstant sein, sagt man ;)

Generell ist ein bissl Umgewöhnung nötig, wenn man von Protokollen wie
TCP/IP kommt, da dort die Kommunikation in der Regel zw. 2 Partnern
stattfindet. Deswegen Senderadresse->Empfängeradresse.
Im CAN ist die Adresse wohl eher als 'Nachrichtentyp' zu sehen, der
an alle gerichtet ist, die sich dafür interessieren. Hat leider auch
zur Folge, dass es nicht unaufwändig ist, in einem laufenden System
'von aussen' noch herauszufinden, welcher Teilnehmer welche Nachricht
geschickt hat.

von 4535 (Gast)


Lesenswert?


von tex (Gast)


Lesenswert?

@4535
Danke. Den Text habe ich schon gelesen, aber ich kann damit die Fragen,
die ich oben gestellt habe nicht lösen.

Ich habe 1023 unterscheidliche identifier, aber das heißt doch nicht,
dass ich nur 1023 Teilnehmer haben kann. Wenn jeder mit gleicher
Priorität Daten versenden darf oder schicken, je nach dem, ist das
Limit doch nicht die Anzahl der Adressen, sondern die Stromaufnahme der
"Lauscher" ?!

Das Datenblatt des Treibers habe ich ja, aber ich kann nicht finden,
was Vref darin tut. Das geht in eie Blackbox und Schluss ist ...

Ground im Auto als Karosse ist schon ok, aber ein Karosse von 6,3km
Länge, die nur 0.6mm dick ist, ist im Automobilsektor selten.
In den Schaltbildern der Treiber sind immer nur 2 Leitungen gezeichnet
und wenn ich meine 1024 Boards über ein Strecke von 6.3km mit o,6mm
Leitung verbinde dürften die Ergebnisse der AD-Wandler und so einiges
mehr nicht mehr sehr brauchbar sein.

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.