Forum: Mikrocontroller und Digitale Elektronik TJA1020 mit ESP32 betreiben


von Olli Z. (z80freak)


Angehängte Dateien:

Lesenswert?

Ich möchte mir einen LIN-Sniffer mit einem ESP32 (S3) bauen und als 
Transceiver einen TJA1020 verwenden und habe dazu noch ein paar Fragen.

Für meine Anwendung reicht ja erstmal nur den RXD zu verbinden. Dieser 
ist laut Schaltbild Open-Drain, muss also mit einem Pullup auf IO-Pegel 
gebracht werden. Sollte ich das mit einem externen Widerstand (10 k) 
tun, oder reicht da auch der interne Pullup des ESP32 auf einem GPIO?

Der LIN-Bus hat einen 12V Pegel, da muss ich mich ja eigentlich nur 
anklemmen. Der TJA selbst benötigt ja eine Betriebsspannung, die liegt 
laut Datenblatt im Bereich 5 bis 27 V. Ich habe jetzt nicht 
herausgelesen das die irgendwie von der LIN-Spannung abhängt, also 
sollte es doch reichen die 5V vom ESP-Board dafür zu nutzen?

Für einen normalen Betriebsmodus ohne irgendwelche Energiesparfunktionen 
muss laut Datenblatt NSLP auf 1 (3,3 V) gezogen werden. Mehr ist für den 
einfachen Lesebetrieb scheinbar nicht notwendig?

Nun zum ESP32. Der hat ja keinen LIN-Controller also muss man das 
entweder per Bit-Banging erledigen oder per UART. Bei UART sehe ich 
besonders die Verarbeitung sowie Erzeugung des BREAK als kritischen 
Punkt an. Der Rest wäre ja gleich? Also Baudrate mit 8N1 sollte bei LIN 
grundsätzlich Bytes liefern. Das SYNC-Byte sollte dann als 0x55 daher 
kommen. Macht es Sinn das mit UART zu tun? Ein "Trick" für das senden 
eines BREAKs ist wohl die Baudrate zu halbieren, aber das empfangen 
eines 13 Bit langen BREAK mit 1 Bit rezessiv in Folge ist wohl ein 
Problem für UARTs.

In meinem konkreten Fall habe ich mal einen Logic-Analyzer an den Bus 
gehangen und bin nach den gemessenen Werten der Meinung das die Baudrate 
9.600 sein müsste. Wenn ich vom LA den ASYNC-Serial Analyzer auf 9600 
8N1 einstelle und den Pegel auf Negativ (weil ja im Ruhezustand HIGH), 
erhalte ich auch ein vermeintlich brauchbares Datenbild.

: Bearbeitet durch User
von Soul E. (soul_eye)


Lesenswert?

Solange Du keine EMV-Tests machen willst, spricht nichts dagegen den 
internen Pullup zu verwenden. Echte Widerstände sind robuster, das 
bringt in Deiner Anwendung wahrscheinlich keine Vorteile.
Schau Dir die steigende Flanke mit dem Oszilloskop an. Wenn die zu sehr 
abgerundet ist, ist der Widerstand zu groß.

Der Transceiver muß mit der Betriebsspannung des Netzwerkes versorgt 
werden. Referenz für High/Low ist die halbe Betriebsspannung.

Beim Empfang mit einem UART liefert das Sync Break einen frame error. Je 
nach Controller kann man damit einen Interrupt auslösen.

LIN mit 9k6 gibt es, üblich ist 19200.

von Rainer W. (rawi)


Lesenswert?

Olli Z. schrieb:
> Ich habe jetzt nicht herausgelesen das die irgendwie von der
> LIN-Spannung abhängt, also sollte es doch reichen die 5V vom
> ESP-Board dafür zu nutzen?

Das ist nicht so richtig toll. An BAT liegt normalerweise die gleiche 
Spannung, mit der auch der Bus läuft. Die Schwelle für den Empfänger 
(receiver threshold voltage V_th(rx)) liegen irgendwo zwischen 0.4 ... 
0.5 V_Bat @ V_Bat 7.3 ... 27 V (Datenblatt Philips/NXP s.11), d.h. wenn 
du den TJA1020 mit 5V betreibst, ist damit zu rechnen, dass die Schwelle 
wahrscheinlich bei um die 2 ... 3V liegt (nicht mehr spezifiziert). Du 
hast also einen kräftig reduzierten Störabstand. Sobald der LIN-Pegel 
nicht weit genug auf 0V gezogen wird, kann es eng werden, bei 
kapazitiver Belastung verschieben sich Signalflanken.

: Bearbeitet durch User
von Frank K. (fchk)


Lesenswert?

Olli Z. schrieb:

> Für meine Anwendung reicht ja erstmal nur den RXD zu verbinden. Dieser
> ist laut Schaltbild Open-Drain, muss also mit einem Pullup auf IO-Pegel
> gebracht werden. Sollte ich das mit einem externen Widerstand (10 k)
> tun, oder reicht da auch der interne Pullup des ESP32 auf einem GPIO?

Sehe in jedem Fall externe Widerstände vor. Nicht bestücken kannst Du 
immer noch.

> Der LIN-Bus hat einen 12V Pegel, da muss ich mich ja eigentlich nur
> anklemmen. Der TJA selbst benötigt ja eine Betriebsspannung, die liegt
> laut Datenblatt im Bereich 5 bis 27 V. Ich habe jetzt nicht
> herausgelesen das die irgendwie von der LIN-Spannung abhängt, also
> sollte es doch reichen die 5V vom ESP-Board dafür zu nutzen?

Nein, das ist so nicht vorgesehen. VBAT kommt direkt an die 
LIN-Busspannung (12 oder 24V je nach System un Transceiver).

> Für einen normalen Betriebsmodus ohne irgendwelche Energiesparfunktionen
> muss laut Datenblatt NSLP auf 1 (3,3 V) gezogen werden. Mehr ist für den
> einfachen Lesebetrieb scheinbar nicht notwendig?

ja.

> Nun zum ESP32. Der hat ja keinen LIN-Controller also muss man das
> entweder per Bit-Banging erledigen oder per UART. Bei UART sehe ich
> besonders die Verarbeitung sowie Erzeugung des BREAK als kritischen
> Punkt an. Der Rest wäre ja gleich? Also Baudrate mit 8N1 sollte bei LIN
> grundsätzlich Bytes liefern. Das SYNC-Byte sollte dann als 0x55 daher
> kommen. Macht es Sinn das mit UART zu tun? Ein "Trick" für das senden
> eines BREAKs ist wohl die Baudrate zu halbieren, aber das empfangen
> eines 13 Bit langen BREAK mit 1 Bit rezessiv in Folge ist wohl ein
> Problem für UARTs.

LIN ist im Prinzip UART mit ein paar Spezialitäten. Laut Datenblatt 
müsste der S3 Breaks senden können. Beim Empfangen eines Breaks wirst Du 
wohl ein Nullbyte plus einen Framing Error bekommen.

> In meinem konkreten Fall habe ich mal einen Logic-Analyzer an den Bus
> gehangen und bin nach den gemessenen Werten der Meinung das die Baudrate
> 9.600 sein müsste. Wenn ich vom LA den ASYNC-Serial Analyzer auf 9600
> 8N1 einstelle und den Pegel auf Negativ (weil ja im Ruhezustand HIGH),
> erhalte ich auch ein vermeintlich brauchbares Datenbild.

9600 und 19200 sind gängige Bitraten.

fchk

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.