Forum: Fahrzeugelektronik LINBUS zu PC über ARDUINO


von Sebastian R. (sebastian_r963)



Lesenswert?

Hallo liebe mikrocontroller.net Community,

ich suche jemanden der mir helfen kann Signale aus dem LIN BUS zu lesen, 
die ich dann am PC
als „Joystick Button“ zuweisen kann.

Es geht dabei um folgendes. Ich habe hier einen Fahrhebel (Joystick) von 
Fendt (Landmaschinenhersteller), mit dem man im Schlepper (Traktor) alle 
möglichen Dinge ansteuern kann. Die Datenübertragung erfolgt über den 
CAN-BUS.

Allerdings erfolgt die Datenübertragung vom Fahrhebel zu seinem 
Steuergerät über einen LIN-BUS.
Das Steuergerät für den Fahrhebel habe ich leider nicht und deshalb 
möchte ich die Signale die
Der kleine Chip über den Transceiver sendet „abfangen“. (13 Tasten)

Von der Platine zum Steuergerät werden vier Leitungen genutzt.

ROT-WEISS       GROUND

GRUEN-WEISS     LIN-BUS Signalleitung

BLAU-WEISS      V Bat (0.3-40V) in meinem Fall 5V

BRAUN-WEISS     3.3V ODER 5V <- ist mir noch unklar


Bei dem Chip handelt es sich um: MC908GZ16CFAE
https://www.alldatasheet.com/view.jsp?Searchword=MC908GZ16CFAE

Bei dem Transceiver handelt es sich um: TJA1021T
https://www.alldatasheet.com/view.jsp?Searchword=TJA1021T&sField=4

Die Grünen Kreise sind Verbindungen zum Chip die auf der Platine 
ersichtlich sind.


Nutzen möchte ich für die Anbindung vom Fahrhebel zum PC einen Arduino 
damit es auch andere das nachbauen können, sollte es mir gelingen es zum 
Laufen zu bringen vorausgesetzt.
Da ich mich im Moment in einer eine Art Sackgasse befinde, wende ich 
mich Hoffnungsvoll an euch 😊

von Frank K. (fchk)


Lesenswert?

LIN-Bus ist eine Art Eindraht-UART mit ein paar Besonderheiten. Der UART 
muss in der Lage sein, BREAK-Signale zu erzeugen und zu detektieren. 
BREAK ist eine Folge von mindestens 13 Low-Bits, was bei der normalen 
Datenübertragung niemals vorkommen kann.

Die UARTs der AVRs sind für LIN nicht wirklich geeignet. Es gibt AVRs, 
die spezielle LIN-UARTs haben, z.B. Tiny167. Idealerweise nimmst Du 
einen PIC24FJ64GB002, der hat USB-Hardware und LIN-fähige UARTs und wäre 
eine passende Wahl für ein PC-Interface.

VBAT ist in der Realität entweder 12V oder 24V, und auch die 
LIN-Bus-Leitung arbeitet mit diesem Signalpegel.

Hier ist die Spezifikation zum LIN-Bus: (gerade gegoogelt)
https://www.cs-group.de/wp-content/uploads/2016/11/LIN_Specification_Package_2.2A.pdf

Beschaltung zum TJA1021 ist auf Seite 16 des Datenblatts. Beachte, dass 
Dein Board Master ist, d.h. Du musst VBAT und den 1k Pullup plus Diode 
auf der Busleitung bereitstellen.

Das Herausfinden der Telegramme auf dem LIN-Bus ist dann wieder eine 
ganz andere Sache.

fchk

von 888 (Gast)


Lesenswert?

Bei vielen Microcontrollern kann man den UART-Pin auch als GPIO nutzen. 
Dann kann man für das Sync Break auf Output Low schalten, und danach 
wieder auf Special Function UART zurück.

Eine andere Möglichkeit besteht darin, temporär die Baudrate 
umzuschalten und  0x00 mit einer langsameren Geschwindigkeit zu senden.

