Forum: Fahrzeugelektronik Zündungsplus mit Can-Bus simulieren


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 Roland (Gast)


Bewertung
lesenswert
nicht lesenswert
Grüß euch!

Achtung, ich versuche hier sehr genau zu erklären was ich vor habe. Wall 
of Text.

Aktuell arbeite ich an einem Projekt und brauche dafür wie im Titel 
genannt ein Zündungsplus für jedes Auto das auch einen Can-Bus hat (Über 
OBD2) Schnittstelle. Ich habe versucht hier im Forum danach zu suchen, 
es gibt ein paar ältere Themen die aber nicht genau ins Detail einer 
möglichen Schaltung dafür gehen.

Ich habe mir schon mal einen Adapter 
(Ebay-Artikel Nr. 293451568487) 
besorgt der genau das macht, was ich brauche. Allerdings möchte ich ihn 
gerne genau verstehen und eventuell selbst nachbauen.

Der Adapter braucht nicht angelernt werden und funktioniert sofort. Er 
schaltet dann einen 12V Signal, sobald Can-Bus Aktivität im Auto ist.
Leider kann ich die Bauteile nicht inspizieren, da der Adapter 
eingegossen ist.

Folgendes weiß ich bereits über Can-Bus und theoretisch auch was ich 
messen müsste:
* Can-Bus Spannung liegt im Sleep Modus so bei 1-2V auf Can-High und 
Can-Low. Je nach Auto etwas unterschiedlich. Gemessen bei ein paar 
verschiedenen Autos.
* Can-Bus Spannung im aktiven Modus liegt auf CanH und CanL bei 2,5V
* Sobald Can-Bus Daten sendet, ist auf CanH 3,75V und auf CanL 1,25V - 
Was ein Spannsungsdifferenz von 2,5V ausmacht -> Hier ist glaube ich der 
Punkt wo ich ansetzen müsste.
* Die Signale sind digital, also Rechtecksignale in hoher Frequenz, je 
nach BaudRate des Bus Systems bei bis zu 1Mhz.

Was ich gerne erreichen würde ist folgendes, ohne das ich dabei die Can 
Signale beeinflusse oder störe:
* So wenig Stromverbrauch wie möglich - Es sollte immer im Auto 
verbleiben
* Ein 12V Ausgang nur dann, wenn es Can-Bus Aktivität gibt - Also der 
Can-Bus Daten sendet -> Die 2,5V Spannungsdifferenz zwischen CanH und 
CanL
* Dabei ist mir klar, das jedes Auto zu einem anderen Zeitpunkt in den 
Sleep Modus geht, dass ist mir egal wie lange das nachläuft.
* Es sollte etwas gepuffert sein, um ein flackern auf dem 12V Ausgang zu 
verhindern. Also einen Nachlauf von ca. 1 Minute nachdem die letzte 
Can-Bus Aktivität gemessen wurde
* Gesamtstrommenge die ich dann über diese geschaltenen 12V schicken 
würde sind max. 1A für kurze Zeit, eher 200-300mA auf Dauer.
* Es sollte Universell für alle Fahrzeuge mit High-Speed Can-Bus sein, 
welcher die genannten Spannungen hat. Soweit ich weiß sind das eh schon 
alle PKWs ab 2004 bzw. 2001

Was ich schon geschafft habe ist, mittels einem kleinen Esp8266 die 
Spannung auf CanL zu messen und dann ab > 2V ein Relais zu schalten. 
Hier habe ich auch super unter Kontrolle wie lange das Relais noch aktiv 
sein soll wenn auch kein Can-Bus Signal mehr daher kommt. Problem: Diese 
Schaltung ist ein Overkill und verbraucht 40mA, was viel zu viel ist. Es 
sollte wenige mA bzw unter 1mA sein wenn möglich.

