Forum: Mikrocontroller und Digitale Elektronik CAN als "Open-Drain"?


von Maxim B. (max182)


Lesenswert?

Guten Tag!
Ich habe eine Frage: kann man für kurze Strecke und niedrige Baudrate 
CAN-Bus als eine Leitung (und GND) mit Open Drain machen? D.h. statt 
stromfressigen Treiber wie MCP2551 etwa SN74HCS09 mit Widerstand Bus - 
VCC ca. 1k benutzen? Was spricht dagegen?

Genauer: ich möchte zwei (zuerst) PCB mit einem Kabel ca.2-3 Meter 
verbinden. Als Kabel möchte ich USB-A (beide Buchsen) nehmen, da ich 
eine Platine von anderer auch speisen möchte.
Als eine Lösung wäre USART denkbar. Aber vielleicht wäre so "leichte 
CAN" zwischen zwei AT90CAN128 (unter Rücksicht auf mögliche Erweiterung) 
auch sinnvoll?

Für analoge Mikrofone, das weiß ich aus Erfahrung, funktioniert eine 
asymmetrische Leitung etwa bis 1,5 Meter fast ohne Brummen. Dort ist 
Signal aber in Millivoltbereich, und hier wird schon 5 Volt.

Viele Grüße!

von P. S. (namnyef)


Lesenswert?

Ja, aufgrund der Funktionsweise von CAN ist das grundsätzlich möglich.
Um zu beurteilen, ob das was du konkret vor hast funktioniert, bräuchte 
es halt einen Schaltplan.

: Bearbeitet durch User
von Ge L. (Gast)


Lesenswert?

Maxim B. schrieb:

> Ich habe eine Frage: kann man für kurze Strecke und niedrige Baudrate
> CAN-Bus als eine Leitung (und GND) mit Open Drain machen?

Ja, das geht. Alle CAN-Rx verbinden, die CAN-Txe über Dioden dazu (so 
dass sie auf Low ziehen können und bei High abgekoppelt sind) und 1k als 
Pullup. Funktioniert einwandfrei auf der Leiterplatte und über die 
Backplane im Gerät.

> Genauer: ich möchte zwei (zuerst) PCB mit einem Kabel ca.2-3 Meter
> verbinden. Als Kabel möchte ich USB-A (beide Buchsen) nehmen, da ich
> eine Platine von anderer auch speisen möchte.

Das ist schon eine andere Ansage, aber wenn Du die Anstiegszeiten im 
Auge behältst, dann sollte es auch funktionieren. Leitungskapazität, 
Datenrate und Pullup müssen halt zusammenpassen.

von Sascha (Gast)


Lesenswert?

Nehm LIN-Bus. Geht bis 20kBaud, gibt Treiber mit integriertem 
Spannungsregler und ist sowieso schon Eindraht. Weiß nicht wie es bei 
internen/externen CAN-Treibern aussieht, aber LIN-Treiber sind "dumm" 
insofern ihnen das Protokoll was durchgeht egal ist, du dich also nicht 
an irgendwelche vorgegebene Schemata mit Prüfsummen/Adressen etc. halten 
musst.

von Maxim B. (max182)


Lesenswert?

Soul E. schrieb:
> Maxim B. schrieb:
>
>> Ich habe eine Frage: kann man für kurze Strecke und niedrige Baudrate
>> CAN-Bus als eine Leitung (und GND) mit Open Drain machen?
>
> Ja, das geht. Alle CAN-Rx verbinden, die CAN-Txe über Dioden dazu (so
> dass sie auf Low ziehen können und bei High abgekoppelt sind) und 1k als
> Pullup. Funktioniert einwandfrei auf der Leiterplatte und über die
> Backplane im Gerät.
>
> wenn Du die Anstiegszeiten im
> Auge behältst, dann sollte es auch funktionieren.

Vielen Dank!
Wahrscheinlich wäre es für nur zwei Platinen und zwei vorhandenen in 
USB-Kabel Signalleitungen auch USART ausreichend. Aber ich möchte doch 
mit CAN experimentieren. Ich denke, ich nehme lieber statt Diode 
Open-Drain-Puffer aus HCS-Serie. Sehr interessante neue Serie, schneller 
als HC und alle Eingänge mit Schmitt-Trigger. Ich habe schon HCS165 
ausprobiert...

