Forum: Fahrzeugelektronik Raspberry Pi als LIN Simulator


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Norman (nole79)


Angehängte Dateien:

Lesenswert?

Hallo Community,

ich hänge derzeit in einem Kleinprojekt und bin mir nicht ganz sicher 
wie ich weiterverfahren soll. Folgendes hab ich vor:

Ich möchte eine RaspberryPi 3B+ (welche ich als Not-Reserve für meinen 
3D Drucker noch rumliegne habe, nebenbei als LIN- Simulator nutzen, um 
Lin gesteuerte RGB Leuchten zu Funktionstestzwecken anzusteuern, welche 
später als Zusatz-Ambientebeleuchtungen in meinem Fahrzeug zum Einsatz 
kommen sollen. Da, wie ich feststellen musste, nicht jede LIN RGB 
Leuchte zu funktionieren scheint (Hersteller oder Komponentenabhängig?).

Grundlegendes zur meiner Erfahrung:
Elektrosachverstand ist durch meine damalige Ausbildung zwar vorhanden, 
aber nicht wirklich viel in der Elektronik bzw. Microelektronik selbst, 
was Bauteile angeht. Aber man lernt ja gerne dazu. ;)

Mit der Raspberry habe ich Grunderfahrungen sammeln können (Einrichten 
und Anbinden an einen 3D Drucker mittels Octoprint und dessen 
Steuerung), sowie ein RGB Ansteuerungstest wurde auch schon erfolgreich 
beendet (python gesteuert).

LIN Bus Kenntnisse sind vorhanden (viel gelesen) und ich habe dadurch im 
Fahrzeug nun auch meine normalen Beleuchtung auf LIN RGB gesteuerte 
umgebaut sowie auch aufgetretene Fehler beheben können. Dies war die 
Grundlage, für die nun kommenden Erweiterungen.

Hierbei suche ich nun eine, wenn möglich, "simple" Lösung um neue 
Leuchten vorab übers Pi zu testen und nicht immer zum Auto rennen zu 
müssen.

Ich habe mich nun schon etwas mit den Convertern und Transceivern 
befasst. Testweise einen TTL to LIN Bus Converter "LINTTL3" von 
eletechsup geholt und versuchsweise damit beschäftigt. Aber glaube hier 
ohne kompetente Hilfe bei der Herangehensweise nicht allein 
weiterzukommen.

Im Netz gibt es zwar auch Unmengen an Videos zum Thema LinBus, aber 
nichts verwertbares um speziell zu meinem Thema eine Lösung zu finden, 
da immer mehr Fragen auftauchen u.a.

1. Sind die Bauteile für diese Art der Nutzung ausreichend oder wird 
noch etwas benötigt?
2. Ist das Lin-Signal immer gleich gepulst bei LIN RGB gesteuerten 
Lichtmodulen oder weicht dies Programmier oder Herstellertechnich ab?
3. Bezogen auf Frage 2, muss ich das LIN Signal aus dem Fahrzeug erst 
irgendwie auslesen um die Bits in die Raspberry zu Übernehmen? Oder 
gibts da LIN Libarys wo diese hinterlegt sind?

Ich hab euch mal das LIN-LED Modul sowie Bilder vom LINTTL3 beigefügt, 
vieliecht hilft dies bei einer Bewertung.

Fragen werde ich sehr gerne bestmöglichst beantworten. Danke Vorab!

Viele Grüße Norman

: Bearbeitet durch User
von Rainer W. (rawi)


Lesenswert?

Norman schrieb:
> Da, wie ich feststellen musste, nicht jede LIN RGB Leuchte zu
> funktionieren scheint (Hersteller oder Komponentenabhängig?).

LIN Adressen zum Ansprechen der E521.31 hast du passend zum LDF gewählt?

von Frank K. (fchk)


Lesenswert?

LIN ist im Prinzip ein UART mit einer Bitrate von max 20000 bps (üblich: 
9600 oder 19200) und ein paar Spezialitäten.

Ich gehe davon aus, dass Du einen LIN Master bauen willst. Der muss die 
Busspannung (normal 12V oder 24V) liefern und den 1k Pullup enthalten.

Jedes Paket wird mit einem BREAK-Signal eingeleitet. Das ist ein 
Low-Signal von mindestens 13 Bit-Zeiten, was bei einer normalen 
UART-Übertragung nicht vorkommen kann, da Du ja nur ein Startbit, max. 9 
Datenbits und ggf ein Paritätsbit haben kannst. Das Stopbit ist ja immer 
1, also hast Du maximal 11 aufeinanderfolgende 0-Bits. 13 0-Bits 
hintereinander sind also normalerweise ausgeschlossen.

