Forum: Mikrocontroller und Digitale Elektronik Senden mit CAN Transceiver


von Appel0 A. (Gast)


Angehängte Dateien:

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?

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

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

 Wozu brauchst du Sendeleitung um Nachrichten mitzulesen ?

 Probiere mal mit Pullup am RxD, wenn es danach klappt (und es
 sollte klappen) könntest du überlegen, warum das so ist...

von Appel0 A. (Gast)


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.

von Falk B. (falk)


Angehängte Dateien:

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.

von Appel0 A. (Gast)


Lesenswert?

Falk B. schrieb:
> Nö, eher 1 Mbit/s oder auch 1MBaud.

Meinte ich auch hab mich verschrieben ^^

Falk B. schrieb:
> Warum nimmst du nicht einfach 2 Tranceiver für deine beiden uCs. Fertig.

Gute Idee, leider habe ich zZ keinen zweiten Transceiver zur Verfügung. 
Gibt es eine Alternativmöglichkeit?

von Falk B. (falk)


Lesenswert?

@ Appel0 A. (appel0)

>Gute Idee, leider habe ich zZ keinen zweiten Transceiver zur Verfügung.
>Gibt es eine Alternativmöglichkeit?

Hast du meinen Beitrag WIRKLICH gelesen? Und auch mal das Bild 
angeschaut?

von Appel0 A. (Gast)


Lesenswert?

Falk B. schrieb:
> Du mußt RXD und TXD trennen. Siehe Anhang.

Ich arbeite an einem eingebettetem System, bei dem RxD und TxD wie laut 
meiner Zeichnung auf der Platine miteinander verbunden sind.

Habe ich in meiner Problembeschreibung nicht erwähnt, sorry.

von Falk B. (falk)


Lesenswert?

@Appel0 A. (appel0)

>Ich arbeite an einem eingebettetem System, bei dem RxD und TxD wie laut
>meiner Zeichnung auf der Platine miteinander verbunden sind.

Dann wirst du das wohl ändern müssen. Denn so geht es nicht!

von Appel0 A. (Gast)


Lesenswert?

Falk B. schrieb:
> Dann wirst du das wohl ändern müssen. Denn so geht es nicht!

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

von Falk B. (falk)


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!

von Z.B. Max Z. (koooala)


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

von Falk B. (falk)



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.

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.