Forum: Mikrocontroller und Digitale Elektronik CAN-Bus Gateway


von Andrej S. (Gast)


Lesenswert?

Hallo liebe Community :)

Es hat sich bei mir ein neues Projekt herauskristallisiert, was mich an 
die Grenze meines Wissens uns Könnens treibt, aber die Motivation ist 
groß!

Ich hoffe ihr könnt mir weiter helfen.

Das Vorhaben ist:

Das verbinden von 2 (bzw. 3) Bussystemen (K-CAN und K-Line in einem KFZ)
Also ein 2Adern CAN 2.0A Bus (100kbit/s) , mit einem Einfachen 9,6kbit 
1Adern  Bus.

Nun habe ich leider noch wenig Ahnung wie ich das ganze angehen soll.
Was ich mich überlegt habe, ich brauche einen Programmierbaren 
Microcontroller, welcher Busbotschaften auf der einen Seite empfängt, 
übersetzt, und auf der anderen Seite wiederausgibt.

So nun meine Frage:

Gibt es soetwas schon? Wenn ja woher bezieht man es, und wie 
programmiert man es? wie ihr seht bin ich neuling :)

Vielen Dank im Voraus!

Gruß

Andrej

von Bronco (Gast)


Lesenswert?

Hardwareseitig kann das jeder µC mit CAN-Controller und UART (für 
K-Line).

Die wichtigste Frage ist aber:
Hast Du eine Spezifikation über die Protokolle, die auf CAN und K-Line 
laufen?
Sprich: Ist Dir bekannt, welche Informationen in welcher CAN-Nachricht 
in welcher Codierung kommen?
Ohne dies kannst Du mit den CAN-Nachrichten nichts anfangen, da Du nicht 
weißt, was sie Dir sagen sollen.

von hardy (Gast)


Lesenswert?

Hi,

ja so etwas gibt es schon komplett fertig oder als Bauteil.
Du kannst einen einfachen OBD2 Adapter nehmen, der z.B. per USB an den 
PC angeschlossen wird. Dort ist meist ein PIC oder ein ELM Baustein 
verbaut, die die Umsetzung der ASCII Anfragen in das entsprechende 
Protokoll machen.
Lade dir einmal das Datenblatt des ELM327. Das ist ein Baustein, der 
alle OBD2 Bussysteme des OBD2 unterstützt und auch die entsprechenden 
Protokolle selbst ermittelt.
Diese Logik müsstest du in deinem Controller auch umsetzen, wenn du 
kompatibel sein möchtest.
Neuere Fahrzeuge nutzen CAN und da ist das Protokoll einheitlich.
Was möchtest du denn damit genau machen?

LG

von Andrej S. (andrejs)


Lesenswert?

Danke schinmal für die Infos :)

Die k-line Codierung ist eigentlich komplett bekannt, beim k-can ist man 
(ich noch nicht) gerade dabei zu loggen und zuzuordnen, gibt aber schon 
einiges :)

Ziel ist es (zuerst mal) in alle BMWs zwischen 1995 und 2004 (welche 
k-line bzw. Ibus benutzen) die kompletten navi, Audio, Systeme einbauen 
zu können der neueren BMWs , und damit halt auch die erweiterten 
infosystemeUnd dazu muss die kommunikation stimmen (lenkwinkelsensor, 
PDc Etc. )

Bronco, kannst du mir ein Beispiel geben für solch einen uc mit uart und 
can Controller?

