Senden mit CAN Transceiver

Gast #5566153
Lesenswert?

Hallo,

zZ sniffe ich über einen CAN Transceiver (TJA1041A - Datenblatt: 
https://www.nxp.com/docs/en/data-sheet/TJA1041A.pdf) die digitalen 
Nachrichten auf einem PCAN-Bus (die Datenrate beträgt 1MHz).
Um die digitalen Nachrichten am PCAN im Restbussimulator anzuzeigen 
wandelt der Transceiver das digitale in ein differenzielles Signal (Pin 
TxD).
Für das Senden muss ein differenzielles Signal aus der Simulation in ein 
digitales umgewandelt werden (Pin RxD).

Das lesen der Nachrichten am Bus funktioniert soweit und die Nachrichten 
lassen sich in CANoe (ein Restbussimulator) darstellen (Schaltung, wie 
im angehängtem Bild ohne rot gezeichnete Leitung).

Sobald ich jedoch die Leitung zum Aussenden von Nachrichten an den CAN 
Transceiver (Pin RxD) anschließe (entspricht der rot gezeichneten 
Leitung im Bild) bricht das Senden am differentiellen Signalausgang des 
Transceivers ab  (beide Signale dauerhaft rezessiv) und es werden keine 
weitere Nachrichten mehr an die Simulation gesendet.

Der CAN Transceiver wird im Normal Mode betrieben (/STB und EN sind 
high).
Die Leitungen sind kurz um lange Signallaufzeiten zu vermeiden.


Was muss man machen/beachten, damit das mitlesen der Nachrichten über 
den Transceiver auch nach anschließen der Sendeleitung möglich ist?

Hat jemand bereits Erfahrungen mit dem CAN Transceiver TJA1041A?
Angehängte Dateien:
Gast #5566177
Lesenswert?

Danke für die Antwort.

Mein Ziel ist es Nachrichten zu senden und gleichzeitig dabei in der 
Lage zu sein mitzusniffen. Da allerdings das mitlesen schon beim 
anstecken der RxD Leitung nicht mehr funktioniert, war mein Ziel erst 
mal das Anschließen der Sendeleitung ohne das dabei das Mitlesen 
abbricht.

Wo genau soll der Pull Up Widerstand angebracht werden? Es befindet sich 
in der Schaltung doch bereits ein Pull Up Widerstand R.
#5566185
Lesenswert?

@ Appel0 A. (appel0)

>zZ sniffe ich über einen CAN Transceiver (TJA1041A - Datenblatt:

>https://www.nxp.com/docs/en/data-sheet/TJA1041A.pdf) die digitalen
>Nachrichten auf einem PCAN-Bus (die Datenrate beträgt 1MHz).

Nö, eher 1 Mbit/s oder auch 1MBaud.

>Um die digitalen Nachrichten am PCAN im Restbussimulator anzuzeigen
>wandelt der Transceiver das digitale in ein differenzielles Signal (Pin
>TxD).

Das ist sein Job.

>Für das Senden muss ein differenzielles Signal aus der Simulation in ein
>digitales umgewandelt werden (Pin RxD).

Simulation? Ich glaube das ist eher eine Emulation. Kleiner, aber feiner 
Unterschied.

>Sobald ich jedoch die Leitung zum Aussenden von Nachrichten an den CAN
>Transceiver (Pin RxD) anschließe (entspricht der rot gezeichneten
>Leitung im Bild)

Hehe, schöner Trick. Leider funktioniert er so nicht, denn sobald einmal 
der Pegel dominant wurde, bleibt er dort hängen, weil das eigene 
Sendesignal vom BUS auf RXD übertragen wird und dort dominant den Bus 
auf alle Ewigkeiten festhält ;-)

Du mußt RXD und TXD trennen. Siehe Anhang.

Warum nimmst du nicht einfach 2 Tranceiver für deine beiden uCs. Fertig.

>Die Leitungen sind kurz um lange Signallaufzeiten zu vermeiden.

Naja, man muss die schon ZIEMLICH lang machen, damit das ins Gewicht 
fällt.

>Hat jemand bereits Erfahrungen mit dem CAN Transceiver TJA1041A?

Das ist ein normaler Tranceiver ohne großen Schnick Schnack.

P.S.
Angehängte Dateien:
#5566242
Lesenswert?

@ Appel0 A. (appel0)

>Warum geht es nicht, sobald ich einen 3. Teilnehmer (eben den CAN
>Transceiver) anschließe?

Habe ich das nicht beschrieben? Hast du es gelesen? hast du wenigstens 
VERSUCHT, es zu verstehen?
Der CAN-Tranciever verhält sich logischerweise ANDERS als die beiden 
uCs!!
Es ist mit ihnen NICHT gleichwertig am Bus!
#5595160
Lesenswert?

Falk B. schrieb:
> Hehe, schöner Trick. Leider funktioniert er so nicht, denn sobald einmal
> der Pegel dominant wurde, bleibt er dort hängen, weil das eigene
> Sendesignal vom BUS auf RXD übertragen wird und dort dominant den Bus
> auf alle Ewigkeiten festhält ;-)

