CAN-Bus-Simulation (Automotive-Zweck) - Arduino und SparkFun ausprobiert

Ich repariere elektrisch angetriebene Lenksysteme für Autos, insbesondere Fiat, Alfa und Lancya (Delphi-Hersteller), und ich brauche ein Werkzeug, um diese Reparaturen zu testen. Ich meine, zum Beispiel einfach einschalten.

Ich habe einige Zeit recherchiert und festgestellt, dass CAN-Bus-Signale simuliert werden müssen, da das EPS- Steuergerät Zündpakete von CAN empfängt. Hier gehe ich ...

Ich muss wissen, wie ich CAN-Pakete vom/zum Bus lesen und senden kann. Ich meine, welches Werkzeug oder irgendetwas anderes. Ich habe es mit Arduino Uno + einem SparkFun CAN BUS Shield versucht , aber ich bekomme keine Ergebnisse. Wenn alles verbunden ist, schnüffelt meine serielle Konsole keine Pakete. Ich habe alles richtig angeschlossen, denke ich, und verschiedene Bitraten ausprobiert, Arduino-Boards und -Shield geändert, viele verschiedene Beispiele ausprobiert. Ich habe viele Stunden ohne Gewinn investiert ... Ich habe SEAT Ibiza 2010 für I + D verwendet, CAN-H und CAN-L am OBD- Anschluss angeschlossen, in den CAN-Leitungen vom Radio usw. ...

Jede Idee, was falsch sein könnte, ist willkommen, ebenso wie eine neue Methode, um mein Projekt zu machen ...

Information:

ARDUINO UND SPARKFUN SHIELD UND SERIELLE KONSOLE

Bibliotheken verwendet

UPDATE 2 (28.12.2014): Ich habe ein Multimeter verwendet, weil ich kein Oszilloskop habe. Das Lesen der Spannungen gibt mir immer nur 2,5 V auf CAN-H und CAN-L, ich bekomme diese Messwerte bei Arduino CAN-H CAN-L und im OBD2-Port (Pins 6 und 14)

UPDATE 3 (29.12.2014): Ich plane, auf eine Programmiersprache mit CAN-Schnittstelle umzusteigen, Vorschläge sind willkommen, danke!

UPDATE 3.1 (30.12.2014): Definitiv, ich gehe dafür einen anderen Weg, ich warte darauf, dass Kvaser und ECOM mir in ihren Support-E-Mails antworten. Auf diese Weise wissen wir vielleicht, ob ihre Tools zu meinem Projekt passen. Ich werde euch auf dem Laufenden halten, danke für all die Hilfe Jungs! :)