Das mit dem elm327 find ich auch interessant, nur was mach ich mit 
meiner k-line? Die ist nicht obd2 Standard :(

von Andrej S. (andrejs)


Lesenswert?

edit:

grad beim stöbern auf

http://www.chip45.com/products/crumb128-can-5.1_avr_atmega_modul_board_at90can128_usb_rs485_can.php

das ding da gestossen, das wäre doch ideal oder irre ich da?

Ich habe ein OBD-CAN und ein OBD-K-Line Interface mit denen ich fröhlich 
beim Bus ja mitlauschen könnte (ein neuer BMW mit NAVI ist auch 
zugänglich von einem gutem freund...)

Danke für euer Feedback!

von Frank K. (fchk)


Lesenswert?

Andrej S. schrieb:
> edit:
>
> grad beim stöbern auf
>
> 
http://www.chip45.com/products/crumb128-can-5.1_avr_atmega_modul_board_at90can128_usb_rs485_can.php
>
> das ding da gestossen, das wäre doch ideal oder irre ich da?

leider nein. Beide serielle Ports des AVRs sind bereits belegt - einer 
mit der USB-Bridge, einer mit dem RS485-Transceiver. Dein K-Line 
Transceiver will auch noch eine serielle Schnittstelle haben. Du 
müsstest also das Board ändern. Da ist es besser, ein neues zu machen.

Nimm doch einfach einen PIC32MX564F128H-I/PT. Da hast Du CAN drin, da 
sind genügend UARTs drin, alle LIN-fähig (falls Du das mal brauchst), 
für USB brauchst Du keinen extra Chip, das ist auch schon drin, 64k RAM 
drin, 512k Flash, 32Bit 80 MHZ Prozessor, und kostet z.B. bei Farnell 
5,73€. Der auf dem von Dir gefundenen Board verwendete AT90CAN128, der 
nur ein 8 Bit Controller mit viel weniger Leistung ist, kostet dort 
11,60 €. Da wärst Du doch schön doof, wenn Du für einen Bruchteil der 
Leistungsfähigkeit die doppelte Kohle hinlegst, oder?

fchk

von Ralph (Gast)


Lesenswert?

Andrej S. schrieb:
> Es hat sich bei mir ein neues Projekt herauskristallisiert, was mich an
> die Grenze meines Wissens uns Könnens treibt, aber die Motivation ist
> groß!

Eher weit darüber hinaus.

Andrej S. schrieb:
> Danke schinmal für die Infos :)
>
> Die k-line Codierung ist eigentlich komplett bekannt, beim k-can ist man
> (ich noch nicht) gerade dabei zu loggen und zuzuordnen, gibt aber schon
> einiges :)
>
> Ziel ist es (zuerst mal) in alle BMWs zwischen 1995 und 2004 (welche
> k-line bzw. Ibus benutzen) die kompletten navi, Audio, Systeme einbauen
> zu können der neueren BMWs , und damit halt auch die erweiterten
> infosystemeUnd dazu muss die kommunikation stimmen (lenkwinkelsensor,
> PDc Etc. )
>
> Bronco, kannst du mir ein Beispiel geben für solch einen uc mit uart und
> can Controller?
>
> Das mit dem elm327 find ich auch interessant, nur was mach ich mit
> meiner k-line? Die ist nicht obd2 Standard :(

Vergiß es, Dazu brauchst du sehr viele BMW interne Informationen , die 
dir niemand geben wird. Jedenfalls keiner der noch länger bei BMW 
arbeiten will.


Was du brauchst ist ein Gateway zwischen der alten und der neueren BMW 
Systemarchitektur.
Also such dir mal die Entwicklungsdokumentation zu den beiden Versionen 
der Systemarchitektur.
Wenn du diese Daten zusammen hast, kannst du mal anfangen.
( Das ist weit mehr als nur die Can Signalbeschreibung )

von Andrej S. (andrejs)


Lesenswert?

Frank K. schrieb:

> leider nein. Beide serielle Ports des AVRs sind bereits belegt - einer
> mit der USB-Bridge, einer mit dem RS485-Transceiver. Dein K-Line
> Transceiver will auch noch eine serielle Schnittstelle haben. Du
> müsstest also das Board ändern. Da ist es besser, ein neues zu machen.

Alles klar danke schonmal :)
Also wenn ich den RS485 transreceiver auf dem Board tauschen würde 
(gegen was für k-line?), wäre es möglich?
Ich wollte kein neues Board entwickeln.