Sascha schrieb:
> Nehm LIN-Bus.
LIN möchte ich nicht, da die zweite Platine auch etwas schicken sollte, 
wann sie will.

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

Maxim B. schrieb:
> Ich denke, ich nehme lieber statt Diode
> Open-Drain-Puffer aus HCS-Serie.

Vollkommen egal, totaler Overkill. Aber ja, der Maxi mach halt immer 
alles komisch.

von Sascha (Gast)


Lesenswert?

>> Maxim B. schrieb:

> Sascha schrieb:
>> Nehm LIN-Bus.
> LIN möchte ich nicht, da die zweite Platine auch etwas schicken sollte,
> wann sie will.

CAN und LIN sind halbduplex, es kann also bei beiden Übertragungsarten 
zu Buskollisionen kommen. Du wirst also um irgendeine Art Abritrierung 
nicht drumrum kommen. Wenn es bei zwei Busteilnehmern bleibt, einfach 
abwechselnd senden/empfangen.

von Klaus S. (kseege)


Lesenswert?

Sascha schrieb:
> CAN und LIN sind halbduplex, es kann also bei beiden Übertragungsarten
> zu Buskollisionen kommen. Du wirst also um irgendeine Art Abritrierung
> nicht drumrum kommen.

Bisher hatte CAN die Arbitrierung mit der eingbauten 
dominant/rezessiv-Erkennung während der geplanten Kollisionen immer 
selbst erledigt. Gibts jetzt ein Schrumpf-CAN ohne Arbitrierung? Oder 
gibt es Stromersparnis, wenn man die eingebaute Arbitrierung leerlaufen 
läßt und eine eigene Arbitrierung draufpackt?

Gruß Klaus (der soundsovielte)

P.S.Wer Sarkasmus findet, darf ihn behalten :-)

von Maxim B. (max182)


Lesenswert?

Sascha schrieb:
> CAN und LIN sind halbduplex, es kann also bei beiden Übertragungsarten
> zu Buskollisionen kommen.
Für CAN hat AVR-Serie AT90CAN32-128. Gibt es bei AVR etwas mit 
eingebauem  LIN-Modul?

von Volkmar S. (Gast)


Lesenswert?

Einfach 2 Microcontroller per "Poor Man's CAN-Bus" zusammenschalten:
https://www.hackster.io/monkbroc/poor-man-s-can-bus-602636
Habe ich schon mehrfach erfolgreich eingesetzt.

von Maxim B. (max182)


Lesenswert?

Danke! Interessante Idee. Mit HC30 und einem NOT kann man so 8 Geräte 
verbinden.

von H.Joachim S. (crazyhorse)


Lesenswert?

Und bist dann weit weg von one/two-wire.
Geht wenn die alle nah beieinander sind. Da finde ich Diodenlösung 
deutlich besser, kann immerhin ein paar Meter mit einer Leitung + Masse.

von Maxim B. (max182)


Lesenswert?

H.Joachim S. schrieb:
> Und bist dann weit weg von one/two-wire.

Ich möchte etwas wählen, wofür in AVR fertige Module existieren, die ISR 
haben. Deshalb kommt 1-Wire nicht in Frage.

Diodenlösund scheint mir etwas unsauber. Ich möchte "Open-Drain" Logik 
mit Schmitt-Trigger ausprobieren. Ein Element kommt zwischen Tx und 
Linie, zweiter kommt zwischen Linie und RX. So etwas wie 74HCS09 scheint 
mir passend zu sein. Wenn i2c schon einige Meter überdeckt, warum könnte 
das "unter-CAN" nicht?

: Bearbeitet durch User
von Frank K. (fchk)


Lesenswert?

Maxim B. schrieb:
> Sascha schrieb:
>> CAN und LIN sind halbduplex, es kann also bei beiden Übertragungsarten
>> zu Buskollisionen kommen.
> Für CAN hat AVR-Serie AT90CAN32-128. Gibt es bei AVR etwas mit
> eingebauem  LIN-Modul?