von Frank K. (fchk)


Lesenswert?

Das offensichtliche Problem ist erstmal, dass sein Arduino Uno nur einen 
UART hat. Er braucht entweder Hardware-USB plus einen UART oder zwei 
UARTs plus USB-Seriell. Die Verwendung eines Software UARTs ist bei 
einem LIN-Master laut Standard nicht zulässig, weil da die 
Timinganforderungen nicht erfüllt werden. Auch muss der Master mit einem 
Quarz betrieben werden -interne RC-Oszillatoren oder keramische 
Resonatoren sind nicht zulässig.

Bei einem LIN-Slave ist das anders. Der kann bei jedem Telegramm das 
SYNC-Byte ausmessen und seine Bitrate an das Timing des Masters (das 
deswegen sehr genau sein muss) anpassen. Da die Telegramme mit 
SYNC+PID+8 Datenbytes+CRC=11 Bytes sehr kurz sind, reicht beim Slave 
auch die Stabilität eines RC-Oszillators aus.

Daher ist sein Arduino eh eine blöde Plattform für sein Vorhaben. Klar, 
mit Gewalt bekommt jenamd, der Ahnung von der Sache hat, das hin, aber 
es gibt eben bessere Lösungen. Eine davon hab ich ihm genannt. Alle 
PIC24 und PIC32 haben sehr flexible UARTs, die auch für LIN gut geeignet 
sind.

fchk

von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?

Frank K. schrieb:
> plus USB-Seriell.
Dann brauchst man auf dem PC aber noch eine Software, die die 
(virtuellen)seriell empfangen Daten in Tastendrücke umwandelt.

Sinnvoller dürfte ein µC sein der sich direkt als USB-HID ausgeben kann.
- https://de.wikipedia.org/wiki/Human_Interface_Device

von K. H. (hegy)


Lesenswert?

Ich will jetzt keine Werbung für ST machen aber einige STM8... haben 
auch LIN-Interfaces eingebaut (LINUART LIN 2.2 compliant, master/slave 
modes with automatic resynchronization) und dazu noch UART. LIN-Demo 
Code gibt es sicher auch noch, dazu interessante Application Notes.

AN3055, Getting started with STM8A LIN package (STSW-STM8A-LIN)),
https://www.st.com/resource/en/application_note/an3055-getting-started-with-stm8a-lin-package-stswstm8alin-stmicroelectronics.pdf

AN4101, LIN communication with STM8A-DISCOVERY, 
https://www.st.com/resource/en/application_note/an4101-lin-communication-with-stm8adiscovery-stmicroelectronics.pdf

von Florian (Gast)


Lesenswert?

Es gibt extra Pegelwandler für LIN.

von Sebastian R. (sebastian_r963)


Lesenswert?

Vielen Dank an der stelle schonmal für die schnellen und zahlreichen 
Antworten. Für mich sind Microcontroller noch Neuland und meine 
Erfahrung im Bereich Elektronik kommt von meiner Ausbildung zum LKW 
Mechatroniker und kleinen Hobby Projekte. Deshalb ist bei diesem Projekt 
alles „lerning by doing“ und ich gebe zu ich habe mir das einfacher 
vorgestellt als es ist.

Ein möglicher Lösungswege ist also:

-  Eine eigene Platine mit einem der oben genannten Mikrochips (LIN to 
UART to PC (HID))

@ Frank K.
Woran hast du erkennen können das es sich auf dem Board um einen LIN 
Master handelt? (Will was lernen :)

Doch die große Frage ist (Wenn die Hardware funktioniert) welches 
Protokoll wird den überhaupt gesendet, oder?  Da habe ich zwar einen 
fähigen Programmierer an meiner Seite, aber ich bin mir noch nicht 
sicher ober er mir da weiterhelfen kann.

Nochmals vielen Dank für die Unterstützung.

