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
(https://www.ebay.de/itm/Radio-Adapter-CAN-Bus-Alfa-Audi-Citroen-BMW-Ford-Mercedes-Opel-Peugeot-VW/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.
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.
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
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.
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?
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.
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.
> 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.
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.
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
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.
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.
Roland schrieb:> Ich habe mir schon mal einen Adapter>
(https://www.ebay.de/itm/Radio-Adapter-CAN-Bus-Alfa-Audi-Citroen-BMW-Ford-Mercedes-Opel-Peugeot-VW/293451568487)
> besorgt der genau das macht, was ich brauche. Allerdings möchte ich ihn> gerne genau verstehen und eventuell selbst nachbauen.
Und was macht man in so einem Fall? Rumjammern? Rätselraten? Nö,
aufmachen und nachsehen!
> 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.
Na und?
Ich hab mir für Dich mal so einen Adapter besorgt und freigelegt. Leider
ist es völlig demystifizierend was man darin findet... einen µController
sucht man vergebens.
Versuchs mal mit einem LP2905 oder gleich einem LP2952, der hat sogar
einen Shutdown-Pin. Mit seinen 100 mA Max. dürfte er voll ausreichen. Er
ist kurzschlußfest, thermalgesichert, verpolungssicher und kann
Eingangsspannungen bis 30V ab.