Dein Pi muss dieses BREAK erzeugen können. Dafür gibts drei 
Möglichkeiten:
1. Der UART hat eine entsprechende Funktionalität eingebaut. 
Unwahrscheinlich. Der Mini-Uart hat das garantiert nicht, und beim 
großen glaube ich das auch nicht.
2. Du schaltest auf die halbe Bitrate um und sendest dann ein Byte mit 
dem Wert 192. Das sind dann 6 0-Datenbits und ein 0-Startbit, also 7 
0-Bits bei der halben Bitrate und 14 0-Bits bei der nominalen Bitrate. 
Passt also.
3. Du nimmst ein UND-Gatter (z.B. 74LVC1G08) und machst dabei eine 
UND-Verknüpfung des TX-Pins und eines beliebigen anderen GPIOs. Wenn Du 
ein BREAK senden willst, setzt Du den GPIO auf 0 und sendest zwei 
beliebige Bytes. Wenn Du raus sind, setzt Du den Pin wieder auf 1 und 
kannst dann normale Daten senden.

Im Prinzip war es das schon. Der Rest ist nur noch herauszufinden, 
welche ID mit welchen Daten Du senden musst und wie die Parität bei der 
PID und die Prüfsummenberechnung (klassisch gemäß LIN 1.3 oder erweitert 
gemäß LIn 2.x) funktioniert. Das ist aber im Standard ganz klar 
beschrieben.

fchk

: Bearbeitet durch User
von Sebastian W. (wangnick)


Lesenswert?

Frank K. schrieb:
> Dein Pi muss dieses BREAK erzeugen können.

https://stackoverflow.com/a/57768217

LG, Sebastian

von Norman (nole79)


Lesenswert?

Rainer W. schrieb:

> LIN Adressen zum Ansprechen der E521.31 hast du passend zum LDF gewählt?

Werden die vom E521.31 nicht per Autoadressing vergeben? Die Teile hab 
ich ja auch schon funktionierend im Fahrzeug verbaut. Meine Ausage bezog 
sich auf einzelne Testkäufe anderer Hersteller, wo es nicht 
funktionierte (ev. durch andere Komponenten auf den Platinen)

Frank K. schrieb:
> Ich gehe davon aus, dass Du einen LIN Master bauen willst. Der muss die
> Busspannung (normal 12V oder 24V) liefern und den 1k Pullup enthalten.