Ich verstehe nicht ganz daran, wieso der Bus dominant festgehalten wird, 
wenn doch das Signal TxD auf RxD übertragen wird, dann müsste doch stets 
das gelesene Signal auch gesendet werden, wieso bleibt es dann aber 
stets dominant...?
#5658585
Lesenswert?

Z.B. Max Z. schrieb:
> Ich verstehe nicht ganz daran, wieso der Bus dominant festgehalten wird,
> wenn doch das Signal TxD auf RxD übertragen wird, dann müsste doch stets
> das gelesene Signal auch gesendet werden, wieso bleibt es dann aber
> stets dominant...?

Weil die Rückkopplung über den CAN-Bus im Tranceiver sich selbst 
festhält.

https://de.wikipedia.org/wiki/Controller_Area_Network#%C3%9Cbertragungsverfahren

Der rezesive Pegel hat ~0V Differenzspannung zwischen CAN_H und CAN_L, 
der dominante ca. 2V.

Wenn man nun wie der OP in seiner Schaltung RXD und TXD vom Tranceiver 
verbindet, hält der sich selber auf High fest. Ich habe mal ein 
vereinfachtes Ersatzschaltbild des CAN-Tranceivers gezeichnet. Im 
Prinzip sind Sender und Empfänger invertiertende Stufen.

Sender:

TXD:

LOW  -> CAN-BUS dominant (differentiell HIGH)
HIGH -> CAN-BUS rezessiv (differentiell LOW)

RXD:

CAN-BUS dominant (differentiell HIGH) -> LOW
CAN-BUS rezessiv (differentiell LOW)  -> HIGH

Wie man sieht, liefert RXD das gleiche, NICHTINVERTIERTE Signal, das 
auch an TXD angelegt wird, denn die beiden Inverter heben sich auf. Das 
braucht man auch, denn der CAN-Controller bzw. der Mikrocontroller mit 
eingebautem CAN muss beim Senden das Bussignal zurücklesen können, um 
eine Kollision mit anderen, gerade sendenden CAN-Knoten feststellen zu 
können.

Sind wir mal optimistisch und gehen davon aus, daß die Schaltung beim 
Einschalten ein HIGH an CAN-INTERN hat. Damit wird der CAN-BUS durch 
IC1A rezessiv (LOW) getrieben. Das wiederum wird vom Empfänger IC1B als 
HIGH an RXD ausgegeben. So weit, so gut.

Doch jetzt sendet einer der Mikrocontroller in dem Verbund ein LOW von 
IC2A  TXD durch D2 auf CAN-INTERN. Das wird über TXD und IC1A zu 
DOMINANT auf CAN-BUS, welches wiederum zu LOW auf RXD wird. Gleiche 
Situation? Nein. Denn jetzt kommt die UND-Verknüpfung der Dioden ins 
Spiel. Selbst wenn der
Mikrocontroller seine Sendung beendet hat und das TXD an IC2A auf HIGH 
geht, bleibt CAN-INTERN auf LOW, denn die Diode D2 sperrt! Das Signal 
CAN-INTERN wird immer noch durch IC1B über D1 auf LOW gehalten! Und kein 
Teilnehmer an CAN-INTERN kann das verhindern, denn keiner kann 
CAN-INTERN aktiv nach HIGH schalten, nur AKTIV nach LOW! D.h. erst wenn 
alle TXD-Signale am Bus freiwillig auf HIGH gehen, geht auch CAN-INTERN 
auf HIGH. Das klappt aber beim Tranceiver nicht, weil der ne 
Rückkopplung über den Bus hat. Die Mikrocontroller haben die NICHT!

Die Lösung wurde schon genannt und soll hier nochmal im 2. Bild gezeigt 
werden. Durch die Trennung der Daten am Tranceiver kann der sich niemals 
selber verklemmen, denn sein TXD-Signal geht nur an die RXD-Eingänge 
aller internen Busteilnehmer. Ein Ausgang, viele Eingänge. Die 
TXD-Ausgänge der Mikrocontroller hingegen gehen NUR auf RXD vom 
Tranceiver. Auch hier kann niemand was festklemmen, weil es keine 
logische Rückkopplung gibt wie im Tranceiver. Wenn einer der 
Mikrokontroller mit Senden fertig ist, geht sein  TXD-Ausgang auf HIGH, 
das Signal wird durch R1 auf HIGH gezogen.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren