Forum: Mikrocontroller und Digitale Elektronik 5V CAN Controller und 3.3V uC


von Bob E. (embedded_bob)


Lesenswert?

Hallo zusammen,

der folgende CAN Transceiver 
(https://www.ti.com/lit/ds/symlink/sn65hvda1040a-q1.pdf?HQS=dis-mous-null-mousermode-dsf-pf-null-wwe&ts=1655104774556&ref_url=https%253A%252F%252Feu.mouser.com%252F) 
arbeitet mit 5V. Ich verwende diesen mit einem 3.3V Mikrocontroller und 
bekomme ihn nicht zum laufen. Sobald ich Botschaften auf den Bus schicke 
(über meinen Rechner, verbunden mit der Leiterplatte) komme ich in den 
"Bus-Off"-Status.

Ist ein mit 5V gespeister CAN Controller überhaupt in der Lage mit einem 
3.3V uC zu kommunizieren?
Wo könnte noch das Problem liegen?
Abschlusswiderstände sind vorhanden, Code sollte (und hat schon) so 
funktionieren.

Danke vorab für alle Tipps

Gruß

von Falk B. (falk)


Lesenswert?

Bob E. schrieb:
> Ist ein mit 5V gespeister CAN Controller überhaupt in der Lage mit einem
> 3.3V uC zu kommunizieren?

Wenn er mit 3,3V in Richtung uC arbeitet, dann schon.

> Wo könnte noch das Problem liegen?
> Abschlusswiderstände sind vorhanden, Code sollte (und hat schon) so
> funktionieren.

Du hast den falschen Tranceiver, der arbeitet nur mit 5V für CAN UND uC!
Versuch's mal mit MAX13050/MAX13052/MAX13053/MAX13054 oder ähnlich.

von kenny (Gast)


Lesenswert?

Bob E. schrieb:
> Ist ein mit 5V gespeister CAN Controller überhaupt in der Lage mit einem
> 3.3V uC zu kommunizieren?
> Wo könnte noch das Problem liegen?
> Abschlusswiderstände sind vorhanden, Code sollte (und hat schon) so
> funktionieren.
>
> Danke vorab für alle Tipps
>
> Gruß

Nutzt Du Pegelwandler von 3V3 auf 5V?

von Bob E. (embedded_bob)


Lesenswert?

kenny schrieb:
> Bob E. schrieb:
>> Ist ein mit 5V gespeister CAN Controller überhaupt in der Lage mit einem
>> 3.3V uC zu kommunizieren?
>> Wo könnte noch das Problem liegen?
>> Abschlusswiderstände sind vorhanden, Code sollte (und hat schon) so
>> funktionieren.
>>
>> Danke vorab für alle Tipps
>>
>> Gruß
>
> Nutzt Du Pegelwandler von 3V3 auf 5V?

Ja aber nicht im Zusammenhang mit dem CAN :)

Wieso?

von Thomas F. (igel)


Lesenswert?

Bob E. schrieb:
> Ist ein mit 5V gespeister CAN Controller überhaupt in der Lage mit einem
> 3.3V uC zu kommunizieren?

Controller oder Transceiver?
Bei mir funktioniert das problemlos.

Steht sogar auf der ersten Seite des Datenblattes:
"Digital Inputs Compatible With 3.3-V and 5-V Microprocessors".

Bob E. schrieb:
> Sobald ich Botschaften auf den Bus schicke
> (über meinen Rechner, verbunden mit der Leiterplatte) komme ich in den
> "Bus-Off"-Status.

Falsches Bit-Timing oder fehlendes ACK.

von Rudolph R. (rudolph)


Lesenswert?

Bob E. schrieb:
> Ich verwende diesen mit einem 3.3V Mikrocontroller und
> bekomme ihn nicht zum laufen.

Wie schützt Du eigentlich den unbekannten Controller vor dem 5V Ausgang 
des CAN-Transceivers?

Edit: ein Stück Schaltplan könnte sich auch als nützlich erweisen.

: Bearbeitet durch User
von Bob E. (embedded_bob)


Lesenswert?

Rudolph R. schrieb:
> Bob E. schrieb:
>> Ich verwende diesen mit einem 3.3V Mikrocontroller und
>> bekomme ihn nicht zum laufen.
>
> Wie schützt Du eigentlich den unbekannten Controller vor dem 5V Ausgang
> des CAN-Transceivers?
>
> Edit: ein Stück Schaltplan könnte sich auch als nützlich erweisen.

Den kann ich morgen hochladen.
Aktuell gar nicht geschützt, habe die Vermutung auch gehabt dass der 
Controller die 5V vom Transceiver nicht aushält. Habe im Datenblatt 
vorher auf die Schnelle nichts gefunden.