von Sebastian R. (sebastian_r963)


Angehängte Dateien:

Lesenswert?

Ich habe im Internet noch die CAN-BUS Adressen gefunden. Jemand hat mit 
einem Arduino + CAN Shield den BUS lesen können.

Joystick ist identisch zu meiem. Hat auch ein YT-Video hochgeladen:

https://www.youtube.com/watch?v=7RwsqP8NhuQ

von 888 (Gast)


Lesenswert?

Sebastian R. schrieb:

> @ Frank K.
> Woran hast du erkennen können das es sich auf dem Board um einen LIN
> Master handelt? (Will was lernen :)

Es ist unwahrscheinlich, dass Dein Schalter der Master ist. Der hängt an 
einem zentralen Steuergerät.

Einen Master erkennt man

a) an dem großen 1 kOhm-Widerstand zwischen LIN (Pin 6 des TJA1021) und 
KL30

b) daran, das er was sendet, wenn er mit Spannung versorgt wird. Du 
müsstest nach dem Einschalten zumindest kurze Zeit Datenpakete sehen. 
Beim LIN gibt es nur Remote Frames. Der Master sendet die Header für 
sämtliche Botschaften, und die Slaves fügen dann da, wo sie zuständig 
sind, die Nutzdatenbytes ein. Ein Slave wird niemals von sich aus 
senden, sondern immer nur eine Anfrage des Master komplettieren.

> Doch die große Frage ist (Wenn die Hardware funktioniert) welches
> Protokoll wird den überhaupt gesendet, oder?  Da habe ich zwar einen
> fähigen Programmierer an meiner Seite, aber ich bin mir noch nicht
> sicher ober er mir da weiterhelfen kann.

Du schaltest einen 100 Ohm-Widerstand in Reihe mit der LIN-Leitung, 
baust das Ding in Deinen Mähdrescher ein und klemmst Dein Oszi 
masterseitig vor dem Widerstand an. Die Bytes, die vom Schalter kommen, 
werden nicht ganz so low sein wie die der anderen Teilnehmer. So kannst 
Du rauskriegen, welche Botschaften der Schalter sendet.

von Frank K. (fchk)


Lesenswert?

Sebastian R. schrieb:

> Ein möglicher Lösungswege ist also:
>
> -  Eine eigene Platine mit einem der oben genannten Mikrochips (LIN to
> UART to PC (HID))

genauer: LIN - USB HID Interface. Für den genannten PIC24 bekommst Du 
bei Microchip einen kompletten USB-Stack und ein HID-Device Source.

> @ Frank K.
> Woran hast du erkennen können das es sich auf dem Board um einen LIN
> Master handelt? (Will was lernen :)

Dein Joystick ist ein Slave. Das ist immer so. Master ist immer ein 
Steuergerät, das dann oft auch als LIN-CAN Gateway arbeitet. Ein 
LIN-Slave ist halt viel billiger zu bauen als ein CAN-Knoten, und genau 
deswegen gibts LIN.

> Doch die große Frage ist (Wenn die Hardware funktioniert) welches
> Protokoll wird den überhaupt gesendet, oder?

Hast Du Dir das PDF, was ich Dir im ersten Post genannt habe, 
runtergeladen, gelesen und verstanden? Da wird das eigentliche 
Protokoll, d.h. der Paketaufbau mit Paket-ID, Daten und Prüfsummen ganz 
ausführlich und exakt beschrieben, und auch welche Pausen Du wann 
einhalten musst. Auch die elektrischen Daten sind ganz genau 
beschrieben. Lesen hilft.

Die Nutzdaten, die über das Protokoll gesendet und empfangen werden, 
sind spezifisch für Dein Gerät. Das wirst Du irgendwie experimentell 
ermitteln müssen, wenn Du keinen funktionierenden Aufbau hast, wo Du 
mithören kannst, was über die Leitung geht.

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.