Meine beste Vermutung ist, dass Ihr CAN-Empfänger die Broadcast-Pakete empfängt. Da Ihr Identifier aber nicht mit der Zieladresse übereinstimmt, verwirft Ihr CAN-Empfänger das Paket einfach. Vielleicht suchen Sie nach so etwas wie diesem ebay.com/itm/…
@Nick Alexeev, aber da ich denke, dass der verwendete Code dazu dient, alle Daten zu schnüffeln, die in diesen Zeilen roamen, sollte er nicht etwas zeigen? X_X Wie auch immer, ich hatte das ELM bereits bestellt, aber ich weiß nicht, ob ich benutzerdefinierte HEX-Pakete an den CAN-Bus senden kann, um Signale zu simulieren. Danke für Ihre Aufmerksamkeit! :)
Was ist "I+D"?​
Mit einem Oszilloskop kann man die Bitrate feststellen und ob die CAN-Bus-Signale tatsächlich am CAN-Bus-Shield anliegen.
Kannst du den verwendeten Code posten?
Können Sie einen Link zum SparkFun CAN-Bus-Shield bereitstellen (indem Sie Ihre Frage aktualisieren)?
Frage Das Lesen vom CAN-Bus eines Chevrolet Cruze mit einem Arduino Uno ist Ihrem sehr ähnlich (Arduino Uno mit einem CAN-Bus-Schild von SparkFun). Vielleicht möchten Sie die darin enthaltenen Informationen erkunden, experimentieren und hierher zurückkehren (Ihre Frage mit den gefundenen neuen Informationen aktualisieren). Sie können mich gerne per E-Mail oder Twitter anpingen, wenn Sie fertig sind, damit wir eine angemessene Antwort auf Ihre Frage erhalten können (anstatt nur vorzuschlagen, teure neue Geräte zu kaufen - ich sehe keinen Grund, warum dies nicht funktionieren sollte, zumindest nicht teilweise).
@Peter Mortensen I+D ist "Untersuchung und Entwicklung", ich werde den Beitrag mit der URL dessen aktualisieren, was ich verwendet habe, der Code befindet sich in der RAR-Datei, die ich in die Dropbox hochgeladen habe, ich habe sie alle ausprobiert, aber ohne Erfolg. Über diese Frage von Chevrolet Cruze habe ich es gelesen, aber nichts davon löst meine Probleme ... Ich kann nicht so viel für neue Geräte verschwenden, und mein Hauptinteresse nach meiner Arbeit ist es, etwas über Can Bus mit Arduino und Sparkfun i zu lernen sollte zumindest die Nachrichten lesen können.. irgendein Tipp? Wenn Sie irgendwelche Informationen brauchen, sagen Sie es mir einfach und ich kann Ihnen alles zur Verfügung stellen, ein Video oder irgendetwas anderes.
Tipp: Verwenden Sie ein Oszilloskop, um die Bitrate und einige COBIDs abzulesen (ich glaube nicht, dass COBIDs von Bitstuffing betroffen sind ). Sowohl CAN-H als auch CAN-L sollten Signale in Bezug auf Masse haben. Führen Sie die Messung so nah wie möglich am CAN-Transceiver des Arduino durch. Wenn Sie keinen Zugang zu einem Oszilloskop haben, verwenden Sie ein Voltmeter, um die Signale vom CAN-Bus des Autos zum Arduino-Schild zu verfolgen - sowohl CAN-H als auch CAN-L haben eine charakteristische (durchschnittliche) Spannung. Veröffentlichen Sie die Ergebnisse, indem Sie die Frage aktualisieren.
Wenn Sie eine COBID finden, kann diese in der Software verwendet werden – je nach Software kann es erforderlich sein, dass Sie eine bestimmte COBID verwenden. Auch wenn Sie sich alle COBIDs ansehen möchten, ist dies ein wichtiger Schritt, um festzustellen, ob eine Nachricht empfangen werden kann.
Die 2,5 V an CAN-H und CAN-L können darauf hindeuten, dass kein Verkehr (oder sehr wenig Verkehr) vorhanden ist.
Wie hoch ist die (genaue) Spannung, wenn Sie zwischen CAN-H und CAN-L messen? (Veröffentlichen Sie das Ergebnis, indem Sie die Frage aktualisieren.)
@Peter Mortensen und wie könnte es sein? Soll das Auto nicht Pakete in diesen Zeilen senden? In den Beispielen, denen ich gefolgt bin, erhielten die Leute viele Nachrichten mit CAN-ID und HEX-Bytes. Übrigens, was meinst du mit COBID?
Wir wissen es noch nicht - wir befinden uns gerade im Fehlerbehebungsmodus. Wir erwarten Verkehr auf dem Bus und daher sollte die (durchschnittliche) Spannungsdifferenz zwischen CAN-H und CAN-L etwas anders als 0 Volt sein. Wie viel hängt vom Verkehr ab. Auch ohne Oszilloskop sind wir nahezu blind. (COBID ist der erste Teil einer CAN-Bus-Nachricht. Sie ist oft 11 Bit oder 29 Bit ( J1939 ) lang.)
Ich könnte einen Freund fragen, der vielleicht ein Oszilloskop hat, was ich damit überprüfen muss? @ Peter Mortensen
Bestimmen Sie zunächst die Bitzeit. Dies ist nur die kleinste Zeit zwischen Übergängen (Low zu High/High zu Low) - die Übergangszeiten sind ein Vielfaches der Bitzeit. Wenn die Bitzeit beispielsweise 1,5 µs beträgt, beträgt die Zeit zwischen den Übergängen entweder 1,5 µs, 3,0 µs, 4,5 µs, 6,0 µs, 7,5 µs usw. Messen Sie zwischen CAN-L und CAN-H (erfordert schwebende Masse) und triggern Sie auf gleichen Kanal (z. B. CH1) mit einem Triggerpegel von 0,5 V, triggern im DC-Modus (AC-Modus geht auch, wenn das Oszilloskop nicht defekt ist ). Versuchen Sie, die Bitzeit so genau wie möglich zu bestimmen.
Lesen Sie zweitens die Bits für eine gesamte Nachricht aus und versuchen Sie, einen Sinn daraus zu machen (das Bit-Stuffing macht es kompliziert) - werden beispielsweise 11-Bit- oder 29-Bit-COBIDs verwendet. Es ist wahrscheinlich am einfachsten für die kürzesten Nachrichten zu tun.
Ich konnte kein Oszilloskop von meinem Freund bekommen, irgendwelche anderen Tipps @PeterMortensen? Vielen Dank für Ihre Hilfe
Ich bekomme 3,7 V und 1,3 V in CAN-High und CAN-Low in den CAN-Leitungen zum Radio, könnte der OBD2-Port geschützt werden? Wenn ja, wie kann ich es umgehen?
(Bekomme sowieso immer noch keine Info mit den Radiodosenleitungen)
Ich denke, Sie sollten zuerst die Signale auf dem CAN-Bus zum Radio verfolgen. Du musst die Bitrate finden. Sie könnten einen Standard- Schmitt-Trigger mit Spannungsschwellen von 2,5 V und 2,9 V verwenden. Führen Sie den Ausgang des Schmitt-Triggers in einen digitalen Eingang des Arduino ein. Schreiben Sie ein Programm, um das Bit-Timing zu finden. Richten Sie beispielsweise einen Timer/Zähler mit ausreichend hoher zeitlicher Auflösung und Besetzt-Warten auf Übergänge ein. Geben Sie bei einem Übergang den Timer-/Zählerwert an die Standardausgabe aus, damit er im Terminal in der Arduino IDE angezeigt wird.
- weiter. Es sollte eine charakteristische minimale Zeitdifferenz vorhanden sein, die der Bitzeit entspricht (vielfach wiederholt). (In der Ausgabe sorgen Sie dafür, dass das Programm nur Werte für die ersten, sagen wir, 20 Übergänge ausgibt).