LIN ist praktisch UART mit Support für BREAK Erzeugung und Erkennung. 
Wenn Du nicht das Protokoll, sondern nur den physikalischen Layer 
verwenden willst, kannst Du fast alles verwenden.

fchk

von H.Joachim S. (crazyhorse)


Lesenswert?

Maxim B. schrieb:
> Ich möchte etwas wählen, wofür in AVR fertige Module existieren, die ISR
> haben. Deshalb kommt 1-Wire nicht in Frage.

Das haste wohl was völlig falsch verstanden. Ich meinte nicht den 
üblichen Onewire-Bus, sondern Eindraht-CAN. Und bei deiner Idee mit HC30 
schleppt man eben nicht nur die eigentliche Busleitung sondern auch die 
8 TX bis zu einem zentralen Gatter mit.

Maxim B. schrieb:
> Diodenlösund scheint mir etwas unsauber.

manchmal trügt der Schein. Das funktioniert gut, vor allem wegen der 
automatischen Fehlerkorrektur von CAN. Vorgesehene Buslast darf eben 
nicht zu gross sein.

Maxim B. schrieb:
> Wenn i2c schon einige Meter überdeckt, warum könnte
> das "unter-CAN" nicht?

CAN kann :-).

von Michael B. (laberkopp)


Lesenswert?

Maxim B. schrieb:
> D.h. statt stromfressigen Treiber wie MCP2551 etwa SN74HCS09 mit
> Widerstand Bus - VCC ca. 1k benutzen? Was spricht dagegen?

Es ist arschlangsam.

Ein 3m Kabel mit 1k pull up (5mA, exakt die Spezifikation früherer 
Centronix Druckeranschlüsse) geht maximal mit 1kBd, eher weniger wenn es 
störsicher sein soll.

CAN Bus braucht zwar wegen Busterminierungswiderstand und linearen 
Treibern Power, aber nur beim Senden. Mit brauchbaren Treibern wie 
NCV7340 brauchst du den Rest der Zeit 10uA. Strom ist also kein 
Argument.

Über USB Stecker ein nicht-USB Signal zu führen find ich aber blöd. USB 
geht auch über 3m. Man braucht halt nur die Rechenpower für einen Host. 
STM Nucleo oder so.

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


Lesenswert?

Maxim B. schrieb:
> Sehr interessante neue Serie, schneller als HC
Warum muss ein Open-Wasauchimmer denn "schnell" sein? "Schnell" kann ja 
nur die eine Flanke sein, die von dem Open-Irgendwas aktiv gezogen wird. 
Die andere Flanke ist so langsam wie es der Pullup samt der 
Leitungsimpedanz halt so hergibt.

Und "schnelle" Flanken bringen dann auch immer (das will die Physik so) 
irgendwelche unschönen Reflexionen und Signalklingeln mit sich.

> Aber ich möchte doch mit CAN experimentieren.
Warum frickelst du dann selber irgendwas Fadenscheiniges zusammen, das 
im Grunde so gut wie nichts mit CAN zu tun hat?

Maxim B. schrieb:
> Ich möchte "Open-Drain" Logik mit Schmitt-Trigger ausprobieren.
Möchte, möchte...

Warum machst du es denn nicht einfach? Warum probierst du es nicht aus? 
Wer hält dich davon ab?

: Bearbeitet durch Moderator
von Maxim B. (max182)


Lesenswert?

Michael B. schrieb:
> Über USB Stecker ein nicht-USB Signal zu führen find ich aber blöd. USB
> geht auch über 3m.

Ich möchte Kabel nehmen, das überall zu finden ist, robusten Steckdosen 
hat und das mit anderen Kabel in Projekt nicht zu verwechseln ist (aus 
diesem Grund kein MIDI-Kabel).

> Man braucht halt nur die Rechenpower für einen Host.
> STM Nucleo oder so.
Da ich Elektronik nur in Freizeit mache, habe ich keine Möglichkeit, 
alle gängige Systeme kennenzulernen. Ich möchte lieber zuerst die AVRs 
richtig erlernen. Und was in Zukunft kommt, das ist Zukunf.

: Bearbeitet durch User
von Frank K. (fchk)


Lesenswert?