Ab hier stehe ich jetzt an. Ich habe leider zu wenig Ahnung von 
elektronischen Bauteilen und weiß nicht genau wie ich die Schaltung 
dafür angehen könnte.
Ich habe über ein paar Dinge nachgedacht und nachgelesen, kann mir 
daraus aber nichts zusammendichten. Ich erläutere hier was mein (naiven) 
Gedanken dazu sind, vielleicht stimmt ja das eine oder andere.
Von einem Optokoppler habe ich gelesen um die Signale galvanisch zu 
trennen, um den Can-Bus grundsätzlich mal nicht zu stören.
Ein Komperator sollte zum messen von den Spannungsdifferenzen am Bus 
helfen.
Mit einem Transistor kann ich wahrscheinlich die 12V Dauerplus dann 
aufgrund des Komperator Ausgangs schalten.
Mit einem Kondensator kann ich mir die Signale dann "buffern", um einen 
Nachlauf zu bewerkstelligen.

Es wäre sehr cool, wenn mir da wer weiterhelfen kann, eventuell auch mit 
ein paar Schaltplanskizzen und/oder spezifischen Bauteilen (und Links 
dazu)

Danke für eure Geduld.

: Verschoben durch Moderator
von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
lesenswert
nicht lesenswert
Roland schrieb:
> Von einem Optokoppler habe ich gelesen
Man liest so viel...
> um die Signale galvanisch zu trennen,
Der CAN-Bus ist aber nicht galvanisch vom Fahrzeug getrennt. Und du 
willst ja deine Schaltung aus dem Fahrzeug versorgen und bei der Ausgabe 
wieder in das Fahrzeugpotential eingreifen. Deshalb kannst du auch mit 
einem OK keine galvanische Trennung erzeugen.
> um den Can-Bus grundsätzlich mal nicht zu stören.
Natürlich braucht eine OK-LED zum leuchten eine Leistung, die irgendwo 
herkommen muss. Das geht nicht "rückwirkungsfrei".

> Problem: Diese Schaltung ist ein Overkill und verbraucht 40mA, was viel
> zu viel ist. Es sollte wenige mA bzw unter 1mA sein wenn möglich.
Nimm einen Tiny85 und lass den mit dem internen 128kHz Oszillator 
laufen. Dann ist der Stromverbrauch irgendwo im zweistelligen 
µA-Bereich.

Ich würde hier mit einem Komparator (oder im einfachsten Fall einem 
Transistor) überwachen, ob was los ist auf dem Bus, und dann damit einen 
Interrupteingang des µC triggern, der dann seine Taätigkeit aufnimmt.

> Komperator
In diesem Wort kommt eigentlich kein -e- vor...

> Wall of Text.
Mal doch mal einen Schaltplan oder eine Skizze von dem Modul und was wie 
von Plus nach Minus drin hängt und geschaltet werden soll.

von Roland E. (brainfoolong)


Angehängte Dateien:

Bewertung
lesenswert
nicht lesenswert
Danke für die schnelle Antwort.

Das Stichwort "Tiny85" hat mir jetzt mal wirklich weitergeholfen. Diesen 
µC hatte ich noch gar nicht auf dem Schirm. Ich bin eher auf der 
Software Schiene und kann damit wohl besser arbeiten. Der Stromverbrauch 
sieht für mich jetzt wirklich brauchbar aus. Ich werde das mal weiter 
verfolgen.
Eventuell kann ich es auch ganz ohne weitere Bauteile mit ADC Eingang am 
Tiny messen, wie ich es schon mit dem Esp8266 gemacht habe.

Danke auch zum aufklären des OK, da habe ich mich dann falsch 
informiert.

Im Anhang eine rudimentäre Skizze vom Aufbau

von CAN (Gast)


Bewertung
lesenswert
nicht lesenswert
Ich würde einen weckfähigen CAN-Transceiver verwenden, z.B. den TJA1043.

Der macht die Pegelwandlung und du kannst am Rx-Pin auf Daten lauschen. 
Zusätzlich hat er eine Sleep/Wakeup-Funktion, mit der du deine Schlatung 
schlafen legen kannst bis der Transceiver wieder CAN-Aktivität 
feststellt und die Schaltung aufweckt. Im Datasheet vom TJA1043 ist dazu 
sogar eine Beispielschaltung sskizziert.
Im Sleepmode benötigt deine Schaltung dann nur paar µA.

