Günstigster Weg, um ein CAN-Signal zu erhalten

Ich muss Signale über etwa fünf Meter übertragen. Meine Eingangssignale sind I2C- oder SPI-kompatibel, aber leider ist es keine gute Idee, sie über eine so lange Distanz zu übertragen. Daher dachte ich daran, das I2C- oder SPI-Signal in ein CAN-Signal (und zurück) umzuwandeln. Was ist der beste Ansatz, um diese Signale ineinander umzuwandeln, ohne (zu viele) externe Komponenten verwenden zu müssen? Mein erster Ansatz war, einen MCP2515 zu verwenden, aber da brauche ich schon eine externe Uhr. Gibt es dafür eine günstigere Möglichkeit?

Warum halten Sie es für eine schlechte Idee, I2C oder SPI für diese Entfernung zu verwenden?
Ich habe gesehen, wie UARTS so schnell wie möglich liefen, um als Parallel-zu-Seriell- und Seriell-zu-Parallel-Konverter zu fungieren, um Verbindungen über Faserpaare zu bilden. Ich würde heute kleine MCUs mit internen Oszillatoren ausprobieren, und natürlich muss es keine Glasfaser sein. Ok bei langsamem SPI, aber ich bin mir nicht sicher, ob I2C so laufen könnte ...
@sweber: Habe gelesen, dass ich Fehler bekommen kann, wenn ich SPI über große Entfernungen verwende, kann ich Lese-/Schreibfehler bekommen ...
Solange Sie die Leitungskapazität richtig einstellen (und die richtigen Pull-up-Widerstände wählen), sollte I2C auch in Ordnung sein.
Von welcher Geschwindigkeit (Bit/s) sprechen wir?
@PeterMortensen: Weiß ich noch nicht genau, aber für erste Tests gehe ich von etwa 1kbit/sec oder mehr aus
Basierend auf der Bitrate * Distanz < 10 ^ 8 Faustregel mit RS-485 sollten Sie in der Lage sein, bis zu 20 MBit durch ein 5 m langes Kabel zu übertragen.

Antworten (3)

Wenn Sie ein Problem mit seriellen Protokollen wie SPI über 5 Meter haben, besteht die einfache Antwort darin, die Taktrate für den Rückempfang von Daten von entfernten Geräten zu senken. Zu so etwas wie CAN zu gehen, ist keine einfache Lösung für meine Denkweise, aber natürlich muss dies möglicherweise getan werden, wenn die Entfernungen dies rechtfertigen und Sie die Geschwindigkeit nicht verringern können, ABER denken Sie darüber nach ...

Wenn Sie an beiden Enden (oder am entfernten Ende) ein Mikro anbringen, um eine Kommunikation vom CAN-Typ zu ermöglichen, bedeutet dies, dass Ihr Gesamtdurchsatz beim Abrufen von Daten von einem entfernten Gerät begrenzt wird, ohne dass Sie über die CAN-Verbindung eine wesentlich höhere Datenrate erreichen müssen um Ihre aktuelle Master-SPI-Übertragung so anzupassen, dass sie mit CAN kompatibel ist, und dies könnte bedeuten, dass Sie, anstatt nur eine SPI-Uhr und CE zu senden, eine formellere Anfrage für die Rücksendung der Remote-Daten an Sie senden müssen.

Am einfachsten ist es, den Takt entsprechend dem Kabel zu reduzieren und ggf. symmetrische Treiber und Empfänger zu verwenden, dh alles mit der Verzögerung, die man durch das Einführen der 5 Meter Kabel bekommt, zum Laufen zu bringen. Es ist einfach, Daten an ein entferntes Gerät zu senden - sowohl die Uhr als auch die Daten kommen weitgehend synchron an, aber der Versuch, Daten zurückzubekommen, ist das eigentliche Problem auf großen Entfernungen - das empfangende Gerät bekommt die Uhr und synchronisiert seine Daten mit dem eingehenden clk, aber durch Wenn es beim Meister ankommt, sind die Dinge zueinander verzerrt.

Aus diesem Grund schlage ich vor, die Taktgeschwindigkeit zu reduzieren - die Skews sind nicht so schlimm (in Prozent) und führen weniger wahrscheinlich zu Fehlern.

Wenn Sie ein zusätzliches Twisted-Pair entbehren können, können Sie RS485 verwenden. Sie würden zwei Twisted-Pair-Kabel verwenden, eines für Daten und eines für die Richtungssteuerung, oder Sie könnten Halbduplex mit einem Paar für jede Richtung verwenden.

Im Fall von Daten/Richtung würden Sie die Richtungssteuerleitung verwenden, um den Ausgang am Slave-Ende zu deaktivieren, wenn Sie dorthin senden, und den Master-Ausgang deaktivieren, wenn der Slave voraussichtlich senden wird.

Warum Daten/Richtung für Halbduplex verwenden, wenn dasselbe Kabel Daten/Daten in Vollduplex übertragen kann? Vielleicht, wenn die Hardware an einem oder beiden Enden bereits nur halb ist, aber wenn Sie die Hardware herstellen ...
Dasselbe verdrillte Paar kann Vollduplex betreiben, aber es gibt nichts, um Buskonflikte zu verhindern.

Ich war in einer ähnlichen Situation und versuchte, ein Signal über i2c zu senden, aber meine Entfernung war viel größer. Ich habe CAT5-Kabel verwendet. Ich hatte ein ziemlich hokey Setup, um die Idee zu testen. Ich hatte eine Schaltung eingerichtet, um einen i2c-Extender-Chip zu verwenden (dies sollte 2 Arduinos dazu bringen, miteinander zu sprechen). Ich glaube, ich habe irgendwann einen oder beide Chips gebraten, also habe ich einfach den Stromkreis verdrahtet (ich habe die Chips aus ihren Dip-Sockeln gezogen und sehr kurze Überbrückungsdrähte über die LxSy- und SxLy-Leitungen gelegt). Wie auch immer, ohne zu sehr ins Detail zu gehen, konnte ich das Signal durch etwa 100 Fuß CAT5 bekommen. Vielleicht möchten Sie es versuchen, bevor Sie aufgeben oder annehmen, dass es nicht funktionieren wird. Andernfalls können Sie die verschiedenen i2c-Bus-Extender-Chips ausprobieren. Die Schaltungen sind einfach und die Chips kosten nicht viel (TI und NXP machen sie P82B715PN).i2c-Bus-Extender-Schaltung