Forum: Mikrocontroller und Digitale Elektronik CAN sinnvoll für meine Anwenung oder was anderes?


von Markus (Gast)


Lesenswert?

Hallo zusammen,

ich habe ein paar simple Geräte auf ATMEGA328-Basis gebaut. Relays, 
Taster & Leds, funktioniert soweit perfekt.

Nun möchte ich die Geräte miteinander kommunizieren lassen:
Wird an einem beliebigen Gerät X ein Taster gedrückt, soll bevor die 
Relays/Leds geschaltet werden der Status der anderen Geräte 
zurückgelesen werden, und unter umständen ein Befehl an alle Teilnehmer 
gesendet werden bevor Gerät X sein eigentlichen Befehl ausführt.

Die Geschwindigkeit muss wahrscheinlich nicht sonderlich hoch sein, auch 
die Datenmenge wird sehr klein ausfallen (nur der Status der jeweiligen 
Geräte wird ausgetauscht, 2-3 Byte oder so). Distanz zwischen den 
Geräten beträgt max. 20m denke ich.
Die Kommunikationsleitung soll von Gerät zu Gerät weiter geschlauft 
werden ( RJ45-Buchsen: 
https://www.digikey.com/product-detail/en/pulse-electronics-network/E5908-4V0S54-L/553-2266-ND/4868936) 
Die Geräte werden über 12V Steckernetzteile versorgt, intern dann 5V.

Nun meine Frage, ist CAN in diesem simplen Anwendungsfall zweckgemäss, 
oder gibt es einfachere, weniger aufändige Bussysteme, die mit meinen 
Anforderungen klar kommen? (Das ganze geht richtung Multimaster, 
richtig?)

Falls CAN, habe ich geplant den 328 mit einem MCP2515 + TJA1050 zu 
erweitern (anfänglich mit solchen Testmodulen: 
https://www.electrodragon.com/product/mcp2515-can-receiver-breakout-board-spi)

Falls ihr noch weitere Angaben benötigt, einfach melden. Bin noch 
ziemlich neu auf dem Gebiet.

Vielen Dank im Voraus für euren Input.

Gruss Markus

von NewsRider (Gast)


Lesenswert?

Ich mag CAN.

Damit wird es auf alle Fälle gehen.

von Gero (Gast)


Lesenswert?

Generell ist CAN erst einmal ein sehr einfacher Bus. Er ist 
Ereignisorientiert und sendet nur Daten, wenn etwas passiert - das 
spricht in Deinem Fall deutlich für CAN.

Höher eingeordnete Feldbusse wie z.B. ProfiBus oder gar Ethernet laufen 
ständig und es obliegt den jeweiligen Teilnehmern, die Ringdaten 
zyklisch auszuwerten.

Niedrige Baudrate, wenig Datenbandbreite, lange Leitungswege (wobei 20m 
nicht sonderlich viel sind) sowie einfache und störunempfindliche 
Verdrahtung sprechen in diesem fall wirklich für CAN.


Bussysteme die noch weiter unten angesetzt sind wären irgendwas 
differentielles mit RS422 oder RS485 - die sind aber nicht 
Kollisionssicher - deswegen würde ich darauf verzichten.

Ich würde auch CAN verwenden.
...denke daran, dass Du mit CAN (ohne Tricks und Kniffe) max. 8 Byte je 
Telegramm versenden kannst - wenn Dir das ausreicht ist alles gut!

von c r (Gast)


Lesenswert?

CAN erfüllt die Anforderungen auf jeden Fall stressfrei.

Machbar ist es sicherlich auch ganz ohne viel extra Hardware z.B. 
seriell oder über I2C, aber dann musst du ein ordentliches Protokoll 
inkl. Kollisionsbehandlung austüfteln.

"Ein paar simple Geräte" klingt für mich nicht so, als wäre der Aufwand 
es gegenüber dem Mehrpreis für CAN es wert, also ich sag auch: CAN 
passt.

von H.Joachim S. (crazyhorse)


Lesenswert?

Gero schrieb:
> und sendet nur Daten, wenn etwas passiert

Nene. Kann man so machen, muss man aber nicht. Diese Vorgehensweise hat 
auch erstmal nichts mit CAN zu tun.

Und ja - nimm CAN. Aber am besten Controller mit internem CAN. Der MCP 
funktioniert zwar wunderbar - aber warum sollte man sich einen zus. Chip 
antun? Gibt genug Controller mit internem CAN.

von Ulf L. (ulf_l)


Lesenswert?

Hallo

Eventuell wäre auch der LIN-Bus 
https://es.cs.uni-kl.de/publications/data/Knob14.pdf noch etwas für 
deine Anwendung.

Gruß Ulf

von H.Joachim S. (crazyhorse)


Lesenswert?

Ist aber kein Multimaster. Da fängt man dann wieder an, dass ein Master 
alles abfragen muss.

von Michael B. (hardwarepunktbas)


Lesenswert?

Ich persönlich nutze RS485, Protokoll frei wählbar,
quasi kann man die UART 1:1 durchschalten und
die Treiber-ICs sind billig.
Bei nicht zu hohen Baudraten können 100e Meter
mit einfachen FM-Kabel überbrückt werden.
VG Micha

von H.Joachim S. (crazyhorse)


Lesenswert?

Ziemlich schnell und billig, ja.
Aber dasselbe Problem: Single Master super, für Multimaster einfach 
Kacke.

von Markus (Gast)


Lesenswert?

Hallo zusammen,

vielen Dank für eure Rückmeldungen :)

alles klar, CAN!

bez. dem Software-Protokoll bzw. wie die empfangen Daten verarbeitet 
werden und wie das Netzwerk unter den Geräten aufgebaut wird:
Habt ihr irgendwelche Beispiele  Projekte  Links / Stichworte für 
mich, damit ich mich einlesen kann? Weiss noch nicht so recht nach 
welchen Stichworten ich suchen soll.


Was ich denke ich noch brauche ist ein CAN-Datenlogger / Analyzer für 
den PC um zu sehen ob die Kommunikation funktioniert wie gewünscht.
Habt ihr eine Produktempfehlung für einen solchen Datenlogger für mich? 
Sollte nicht allzuteuer sein... :|

Vielen Dank für eure Hilfe!! :)