Ausserrdem kommt der CAN-Transceiver mit den zum Teil starken 
Leitungsstörungen im Fahrzeug zurecht, was man von den µC bzw. 
ADS/Komparator-Eingängen nicht sagen kann.
Und er stört definitiv nicht den CAN-Bus, solange er nicht entsprechend 
angesteuert wird.

Weckfähige wie der TJA1043 benötigen allerdings eine 
Ansteuerung/Konfiguration über IO-Pins und damit auch SW.
"Dumme" wie der TJA1041 können dagegen auch ohne Ansteurung/SW verwendet 
werden, dafür hat man dann keine Wakeuperkennung mehr.

von Roland E. (brainfoolong)


Bewertung
lesenswert
nicht lesenswert
Danke für den Tipp mit dem TJA1043/TJA1041 Transceiver, auch diese 
Lösung klingt interessant. Werde ich auch weiter verfolgen.

von SEPP (Gast)


Angehängte Dateien:

Bewertung
lesenswert
nicht lesenswert
Könnte die Detektion so wie im Anhang funktionieren?
Wenn die Differenz zwischen den beiden ADCs zu gross ist, wird etwas 
übertragen.
Wenn nicht, wird nichts übertragen.

Geht das (theoretisch) so?

von Roland E. (brainfoolong)


Bewertung
lesenswert
nicht lesenswert
SEPP schrieb:
> Geht das (theoretisch) so?

Ich denke ja, ich habe es jedenfalls mit einem ESP8266 schon mal so 
gemacht. Allerdings nur auf CanH mit Check auf >2,5V ohne 10k 
Widerstand. Es genügt ja im Prinzip eine Leitung zu checken, da bei Bus 
Signalen eh beide gleichzeitig Low/High sind, denke ich...

Bei mir hat es bei 2 Autos und im "Labor" funktioniert, was aber nicht 
bedeutet, dass es vernünftig ist es so zu machen.

Mit einem Tiny85 werde ich das jetzt genau so nochmal probieren und 
schauen in wie weit ich Stromverbrauch reduzieren kann. Dann noch 
schauen wie Fehlertolerant das System ist. Kurzschluss (Durch Fehler im 
Auto) zu G oder 12V zu CanL/CanH ist im Auto ja technisch möglich und 
zerstört normalerweise auch keine Can-Bus Teilnehmer.

: Bearbeitet durch User
von neubi (Gast)


Bewertung
lesenswert
nicht lesenswert
MCP2561FD und die standby-funktion benutzen

von Cristian G. (Gast)


Bewertung
lesenswert
nicht lesenswert
Normallerweise hat jeder KL30 CAN Transceiver einen sogenannten 
INHIBIT-Ausgang, das ist ein Highside Schalter, der Plus (die KL30) 
durchschaltet.
Jetzt hängst du einen solchen Transceiver an einen kleinen 
Microcontroller und konfigurierst ihn so, dass er Listen Only Mode läuft 
und wenn z.B. 30s nichts mehr gesendet, dass er dann in den Sleep 
wechselt.
Startet jetzt die CAN-Kommunikation, wacht der Transceiver aus, schaltet 
den INHIBIT, damit lässt sich auch der Microcontroller wecken indem er 
die Spannung für den Spannungsregler bzw. dessen Wake-Input schaltet.

Als passenden CAN Transceiver wären z.B. NXP TJA1041 zu nennen und die 
App-Note AN00094. Das steht eigentlich alles drin.

von Cristian G. (Gast)


Bewertung
lesenswert
nicht lesenswert
Nachtrag: Diese Methode hat den Vorteil, dass du keine Ahnung von der 
Verwendeten Kommunikationsmatrix haben musst. Sie funktioniert einfach.

von Andreas W. (geier99)


Bewertung
lesenswert
nicht lesenswert
> Aktuell arbeite ich an einem Projekt und brauche dafür wie im Titel
> genannt ein Zündungsplus für jedes Auto das auch einen Can-Bus hat (Über
> OBD2) Schnittstelle.

Noch ein Hinweis am Rande:
Nicht alle Fahrzeuge haben CAN-Botschaften auf der OBD2 Schnittstelle, 
wenn der CAN-Bus im Fahrzeug aktiv ist.