Maxim B. schrieb:
> Michael B. schrieb:
>> Über USB Stecker ein nicht-USB Signal zu führen find ich aber blöd. USB
>> geht auch über 3m.
>
> Ich möchte Kabel nehmen, das überall zu finden ist, robusten Steckdosen
> hat und das mit anderen Kabel in Projekt nicht zu verwechseln ist (aus
> diesem Grund kein MIDI-Kabel).

Dann nimm Telefonkabel mit 4- oder 6-poligen Modularsteckern. (RJ10). 
Kabel gibts als Meterware, Stecker sind kein Problem, und die passende 
Crimpzange kostet auch nicht viel.

fchk

von Maxim B. (max182)


Lesenswert?

Lothar M. schrieb:
> Warum machst du es denn nicht einfach? Warum probierst du es nicht aus?
> Wer hält dich davon ab?

Die Zeit. Die Sache frißt enorm viel Zeit.
Heute wieder mal ein Päckchen aus China :) Eine kleine Platine für 
JTAG-Adapter: ich möchte in meinen Projekten statt 2,54 mm IDC-10 etwas 
kleinere mit 2 mm zwischen Pins und in SMD-Bauweise benutzen (nach dem 
alles fertig wird, kann so eine Steckdose leichter entfernt werden als 
die mit Löcher. Auch andere Seite von Platine kann man dann besser 
verwenden). Sonst sieht das unharmonisch aus: kleine AVR und riesige 
IDC. Von Ideal wird das noch weit, aber schon besser als ursprüngliche.

von Maxim B. (max182)


Lesenswert?

Frank K. schrieb:
> Dann nimm Telefonkabel mit 4- oder 6-poligen Modularsteckern. (RJ10).

Ja, darüber habe ich auch schon gedacht... Aber diese Steckdose ist doch 
etwas weniger robust. Das Ding wird für ständige Transport gedacht.

Ich habe sogar gedacht, 6,35 mm-Jack mit 3 Pin zu nehmen. Aber 
Verwechslungsgefahr: in Umgebung werden viele Jack-Kabel für Audio 
benutzt. Weniger als 3 Pin geht es nicht.

Aber vielleicht nehme ich doch CAN mit gewöhnlichen Treiber: USB-Kabel 
hat zwei Signalleitungen.

: Bearbeitet durch User
von Bauform B. (bauformb)


Lesenswert?

Maxim B. schrieb:
> Michael B. schrieb:
>> Über USB Stecker ein nicht-USB Signal zu führen find ich aber blöd. USB
>> geht auch über 3m.
>
> Ich möchte Kabel nehmen, das überall zu finden ist, robusten Steckdosen
> hat und das mit anderen Kabel in Projekt nicht zu verwechseln ist

Dann nimm wenigstens Patchkabel mit RJ45. Das ist zwar genauso verkehrt 
wie USB zu nehmen, aber RJ45 wird sowieso überall für alles mögliche 
benutzt.

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


Lesenswert?

Bauform B. schrieb:
> Dann nimm wenigstens Patchkabel mit RJ45.
Aber schlau wäre es, die Versorgung dann so anzuschließen, dass nicht 
der Ethernettrafo des aus Versehen angeschlossenen 2k€-Laptops dank der 
ebenfalls draufgelegten 5V abraucht.

von Maxim B. (max182)


Lesenswert?

Bauform B. schrieb:
> aber RJ45 wird sowieso überall für alles mögliche
> benutzt.
Nicht bei mir. In meinem Haushalt habe ich bisher solche Kabel gar 
nicht. Bei mir liegen dafür viele USB-, Jack- und XLR-Kabel herum... XRL 
wäre wegen Robustheit wohl am besten. Aber mögliche Verwechslung: wenn 
vor einem Einsatz fieberhaft alles zusammen zu stecken, das sollte gut 
durchgedacht werden.

Aber ich habe wegen CAN-Treiber zu lange bei Reichelt gekuckt. Jetzt 
sehe ich bei Mouser: es gibt wirklich was weniger frißt.

von Maxim B. (max182)


Lesenswert?

Lothar M. schrieb:
> Aber schlau wäre es, die Versorgung dann so anzuschließen, dass nicht
> der Ethernettrafo des aus Versehen angeschlossenen 2k€-Laptops dank der
> ebenfalls draufgelegten 5V abraucht.