von nOXX (Gast)


Lesenswert?

Hast Du eine Gegenstelle, die die CAN Botschaften empfängt? Hast Du 
einen Abschlusswiderstand dran?

von Möwe (Gast)


Lesenswert?

Abend,

Datenblatt lesen (S.17):
9.1 Application Information
9.1.1 Using With 3.3-V Microcontrollers
The input level threshold for the digital input pins of this device are 
3.3-V compatible, however a few application
considerations must be taken if using this device with 3.3-V 
microcontrollers. Both TXD and STB input pins have
internal pullup sources to VCC. Some microcontroller vendors recommend 
using an open-drain configuration on
their I/O pins in this case even though the pullup limits the current. 
As such care must be taken at the application
level that TXD and STB have sufficient pullup to meet system timing 
requirements for CAN. The internal pullup
on TXD especially may not be sufficient to overcome the parasitic 
capacitances and allow for adequate CAN
timing; thus, an additional external pullup may be required. Care should 
also be taken with the RXD pin of the
microcontroller as the RXD output of this device drives the full VCC 
range (5 V). If the microcontroller RXD input
pin is not 5-V tolerant, this must be addressed at the application 
level. Other options include using a CAN
transceiver from TI with I/O level adapting or a 3.3-V CAN transceiver.

Gruß
Möwe

von c-hater (Gast)


Lesenswert?

Bob E. schrieb:

> Aktuell gar nicht geschützt, habe die Vermutung auch gehabt dass der
> Controller die 5V vom Transceiver nicht aushält. Habe im Datenblatt
> vorher auf die Schnelle nichts gefunden.

Wenn ich einen µC an CAN anbinden möchte und dafür einen entsprechenden 
Transceiver kaufe, ist doch das erste, was jeder Normaldenkende macht, 
einen PASSENDEN auszusuchen. Und ja, das impliziert, dass man auch 
Datenblätter lesen muss. Und eben nicht nicht nur "auf die Schnelle", 
sondern zumindest im Detail bezüglich der Anbindung des µC.

Nur Vollidioten kaufen erst und checken dann...

von nOXX (Gast)


Lesenswert?

@c-hater
Bist ein brummliger alter Mann, oder? Vermutlich, denn wenn ich hier was 
von dir lesen, dann ist es nur Gemeckere.

von Stefan F. (Gast)


Lesenswert?

nOXX schrieb:
> Bist ein brummliger alter Mann, oder?

Heute ist er doch total handzahm. Warte mal ab, bis er schlecht gelaunt 
ist. Dann fallen dir die Ohren ab, bzw. die Augen aus dem Kopf.

von c-hater (Gast)


Lesenswert?

nOXX schrieb:

> @c-hater
> Bist ein brummliger alter Mann, oder?

Kann schon sein, dass mich offensichtliche Idiotie etwas brummelig 
macht. Nein, bei nochmaligem Nachdenken: es macht mich ganz sicher 
ziemlich brummelig.

Keine Anung, ob es damit zusammhängt, dass ich (relativ) alt bin. Soweit 
ich mich erinnern kann, hat mich offensichtliche Idiotie auch in 
jüngeren Jahren schon extrem genervt.

von temp (Gast)


Lesenswert?

c-hater schrieb:
> Wenn ich einen µC an CAN anbinden möchte und dafür einen entsprechenden
> Transceiver kaufe, ist doch das erste, was jeder Normaldenkende macht,
> einen PASSENDEN auszusuchen.

Es hat keiner gesagt dass der Transceiver gerade eben speziell gekauft 
wurde. Heute ist es ja wie zu DDR Zeiten, am besten nimmt man das was 
man hat und macht es passend. Irgendwas aussuchen und schnell neu kaufen 
gab es schon viele Monde nicht mehr. Viel STM und NXP Controller können 
mit 5V leben, also um welchen geht es eigentlich?

von Harald A. (embedded)


Lesenswert?

Viele 3.3V Controller sind 5V-tolerant an den Eingängen. Evtl. ist 
deiner auch 3.3V-tolerant? In Richtung Transceiver besteht kein Problem, 
der ist mit >2V zufrieden. Die Ausnutzung der 5V-Toleranz ist vlt. nicht 
die feinste englische Art, aber durchaus möglich. Was macht denn der 
STB-Pin? Ist der auf GND gezogen? Oder RXD/TXD gekreuzt? Oder Filter 
nicht bzw. falsch gesetzt?

: Bearbeitet durch User
von Bob E. (embedded_bob)


Lesenswert?