Z.B. erst, wenn ein Diagnosetester eine Diagnosesession initiiert hat, 
sind dort CAN-Botschaften zu finden.

von Roland E. (brainfoolong)


Bewertung
lesenswert
nicht lesenswert
Andreas W. schrieb:
> Noch ein Hinweis am Rande:
> Nicht alle Fahrzeuge haben CAN-Botschaften auf der OBD2 Schnittstelle,
> wenn der CAN-Bus im Fahrzeug aktiv ist.
>
> Z.B. erst, wenn ein Diagnosetester eine Diagnosesession initiiert hat,
> sind dort CAN-Botschaften zu finden.

Interessante Information. Würden dann aber nicht alle am Markt 
erhältlichen OBD2 Dongles, die grundsätzlich für fast alle Fahrzeuge 
gehen, bei solchen Autos auch nicht funktionieren?

Denn damit so ein Dongle funktioniert, muss er wissen mit welchem 
Protokoll der Can-Bus im Auto kommuniziert (BaudRate), bevor er etwas 
senden kann. Das machen die normalerweise einfach mit lauschen und 
warten bis Signale kommen.

Weiters würde in einem solchen Auto, wo mal per Default gar keine 
Signale am Can-Bus OBD2 Stecker kommen, alle genannten Lösungen nicht 
funktionieren.

Man könnte "blind" jetzt aber eine Can-Bus Diagnose Message schicken, 
weiß man aber das genaue Protkoll des Autos nicht, kann das Fehler im 
Auto erzeugen (Hab ich schon geschafft mit einem Can-Bus Modul am 
Arduino).

Ich denke, wenn es wirklich solche Autos gibt, dann muss ich für mein 
Projekt davon ausgehen, es wie eine Auto ohne irgendeinen Can-Bus zu 
handhaben, also unsupported.

von Andreas W. (geier99)


Bewertung
lesenswert
nicht lesenswert
Nein, denn die Baudrate an der OBD2-Schnittstelle ist mit 500 kBit/s 
bekannt, wenn Du den CAN-Bus an den Pins 6, 14 meinst.
Und die Diagnosebotschaften sind auch bekannt, deshalb funktionieren die 
ganzen OBD2 Dongles (Diagnose).

Dein oben aufgeführter Beispieladapter ist wohl eher für den 
Innenraum-CAN Bus vorgesehen und nicht für die OBD2 Schnittstelle damit 
er in allen Fahrzeugen funktioniert.