Zum hintergrund: bin nun im 5. Semester an der TU Darmstadt, in Elektro 
und Informationstechnik, und es ist ganz viele tolle theorie die ich 
behersche, ich wollte aber mal was "machen"

> Nimm doch einfach einen PIC32MX564F128H-I/PT. Da hast Du CAN drin, da
> sind genügend UARTs drin, alle LIN-fähig (falls Du das mal brauchst),
> für USB brauchst Du keinen extra Chip, das ist auch schon drin, 64k RAM
> drin, 512k Flash, 32Bit 80 MHZ Prozessor, und kostet z.B. bei Farnell
> 5,73€. Der auf dem von Dir gefundenen Board verwendete AT90CAN128, der
> nur ein 8 Bit Controller mit viel weniger Leistung ist, kostet dort
> 11,60 €. Da wärst Du doch schön doof, wenn Du für einen Bruchteil der
> Leistungsfähigkeit die doppelte Kohle hinlegst, oder?


sehr cool, gibt es für dem (oder einen ähnlichen) schon ein "fertiges" 
Board?

Ralph schrieb:

> Eher weit darüber hinaus.

Mag sein, ich lerne jedoch schnell, und an Zeit mangelt es mir nicht...

> Was du brauchst ist ein Gateway zwischen der alten und der neueren BMW
> Systemarchitektur.

das ist mir bewusst, ich möchte aber nicht die vollständige 
kommunikation herstellen, ich benötige nur einen Bruchteil. Ich habe 
nicht vor ein Motor von 2010 in eine Karrosserie von 1998 einzubauen, 
sondern lediglich das Navi- und Infosystem. d.h. Ich übernehme z.b. 
Monitor, Navi-computer, iDrive Radio aus einem neuerem BMW, welche alle 
untereinander über ihren K-Can kommunizieren. Diese Systeme brauchen 
dann bestimmte Infos, bsp:

Navi: Blinker gesetzt?, Geschwindigkeit, Licht an (nachtmodus des 
monitors)
Bordcomputer: Öltemp, Wassertemp, Serviceintervalle, PDC sensoren 
abstände, etc.

Ich habe hier kein Projekt mit Deadline x, sondern wollte mich in das 
Bussystem einarbeiten, und mal was produktives tun, was sich im 
überschaubaren rahmen halten kann, wo man aber auch erweitern kann, und 
ich denke das ist machbar. (so wie die meisten projekte die ich hatte, 
unterschätze ich es natürlich, aber das ist ja mein problem ;))

von Lothar (Gast)


Lesenswert?

Für die Aufgabe empfehle ich dieses günstige Board mit LPC11C24:

- CAN 1MBit (CAN-Treiber im ROM) für K-CAN
- GPIO 50MHz (oder UART) für K-Line
- Demo-Software ist dabei
- falls später doch mal eine eigene Platine notwendig wird, auf dem 
LPC11C24 ist der CAN-Transceiver mit drauf, ist also eine 1-Chip-Lösung

https://www.olimex.com/Products/ARM/NXP/LPC-P11C24

von Frank K. (fchk)


Lesenswert?

Andrej S. schrieb:
> Frank K. schrieb:
>
>> leider nein. Beide serielle Ports des AVRs sind bereits belegt - einer
>> mit der USB-Bridge, einer mit dem RS485-Transceiver. Dein K-Line
>> Transceiver will auch noch eine serielle Schnittstelle haben. Du
>> müsstest also das Board ändern. Da ist es besser, ein neues zu machen.
>
> Alles klar danke schonmal :)
> Also wenn ich den RS485 transreceiver auf dem Board tauschen würde
> (gegen was für k-line?), wäre es möglich?
> Ich wollte kein neues Board entwickeln.

Na ja, "neues Board" heißt: Controllerchip mit Taktgenerator, 
CAN-Transceiver, K-Line Transceiver und Spannungsversorgung mit 
Überspannungsschutz, d.h.in einem 12V Bordnetz hast Du bei Anlassen 
Spannungen bis zu 30-40V, da müssen also Schutzschaltungen vor alle Ein- 
und Ausgänge und in die Spannungsversorgung rein, sonst ist das ein 
Einweg-Board.