Harald A. schrieb:
> Viele 3.3V Controller sind 5V-tolerant an den Eingängen. Evtl. ist
> deiner auch 3.3V-tolerant? In Richtung Transceiver besteht kein Problem,
> der ist mit >2V zufrieden. Die Ausnutzung der 5V-Toleranz ist vlt. nicht
> die feinste englische Art, aber durchaus möglich. Was macht denn der
> STB-Pin? Ist der auf GND gezogen? Oder RXD/TXD gekreuzt? Oder Filter
> nicht bzw. falsch gesetzt?

Hallo Harald,

danke für deine konstruktive Antwort.
Der STB-Pin ist auf GND gezogen. RXD/TXD sind nicht gekreuzt/falsch 
herum verbunden. Was meinst du mit Filter? Auf der CANH und CANL Seite? 
Da habe ich Drossel, Abschlusswiderstand und TVS-Dioden verbaut. Hat so 
auch schon in der selben Konfiguration mit anderem uC (ESP32) 
funktioniert.
Diesesmal verwende ich einen XMC4200Q48k256.

Gruß
Bob

von Bob E. (embedded_bob)


Angehängte Dateien:

Lesenswert?

Anbei ein Datenblattauszug 
(https://www.mouser.de/datasheet/2/196/Infineon-XMC4100_XMC4200_DS-DS-v01_04-EN-1075306.pdf 
S.31)

Heißt es ich kann an keinem Pin über 4,3V anlegen? Entsprechend müssten 
mir die Eingänge kaputt gehen.. oder?

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Wenn die Baudrate nicht allzu hoch ist, reicht oft ein simpler 
Spannungsteiler (1kΩ + 2,2kΩ). 115200 Baud gehen damit auf jeden Fall.

von Rudolph (Gast)


Lesenswert?

Siehe Kapitel 3.1.2 "Pin Reliability in Overload"

Es ist zulässig den Strom in einen Pin bei Überlast zu begrenzen:
"Note: A series resistor at the pin to limit the current to the maximum 
permitted overload
current is sufficient to handle failure situations like short to 
battery."

Das ist zwar nicht toll und auf jeden Fall der falsche Transceiver für 
den Controller, aber mit einem 4k7 in Reihe zu RXD könnte das gepatcht 
sein.

von Bob E. (embedded_bob)


Lesenswert?

Rudolph schrieb:
> Siehe Kapitel 3.1.2 "Pin Reliability in Overload"
>
> Es ist zulässig den Strom in einen Pin bei Überlast zu begrenzen:
> "Note: A series resistor at the pin to limit the current to the maximum
> permitted overload
> current is sufficient to handle failure situations like short to
> battery."
>
> Das ist zwar nicht toll und auf jeden Fall der falsche Transceiver für
> den Controller, aber mit einem 4k7 in Reihe zu RXD könnte das gepatcht
> sein.

Das werde ich mal probieren. Vielen Dank

von Rudolph (Gast)


Lesenswert?

Wobei das auch einen neuen Controller erfordern könnte, das ist jetzt 
nicht so unwahrscheinlich das der Transceiver den RXD Pin gegrillt hat.

von 888 (Gast)


Lesenswert?

Rudolph schrieb:

> Das ist zwar nicht toll und auf jeden Fall der falsche Transceiver für
> den Controller, aber mit einem 4k7 in Reihe zu RXD könnte das gepatcht
> sein.

Aufpassen, bzw die Application Note genau lesen. Für die meisten 
Controller gelten mehrere Limits für den injection current in die 
ESD-Diode. Ein Grenzwert, bis zu dem keine Schädigung des Bauteils 
eintritt (für den Fehlerfall Überspannung am Eingang) und ein Grenzwert, 
bis zu dem keine Funktionsbeeinträchtigung analoger Schaltungsteile 
(ADC, Lowspeed-Oszillator, PLL) auftritt. Für den Dauerbetrieb sollte 
man letzteren nicht überschreiten. Sonst verliert man ADC-Genauigkeit.

von Harald A. (embedded)


Lesenswert?

Mit Filter meinte ich den ID Filter im CAN Controller. Der CAN 
Controller liefert ein Acknowledge nur auf die IDs, die durch den Filter 
gehen. In den meisten Standardanwendungen wird dieser Filter einfach auf 
vollkommen offen gesetzt, so dass einfach jede Nachricht quittiert wird. 
Das muss bei Dir aber nicht so sein.
Fehlt das Acknowledge für den Sender kommt es zur berühmten Dauersendung 
mit Bus-Off.

Scope zur Hand oder Logic Analyzer? Dann mal am RX Pin schauen, ob die 
Nachricht vom Sender vernünftig eingeht. Falls nicht vorhanden, bitte LA 
für 10€ kaufen.