Korrekt, LIN Master einfach um die Testkäufe anzustöpseln und auf 
Funktion zu prüfen. (kommt immer wieder vor, dass einnige schon defekt 
geliefert werden.

Busspannung LIN sind im Mittelwert ungefähr 8,x V (Multimeterermittlung 
bevor es auf ERR geht)

Frank K. schrieb:
> Dein Pi muss dieses BREAK erzeugen können. Dafür gibts drei
> Möglichkeiten:

Kommt es mir nur so vor oder ist Methode 3 am einfachsten zu 
realisieren? Besonders für nen Anfänger?

Gibt es nicht schon irgend jemanden der eine simple Ansteuerung 
erfolgreich umgesetzt hat? Hab einige Einträge hier und in anderen Foren 
gefunden, die ähnliche Themen betreffen, scheinbar wird aber fast nur 
geschrieben wenn ein Problem besteht und nicht ob und wie es behoben 
wurde. :(

Frank K. schrieb:
> Der Rest ist nur noch herauszufinden,
> welche ID mit welchen Daten Du senden musst und wie die Parität bei der
> PID und die Prüfsummenberechnung (klassisch gemäß LIN 1.3 oder erweitert
> gemäß LIn 2.x) funktioniert. Das ist aber im Standard ganz klar
> beschrieben.

Wie bekomme ich das raus? Hersteller anschreiben? LIN Analyzer bauen 
oder kaufen? Gibts dazu vieleicht Dokus die ich nicht kenne/finde?

Oder mal ganz frei in die Community gefragt, wie würdet ihr sowas 
umsetzen, ev. auf anderen Wegen? Material Budget für anderes notwendiges 
Zubehör bis 100 Euro wärs mir Wert, da auch noch Nachfolgeprojekte 
geplant sind. Wichtig wäre mir, dass ich verstehe was gemeint ist (auch 
wenns durch Eigenrecherche geschiet), daher bauche ich dazu effektive 
Informationen. ;)

LG Norman

: Bearbeitet durch User
von Frank K. (fchk)


Lesenswert?

Norman schrieb:

> Frank K. schrieb:
>> Ich gehe davon aus, dass Du einen LIN Master bauen willst. Der muss die
>> Busspannung (normal 12V oder 24V) liefern und den 1k Pullup enthalten.
>
> Korrekt, LIN Master einfach um die Testkäufe anzustöpseln und auf
> Funktion zu prüfen. (kommt immer wieder vor, dass einnige schon defekt
> geliefert werden.
>
> Busspannung LIN sind im Mittelwert ungefähr 8,x V (Multimeterermittlung
> bevor es auf ERR geht)

Halt. LIN hat drei Signale:
1. VB Busspannung 12/24V
2. LIN Datenleitung 0V low VB high
3. GND

Zum Messen der Datenleitung ist ein Multimeter ungeeignet. Ein 
Oszilloskop ist dafür passender.

> Frank K. schrieb:
>> Dein Pi muss dieses BREAK erzeugen können. Dafür gibts drei
>> Möglichkeiten:
>
> Kommt es mir nur so vor oder ist Methode 3 am einfachsten zu
> realisieren? Besonders für nen Anfänger?

ja. Schon gemacht.

> Frank K. schrieb:
>> Der Rest ist nur noch herauszufinden,
>> welche ID mit welchen Daten Du senden musst und wie die Parität bei der
>> PID und die Prüfsummenberechnung (klassisch gemäß LIN 1.3 oder erweitert
>> gemäß LIn 2.x) funktioniert. Das ist aber im Standard ganz klar
>> beschrieben.
>
> Wie bekomme ich das raus? Hersteller anschreiben? LIN Analyzer bauen
> oder kaufen? Gibts dazu vieleicht Dokus die ich nicht kenne/finde?
>
> Oder mal ganz frei in die Community gefragt, wie würdet ihr sowas
> umsetzen, ev. auf anderen Wegen? Material Budget für anderes notwendiges
> Zubehör bis 100 Euro wärs mir Wert, da auch noch Nachfolgeprojekte
> geplant sind. Wichtig wäre mir, dass ich verstehe was gemeint ist (auch
> wenns durch Eigenrecherche geschiet), daher bauche ich dazu effektive
> Informationen. ;)

Ich habe für meine Entwicklungen (Arbeit, kein Hobby) das hier gekauft:
https://www.peak-system.com/PLIN-USB.485.0.html

Der kann Master, Slave oder Monitor (passiv) sein. VB musst Du extern 
bereitstellen. Damit hatte ich eine Referenzimplementierung, von der ich 
sicher war, dass sie funktioniert.

Dann entweder Herstellerdoku besorgen oder reverse engineering 
betreiben. Was bei mir nicht notwendig war, weil Master (STM32F7) und 
Slaves (PIC24FV64KA304) aus meiner Feder stammten.

Den offiziellen LIN-Standard hast Du gelesen?

fchk

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Frank K. schrieb:

> Dein Pi muss dieses BREAK erzeugen können. Dafür gibts drei
> Möglichkeiten:
[...]

Es gibt noch eine vierte und das ist eigentlich die "natürliche":

Man erinnert sich daran, dass man unter Linux arbeitet und benutzt 
einfach die Linux-Gerätetreiber. Diese kümmern sich dann darum, das 
bestmöglich mit der konkreten Hardware umzusetzen. So wie die Erschaffer 
des OS es gewollt haben.

Siehe:

https://superuser.com/questions/786545/how-to-send-a-break-on-a-serial-port-from-command-line-in-raspbian-linux

Interessant in diesem Zshg. sind die drei dort gezeigten Codebeispiele.

von Sebastian W. (wangnick)


Lesenswert?

Ob S. schrieb:
> Interessant in diesem Zshg. sind die drei dort gezeigten Codebeispiele.

tcsendbreak hat nur Dezisekunden Auflösung, nützt dem TO also genau gar 
nicht.

LG, Sebastian

von Norman (nole79)


Lesenswert?

Frank K. schrieb:
> Halt. LIN hat drei Signale:
> 1. VB Busspannung 12/24V
> 2. LIN Datenleitung 0V low VB high
> 3. GND

Ja das ist mir bekannt, ich dachte unter Busspannung die Spannung zu 
verstehen, die über den LIN Bus kommt und man das andere eher nur als 
Versorgungsspannung der Platine bezeichnet.

Multimetermessung ist ungenau und eher nicht zu empfehlen, war aber ne 
reine Mittelwertsermittlung um zu testen was und ob da was kommt. Oszi 
hab ich leider keinen.

Frank K. schrieb:
> Ich habe für meine Entwicklungen (Arbeit, kein Hobby) das hier gekauft:
> https://www.peak-system.com/PLIN-USB.485.0.html

Das Teil habe ich auch schon gesehn aber wollte dann doch erstmal 
schauen obs irgendwie günstiger geht.

Frank K. schrieb:
> Den offiziellen LIN-Standard hast Du gelesen?

Nein, hab erst jetzt durch euch gemerkt, dass des eventuell relevant 
wäre oder benötigt wird. Hast Du dafür Infos oder einen Link?

Gruß Norman

: Bearbeitet durch User
von Frank K. (fchk)


Lesenswert?

Norman schrieb:

> Frank K. schrieb:
>> Den offiziellen LIN-Standard hast Du gelesen?
>
> Nein, hab erst jetzt durch euch gemerkt, dass des eventuell relevant
> wäre oder benötigt wird. Hast Du dafür Infos oder einen Link?

Ich hab mal gegoogelt:
https://lniv.fe.uni-lj.si/courses/ndes/LIN_Spec_1_3.pdf
https://www.cs-group.de/wp-content/uploads/2016/11/LIN_Specification_Package_2.2A.pdf

Diese beiden Spacs sind die wesentlichen. Zwischen 1.3 und 2.x haben 
sich ein paar Dinge geändert. Du musst sehen, welches Device welcher 
Spec folgt. Besser gleich beide runterladen.

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.