Gruss Markus

von Rainer M. (Gast)


Lesenswert?

Markus schrieb:
> Was ich denke ich noch brauche ist ein CAN-Datenlogger / Analyzer für
> den PC um zu sehen ob die Kommunikation funktioniert wie gewünscht.
> Habt ihr eine Produktempfehlung für einen solchen Datenlogger für mich?
> Sollte nicht allzuteuer sein... :|

Da fällt mir spontan der PCAN-USB ein
https://www.peak-system.com/PCAN-USB.199.0.html

Nicht das aller billigste aber auch nicht übertrieben teuer und tut 
einfach.

Gruß
Rainer

von H.Joachim S. (crazyhorse)


Lesenswert?

Nicht billig, aber gut: Peak-CAN.
Habe 3 Stück davon, seit ca. 15 Jahren im Einsatz. Kein einziger 
ausgefallen, und auch die diversen Betriebssystemwechsel völlig 
schmerzlos mitgemacht.

Was den Datenaustausch angeht: solange es nichts sicherheitsrelevantes 
ist mach es dir einfach und verzichte auf alle Sonderfälle wie explizite 
Anfrage bestimmter Daten (obwohl das extra vorgesehen ist, remote-frame) 
oder übergeordnetes Protokoll wie CANOpen.
Lass jeden Teilnehmer z.B. alle 20ms seinen kompletten Status 
(Eingänge, Ausgänge, Timer, was auch immer) auf den Bus blasen und 
verlass dich einfach drauf, dass es auch ankommt (wenn elektrisch 
korrekt aufgebaut und die Buslast überschaubar bleibt ist es praktisch 
tatsächlich fehlerfrei, eine theoretische winzige Fehlerrate bleibt 
natürlich).
Passt alles in 8Byte bist du schon fertig. Kannst natürlich je Karte 
auch mehrere IDs verwenden oder auch das 1.Datenbyte als Kennzeichen 
nehmen, was denn die restlichen 7 (oder auch weniger) Byte bedeuten. So 
kann man auf einer ID 256*7Datenbyte unterbringen. Du kannst dich da 
wirklich fast beliebig austoben.

von Ulf L. (ulf_l)


Lesenswert?

Hallo

Ja das PCANView kann einigermaße gut mitloggen, ein CAN-Interface ist 
aber immer nötig, wenn's der PC anzeigen soll. Für's PCANView eben eines 
von Peak.
Evtl. kannst Du das für's erste auch schon mal mit einem Oszi 
überprüfen. Z.B. das Picoscope hat ganz brauchbare Interpreter, die den 
Datenstrom dann gleich als CAN-Bytes anzeigen.

Gruß Ulf

: Bearbeitet durch User
von Richard (Gast)


Lesenswert?

Ich hab für einfache Zwecke schon des öfteren ein USBtin in Geräten 
verbaut.
So hat man dann einfach nen USB, an welchen man den PC für 
Diagnosezwecke anstöpseln kann.
https://www.fischl.de/usbtin/

von Thomas (kosmos)


Lesenswert?

Schau dir mal den ATMega16M1 an, der hat CAN mit drin brauchst nur einen 
Tranceiver z.b. MCP2551 oder dessen Nachfolger.

von Tom (Gast)


Lesenswert?

Markus schrieb:
> und wie das Netzwerk unter den Geräten aufgebaut wird:

Im einfachsten Fall wie bei dir sollte die ID den Inhalt der Nachricht 
beschreiben, nicht den Empfänger, Absender oder sonstwas:
ID 0x156: Gemessene Raumtemperatur
ID 0x157: Gemessene Raumluftfeuchtigkeit
ID 0x158: Sollwert Heizungsventil
ID 0x159: Istwert Heizungsventil
ID 0x160: Sollwert Lüfterdrehzahl
ID 0x161: Istwert Lüfterdrehzahl
Jede Komponente schickt periodisch das, was sie zu verkünden hat, und 
lauscht auf die Botschaften, die sie interessieren.

Schlecht ist sowas:
ID 0xc1: Botschaft vom Sensor- an Master-Controller mit diversen Werten
ID 0xc2: Botschaft vom Sensor- an Display-Controller mit diversen Werten
ID 0xc3: Botschaft vom Master- an Lüfter-Controller mit diversen Werten
Dann läuft man nämlich bei jeder kleinen Änderung herum und flasht alle 
Controller neu.

von Rcc (Gast)


Lesenswert?

Markus schrieb:

> Was ich denke ich noch brauche ist ein CAN-Datenlogger / Analyzer für
> den PC um zu sehen ob die Kommunikation funktioniert wie gewünscht.
> Habt ihr eine Produktempfehlung für einen solchen Datenlogger für mich?
> Sollte nicht allzuteuer sein... :|


Raspi mit CAN Shield (oder dem board das du verlinkt hast so umgebaut 
dass der can Controller mit 3,3V läuft) und den can utils

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.