Sind die CAN RX TX Pins in den „alternative mode“ geschaltet?

: Bearbeitet durch User
von Thomas F. (igel)


Lesenswert?

Harald A. schrieb:
> Der CAN Controller liefert ein Acknowledge nur auf die IDs, die durch den Filter 
gehen.

Nö. Das ACK wird immer gesendet, außer der Controller ist Listen-only.

Reference-Manual XMC4200 Seite 1169:
"Any node that has received an error free frame acknowledges
the correct reception of the frame by sending back a dominant bit, 
regardless of whether or not the node is configured to accept that 
specific message."

Gilt meines Wissens für alle CAN-Controller.

von Harald A. (embedded)


Lesenswert?

Thomas F. schrieb:
> Harald A. schrieb:
>> Der CAN Controller liefert ein Acknowledge nur auf die IDs, die durch den 
Filter
> gehen.
>
> Nö. Das ACK wird immer gesendet, außer der Controller ist Listen-only.
>
> Reference-Manual XMC4200 Seite 1169:
> "Any node that has received an error free frame acknowledges
> the correct reception of the frame by sending back a dominant bit,
> regardless of whether or not the node is configured to accept that
> specific message."
>
> Gilt meines Wissens für alle CAN-Controller.

Interessant! Ich hatte definitiv schon mit Controllern zu tun, die nur 
Messages quittiert haben, die durch den Filter kamen. Das würde ja auch 
durchaus Sinn ergeben: Wenn alle Teilnehmer auf spezifische Adressen 
filtern kann der Sender sichergehen, dass die Nachricht den „richtigen“ 
Teilnehmer erreicht hat. Ich bin mir nicht mehr 100% sicher, aber aus 
der Erinnerung heraus war es ein LPC11C24, der entsprechend reagierte.

von (prx) A. K. (prx)


Lesenswert?

Thomas F. schrieb:
> Gilt meines Wissens für alle CAN-Controller.

So kenne ich das auch. Das ACK Bit informiert nicht darüber, ob der 
Frame eine Node gefunden hat, die sich dafür interessiert, sondern nur, 
ob der Frame von irgendwem als korrekt erkannt wurde.

Andernfalls würde ein Frame, der keinen Adressaten findet, vom Sender 
permanent wiederholt.

: Bearbeitet durch User
von Rudolph (Gast)


Lesenswert?

Das kann ich auch bestätigen, ich habe sogar ein Projekt das nichts 
anderes macht als ACK zu senden, dafür wird der CAN-Controller gerade 
mal so initialisiert auf die Bus-Parameter, keine Filter, keine 
Message-Boxen.
Das ist nützlich wenn man ein Steuergerät testet und sonst nur das 
USB-Interface am Bus hat, hängt sich das Steuergerät auf ist so 
wenigstens der Bus an sich noch da und die Test-Umgebung hängt sich 
nicht gleich mit auf.

von Harald A. (embedded)


Lesenswert?

Na gut :-) Ich werde es bei nächster Gelegenheit, wenn ich mal wieder 
ein Projekt mit dem LPC11C24 auf dem Tisch habe, nochmals probieren. Bis 
dahin rücke ich dann erstmal von meiner These ab.

von temp (Gast)


Lesenswert?

Harald A. schrieb:
> Interessant! Ich hatte definitiv schon mit Controllern zu tun, die nur
> Messages quittiert haben, die durch den Filter kamen. Das würde ja auch
> durchaus Sinn ergeben: Wenn alle Teilnehmer auf spezifische Adressen
> filtern kann der Sender sichergehen, dass die Nachricht den „richtigen“
> Teilnehmer erreicht hat. Ich bin mir nicht mehr 100% sicher, aber aus
> der Erinnerung heraus war es ein LPC11C24, der entsprechend reagierte.

Das ist kompletter Käse auch in Hinblick auf den LPC11C24/LPC11C14, von 
dem ich reichlich verbaut habe. Hier gibt es auch keinen 
Interpretationsspielraum weil etwas anderes den ganzen CAN-Bus kaputt 
machen würde. Wenn der Sender wissen will ob der "richtige" Teilnehmer 
die Nachricht empfangen hat muss dieser selbst aktiv werden und eine 
Quittierung in welcher Form auch immer senden. Was würde es nützen wenn 
der "richtige" Teilnehmer als einziger die Nachricht mit ACK bestätigt? 
Das heißt ja dann nur, daß die Hardware im Controller die Nachricht 
gesehen hat und noch lange nicht das Programm auf dem Controller.

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.