Bei den üblichen Demoboards wie den von Dir vorgeschlagenen hast Du nur 
den Prozessor mit Takterzeugung und vielleicht noch den CAN-Transceiver 
drauf, der ganze Rest, insbesondere die ganze Schutzbeschaltung in der 
Stromversorgung und dem CAN fehlt. Und der CAN-Transceiver ist 
vielleicht einer, der nicht ganze so spannungsfest ist. Du musst also 
trotz Verwendung eines Demoboards noch einiges selber machen, und viel 
fehlt dann zum eigenen Board nicht mehr. Und wenn Deine Schaltung den 
Labortisch verlässt, wirst Du es zu schätzen wissen, wenn es kein 
fliegender Aufbau ist, wo mal ein Draht abgeht oder Störungen in die 
Verdrahtung einkoppeln.

> Zum hintergrund: bin nun im 5. Semester an der TU Darmstadt, in Elektro
> und Informationstechnik, und es ist ganz viele tolle theorie die ich
> behersche, ich wollte aber mal was "machen"

Fein. Dann mal zu.

>> Nimm doch einfach einen PIC32MX564F128H-I/PT. Da hast Du CAN drin, da
>> sind genügend UARTs drin, alle LIN-fähig (falls Du das mal brauchst),
>> für USB brauchst Du keinen extra Chip, das ist auch schon drin, 64k RAM
>> drin, 512k Flash, 32Bit 80 MHZ Prozessor, und kostet z.B. bei Farnell
>> 5,73€. Der auf dem von Dir gefundenen Board verwendete AT90CAN128, der
>> nur ein 8 Bit Controller mit viel weniger Leistung ist, kostet dort
>> 11,60 €. Da wärst Du doch schön doof, wenn Du für einen Bruchteil der
>> Leistungsfähigkeit die doppelte Kohle hinlegst, oder?
>
>
> sehr cool, gibt es für dem (oder einen ähnlichen) schon ein "fertiges"
> Board?

Das ist ein größerer Prozessor aus der Serie. Wie gesagt, die ganze 
Außenbeschaltung, musst Du ohnehin selber machen, und sie muss 
automotive-fest sein, d.h. Du musst an jeden Pin, der rein oder raus 
geht, so 30-40V plus oder minus anlegen können, und das Board muss es 
überleben, und zwar nicht nur einmal.

https://www.olimex.com/Products/Duino/PIC32/PIC32-T795/

Programmieren und debuggen tust Du hiermit:
https://www.olimex.com/Products/PIC/Programmers/PIC-KIT3/

Es gibt auch diverse ARM-basierte Controller als Alternative.

Wenn Du gerne DIL haben willst, dann kannst Du einen dsPIC33FJ128GP802 
nehmen, das ist ein 16-Bitter mit 40MHZ Takt, 16k RAM und 128k Flash, 
CAN, 2*UART im DIL28-Gehäuse. Ein 8 MHz Quarz mit den obligatorischen 
18-27pF an jedem Quarzpin dran, an jedem VCC-GND-Paar 100n, 10u 
keramisch 16V an VCAP gegen GND, MCLR über 10k gegen VCC, und dann läuft 
das Teil.

Als CAN-Transceiver nimmst Du am Besten einen MAX13054, der kann bis 
+-80V auf CAN_H/CAN_L ab. Die übliche Schutzbeschaltung wie 
stromkompensierte Drossel und TVS-Dioden bzw MOVs brauchst Du natürlich 
trotzdem noch.

Als K-Line Transceiver wäre da z.B. der MC33660 oder der TLE6258-2G zu 
nennen. In wieweit man auch normale LIN-Transceiver für K-Line aka 
ISO9141 verwenden kann, die nicht ausdrücklich dafür vorgesehen sind, 
weiß ich nicht - die ISO-Norm dafür habe ich nicht da.

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.