Antworten (3)

Das Arduino CAN-Schild ist ziemlich cool, wenn Sie einen eingebetteten Computer bauen möchten, um mit CAN zu spielen. Wenn ich das richtig verstehe, bauen Sie jedoch ein einmaliges Tool für Ihren persönlichen Gebrauch (oder verwenden lediglich ein handelsübliches Tool, wenn eines zum richtigen Preis vorhanden ist). Aus diesem Grund fordere ich Sie auf, das Schreiben von PC-Software anstelle von eingebetteter Software in Betracht zu ziehen, um eine Verbindung zu vorhandenen, kostengünstigen CAN-Hardwareschnittstellen herzustellen.

Charlie Miller und Chris Valasek verwendeten dieses sogenannte ECOM-Tool und schrieben Software, die eine Schnittstelle dazu bildet. Das ECOM-Tool scheint eine API und einen Beispieltreiber zu haben. Ihr Auto-Hacking-Whitepaper und ihre Software bieten einen ziemlich guten Ausgangspunkt für die Anbindung eines PCs an ein Auto. Softing stellt auch PC-CAN-Schnittstellenhardware her, aber ich habe derzeit Probleme beim Zugriff auf ihre Website, daher werde ich sie nicht verlinken.

Es gibt auch mehrere vollwertige, kommerzielle Softwaretools, um CAN auch auf einem PC zu analysieren und zu simulieren. CANoe von Vector ist ein bekanntes (und teures) Werkzeug für diesen Zweck.