Ich würde wohl eher an den Anschluss an der OBD2-Buchse verzichten und 
mich direkt am CAN-Bus vom z.B. dem Radio dranhängen um jedes Fahrzeug 
abzudecken.
(Die Nachteile die damit für den Einbau und Dokumentation verbunden 
sind, sind mir bewusst :-(  )

Und hier findest Du noch ein paar Hintergrund Informationen zu:
- Diagnoseprotokolle (Kapitel 5,6):
  http://www.emotive.de/documents/WebcastsProtected/Transport-Diagnoseprotokolle.pdf

- PIDs:
  https://en.wikipedia.org/wiki/OBD-II_PIDs

von Roland E. (brainfoolong)


Bewertung
lesenswert
nicht lesenswert
Andreas W. schrieb:
> Nein, denn die Baudrate an der OBD2-Schnittstelle ist mit 500
> kBit/s
> bekannt, wenn Du den CAN-Bus an den Pins 6, 14 meinst.
> Und die Diagnosebotschaften sind auch bekannt, deshalb funktionieren die
> ganzen OBD2 Dongles (Diagnose).

Das meine ich ja, aber 500kbits ist nicht genormt. Es könnte auch 
125kbits, 250kbits, 1mbit oder irgendeine andere Rate sein. Das ist dem 
Hersteller überlassen. Wobei es stimmt das mit 500kbits die meisten 
arbeiten, deswegen probieren die Can-Dongles das auch als erstes. Hatte 
aber auch schon ein Auto, wo es 250kbits waren.

> Dein oben aufgeführter Beispieladapter ist wohl eher für den
> Innenraum-CAN Bus vorgesehen und nicht für die OBD2 Schnittstelle damit
> er in allen Fahrzeugen funktioniert.
Ne das sind schon die OBD2 Dongles die ich meine. Die haben ein 
automatisches ermitteln des Protokolls/BaudRate. Sieht man auch in den 
unterliegenden AT-Befehlen die man an das ELM327 Modul darin senden 
kann.

> Ich würde wohl eher an den Anschluss an der OBD2-Buchse verzichten und
> mich direkt am CAN-Bus vom z.B. dem Radio dranhängen um jedes Fahrzeug
> abzudecken.
> (Die Nachteile die damit für den Einbau und Dokumentation verbunden
> sind, sind mir bewusst :-(  )
Ja, das wäre am Schluss auch eine Möglichkeit, aber nicht der Weg den 
ich gehen möchte.


Ich werde als ersten Ansatz jetzt mal den Attiny85 testen, mit dem ich 
via ADC einfach die Can-Bus Spannung messen kann. Das Teil ist super 
günstig, kann ich programmieren und benötigt keine weiteren Bauteile, 
außer vielleicht den ein oder anderen Widerstand und ein Relais.

Soweit ich das bei meinen bisherigen Tests mitbekommen habe, haben alle 
meine getesteten Autos den Can-Bus im Sleep Modus auf weniger als 2V 
geregelt, was ich erkennen kann, ohne das überhaupt jemals eine Message 
gesendet wurde. Sobald der Can-Bus Aktiv wird, fährt die L/H Voltage auf 
2,5V - Das heißt Aktiv aber noch nichts gesendet. Bei 3 Autos hat das 
geklappt, wie gesagt eben mit einem Esp8266 der mir zuviel Strom saugt. 
Aber mit dem Tiny85 sollte ich das selbe erreichen, mit minimalem 
Stromverbrauch.

von Roland E. (brainfoolong)


Bewertung
lesenswert
nicht lesenswert
Ok ein kurzes Update zum Test mit Attiny85.
Ich habe ein Modul gekauft das bereits einen USB Anschluss hat zum 
einfachen programmieren.

Damit schaffe ich das, was ich haben möchte, mit akzeptablen 
Stromverbrauch von ca. 8mA im Mittel bei 12V im Ruhezustand. Tests in 
mehreren Autos stehen noch aus.

Die Schaltung liest permanent CAN-H Spannung. Sobald diese über 2V geht, 
nehme ich jetzt mal an das der CAN-Bus Aktiv genutzt werden kann, egal 
ob jetzt Daten gesendet werden oder nicht. Bei meinen vorherigen Tests 
mit dem Esp8266 hat sich gezeigt, das alle Autos die ich getestet habe 
den Bus im Ruhezustand auf <1V runterregulieren wenn das Auto schlafen 
geht.

Der Attiny85 selbst verbraucht nur 2mA, das meiste geht für den DC Step 
Down Converter drauf der 6mA verbraucht. Ich habe das Gefühl es gibt 
einen performanteren Converter, der 12V runterregeln kann, habe aber 
noch keinen wirklich passenden gefunden.

Mein Attiny85 verträgt selbst direkt 12V Input am VIN, verbrennt dabei 
aber mehr Strom als wenn ich nen richtigen Buck Converter vorher nehme.

Ein Spannungsteiler 100k/27K am CAN-H Input zum Attiny schützt mir die 
Schaltung bei Kurzschluss zu 12V und gibt mir bei 2,5V Can-H Spannung 
noch genug Genauigkeit (ca. 0,5V)

Am Schluss schalte ich aktuell ein 5V Relais, baue das aber noch um auf 
Transistoren, wenn ich welche da habe.

Ein Nachlauf von ca. 1 Minute nachdem der Can-Bus schlafen geht ist 
einprogrammiert, das möchte ich so haben und funktioniert auch.

Gesamtschaltung kostet mir somit grob so um die 5-6€. Geht sicher noch 
billiger wenn ich mehr Zeit in die Suche investiere bzw. mehr auf einmal 
Kaufe.

Ich poste dann demnächst noch die Ergebnisse meiner Tests und evtl. 
Schaltung und Code dazu.

: Bearbeitet durch User

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.