Kein Problem: 2k€-Laptops gibt es bei mir gar nicht :) Ganzes Geld 
investiere ich in Musikinstrumente. Audioaufnahmen mache ich nie mit 
Laptop, ich habe dafür 8-Spur-Rekorder. Der ist sicherer als Laptop mit 
Audiointerface. Und auch viel kleiner. Deshalb keine Nowendigkeit...

Wegen RJ45: ich möchte ja auch entfernte Platinen speisen. Bei RJ45 
sehen die Drähtchen so dünn aus... Das ist ein wichtiger Grund für 
USB-Kabel: mindestens 0,5 A hält jedes, und Verpolung nicht möglich. 
Wenn aber Signadader in was anderes gesteckt werden, kann nicht viel 
passieren.

von Bauform B. (bauformb)


Angehängte Dateien:

Lesenswert?

Maxim B. schrieb:
> Aber ich habe wegen CAN-Treiber zu lange bei Reichelt gekuckt. Jetzt
> sehe ich bei Mouser: es gibt wirklich was weniger frißt.

Das eröffnet ja ganz neue Möglichkeiten: Der halb-offizielle CAN-Stecker 
ist Subminiatur-D, DE-9. Kennt evt. noch jemand von COM-Ports ;) Sehr 
gutes Preis/Leistungsverhältnis, sicher mehr als 1A pro Kontakt, 
Reichelt hat alle Einzelteile, vor allem Gehäuse in vielen Varianten. 
Und heutzutage kaum noch verwechselbar. Nur bei der Pinbelegung bin ich 
ratlos. Wie verbreitet ist der alte Vorschlag von TI aus der slla270?

Edit: Reichelt müsste auch noch fertige Kabel haben, genannt 
Modem-Kabel.

: Bearbeitet durch User
von Maxim B. (max182)


Lesenswert?

Bauform B. schrieb:
> Das eröffnet ja ganz neue Möglichkeiten: Der halb-offizielle CAN-Stecker
> ist Subminiatur-D, DE-9. Kennt evt. noch jemand von COM-Ports

Zu groß.

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Bauform B. schrieb:
> Wie verbreitet ist der alte Vorschlag von TI aus der slla270?

Weiß nicht. Aber das hier 
https://de.canopen-lift.org/wiki/CANopen-Stecker_9-Pin_D-Sub ist doch 
recht verbreitet. Zumindest die PEAK und Vector Adapter verwenden diese 
Belegung.

Matthias

von Thomas F. (igel)


Lesenswert?

Maxim B. schrieb:
> Ich habe sogar gedacht, 6,35 mm-Jack mit 3 Pin zu nehmen.
> Aber vielleicht nehme ich doch CAN mit gewöhnlichen Treiber: USB-Kabel
> hat zwei Signalleitungen.

Es gibt auch Single-Wire CAN:
https://www.nxp.com/products/interfaces/can-transceivers/legacy-can/single-wire-can-transceiver:MC33897

Wird bei Motorrädern gerne verwendet.

Robuste Steckverbinder und USB widerspricht sich aber.
Wenn es robust sein soll dann würde ich eine M8 oder M12 Sensorleitung 
verwenden.

von Maxim B. (max182)


Lesenswert?

Thomas F. schrieb:
>
> Es gibt auch Single-Wire CAN:
> 
https://www.nxp.com/products/interfaces/can-transceivers/legacy-can/single-wire-can-transceiver:MC33897
>
Danke! Sehr interessant! Vielleicht ist das gerade was ich brauche.

>
> Robuste Steckverbinder und USB widerspricht sich aber.
> Wenn es robust sein soll dann würde ich eine M8 oder M12 Sensorleitung
> verwenden.
Mit Single-Wire CAN kann ich gewöhnliche Stereokabel mit Jack 6,35 
nehmen. Solche Kabel habe ich genug und die sind genug robust.

Für mich ist noch wichtig, schnell schalten zu können. Jack 6,35 ist 
dafür gut geeignet.

Ich glaube, MC33897 überlebt auch, wenn BUS bei dem Einstecken auch 
kurzzeitig an GND oder VCC kommt.

: 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.