Hallo @downbeat, erstmal sorry, dass ich nicht geantwortet habe, ich habe deine Antwort nicht gesehen. Welche spezifische Schnittstelle (wenn sie billig ist, besser: P, wenn nicht, brauche ich sie trotzdem) kann ich für die Schnittstelle mit dem Auto mit meiner IDE verwenden? Welche Sprache verwenden? Ich kenne Java, ein bisschen C++, irgendwelche Informationen oder Beispiele dafür wären sehr dankbar.
Ich habe nicht den Ruf, den EE-Stack-Austausch zu kommentieren. Höchstwahrscheinlich gibt es eine Art Treiber, der mit jedem kostengünstigen Tool geliefert wird. Das erwähnte ECOM-Tool kostet 180 US-Dollar. Dieser ELM327 kostet 7 bis 21 US-Dollar. Beide erfordern einen gewissen Programmieraufwand. Es sieht so aus, als ob das ELM-Gerät einen AT-Befehlssatz über RS232 verwendet. Ich würde das mit Python verbinden, aber es sollte ziemlich einfach sein, sobald Sie den Dreh raus haben.
Ich habe kürzlich das Tool USB2CAN ( 8devices.com/usb2can ) gefunden , das noch billiger ist und zum Zeitpunkt dieses Schreibens für 65 $ verkauft wird [ shop.8devices.com/index.php?route=product/… . Ich habe es unter Linux verwendet, aber nicht unter Windows. Ich weiß nicht, wie reichhaltig die mitgelieferte Software ist, aber Sie können sicherlich Ihre eigenen Skripte schreiben, um direkt mit dem Treiber zu kommunizieren. Unter Linux gibt es einige bereits vorhandene CAN-Tools wie cansend, candump, cangen und canplayer.

Wenn Sie bereit sind, etwas von der Stange für ein paar hundert Dollar zu kaufen, sind Kvaser's Leaf-Produkte ziemlich einfach zu verwenden. Mit ihnen können Sie vorab aufgezeichnete Paketsequenzen senden und den Bus überwachen. Sie können einen mit einem OBD-2-Anschluss erhalten, wenn Sie diesen benötigen.

Der Bau Ihrer eigenen Testausrüstung ist für ein persönliches Projekt in Ordnung, aber wenn Sie mit diesen Reparaturen Geld verdienen, ist es wahrscheinlich besser, mit etwas zu beginnen, von dem Sie wissen, dass es zuverlässig ist.

danke für die tipps Adam! könntest du mir einen link hinterlassen? Ich würde es vorziehen, mein eigenes zu machen, da es nicht sehr schwer sein sollte, damit ich später mein Werkzeug für meine neuen Bedürfnisse verbessern kann, Grüße!
Hier ist ein Link zum Low-End-Modell: kvaser.com/products/kvaser-leaf-light-v2

Nachdem Sie es schließlich geschafft haben, Zahlen von einem CAN-Bus mit einem eingebetteten Controller zu erhalten, glaube ich, dass das größte Problem, auf das Sie stoßen, die Beispiele der Anbieter sind, die die Register des Controllers für CAN-Quanten und Sample-Timing nicht richtig initialisieren.

Die Bemühungen der beliebten CAN-Abschirmungen einzudämmen, ist der 16-MHz-Quarz, den SparkFun und Seeeed verwenden. Dann ist der langsame Arduino nicht gut geeignet, um serielle Daten zu verschieben. Keiner der Beispielcodes im Internet funktioniert, da es sich um vorgefertigte Beispiele für 1 Mbit/s handelt ...

Einige Mikrocontroller haben eingebaute CAN-Controller (leider haben fast keine Transceiver). Ich habe einen ChipKIT Max32 und einen MCP2551 IC über ein Steckbrett in der folgenden Schaltung verwendet. Zusätzlich habe ich die Transceiver auf den CAN-Schildern von SparkFun und Seeed angezapft, um Tx/Rx-Daten zu erhalten. Der Max32 des ChipKIT verfügt über zwei CAN-Controller und einen 80-MHz-CPU-Takt und eignet sich daher gut für CAN-Experimente. Mit einem Online-Rechner konnte ich den Controller des PIC32 beim ersten Versuch einrichten.

Ich habe meine Entwicklung von CAN-Arbeiten für andere Projekte ausgesetzt, aber ein Partner hat einen Arduino Uno mit CAN-Schildern dazu gebracht, von einem 500-kbit/s-Bus zu lesen. Ich habe mir den Code angesehen, den er kürzlich mit mir geteilt hat, aber ich konnte nicht herausfinden, wie das Timing des MCP2515-Controllers eingestellt war oder wie es sich vom Beispielcode unterschied.

Das nächste Entwicklungsboard, das ich versuche, ist das Connected LaunchPad TM4C123GXL von Ti. Es verfügt über CAN-Controller, USB-OTG, viele E/A und kostet 13 US-Dollar.

Geben Sie hier die Bildbeschreibung ein