Überblick:
Ich kommuniziere zwischen 3 benutzerdefinierten Leiterplatten mit dspic33 über SPI. Ich habe einen Master und 2 Slaves, aber ich sende beiden Slaves die gleichen Daten (und lasse sie auswählen, worauf sie achten sollen).
Hardware-Setup:
Die beiden Slaves haben BLDC-Motorsteuerungen eingebaut, und der Master steuert diese Motorsteuerungen über SPI. Die Drähte verlaufen ungefähr 3 Fuß vom Master zu jedem Slave und die Header sind typische SAMTECH-Header mit einem Abstand von 0,1 Zoll. Jeder Motorcontroller verfügt über einen eigenen 3,3-Volt-Regler, der die dsPIC / LV-Elektronik betreibt. Ich verwende einen Motorcontroller-Regler (Nennen wir ihn A), um auch den SPI-Master-DSPIC mit Strom zu versorgen. Zum anderen Motorcontroller (nennen wir ihn B), führe ich nur die SPI-Leitungen und die Masse vom Master aus. Der SPI-Clk läuft mit 100 kHz
Auf den Punkt kommen (endlich):
Wenn keine Motoren laufen, funktioniert dies einwandfrei. Alle Daten werden wie erwartet an beide Slaves weitergeleitet. Wenn ich jedoch die Motoren starte, erhält Bslave nicht mehr die richtigen Daten. Er nimmt entweder zusätzliche Uhren auf oder lässt sie fallen, ich nehme an, dass er das zusätzliche Geräusch verursacht. In jedem Fall schlagen seine Prüfsummen fehl. Aslave arbeitet wie ein Champion, egal was passiert.
1) Würden Sie erwarten, dass alle diese Geräte mit derselben 3,3-Volt-Quelle betrieben werden müssen? Wenn ja, können Sie mich überzeugen, indem Sie über die längere Induktivitätsschleife und solche schwarze Magie sprechen.
2) Haben Sie eine Faustregel, wie schnell ich erwarten kann, dass ich den SPI-CLK ausführen und mit einem Hardware-Setup wie dem oben genannten erfolgreich sein kann?
Antworten:
Ich habe SPI (2-MHz-Takt) ca. 5 m von einer Box zu einer anderen Box ausgeführt und habe nicht gezögert, den Takt und die Daten so zu gestalten, dass sie einen ausgeglichenen Ausgang haben. Das (benutzerdefinierte) Kabel zwischen den beiden verwendete auch Twisted Pair und Bildschirm sowohl für Daten als auch für die Uhr.
Ich habe die Remote-Box auch über Gleichstrom-Gleichstrom-Wandler isoliert mit Strom versorgt. Ich hatte nicht genug Zeit, um das falsch zu verstehen, also war meine Lösung möglicherweise ein Overkill, aber hey, es hat funktioniert. Meine Argumentation hinter dieser Entscheidung ist, dass ich nicht wollte, dass "Stromverbrauchsspitzen" über die Bildschirme des Twisted Pair laufen. Die Bildschirme waren am Sendeende des PCs nicht mit Masse verbunden. Behandeln Sie digitale Signale wie wertvolle analoge Signale, um die beste Leistung zu erzielen. Lassen Sie Ihren Bildschirm immer am Empfangsende und wenn Sie (aus irgendeinem Grund) auch am Sendeende widerwillig enden müssen.
Es diente zur Übertragung von 128 Kanälen mit analogen langsamen Signalen von einem PC zu einer Breakout-Box. Ich vermute, wenn ich müsste, könnte ich dies mit 20 MHz Takt betreiben.
quelle
SPI unterscheidet sich nicht von anderen elektrischen Schnittstellen. Beachten Sie die üblichen Probleme mit der Signalintegrität (Abschirmung, Schleifenbereich, Impedanz, Signalabschluss usw.), und Sie können eine angemessene Entfernung zurücklegen. Was ein angemessener Abstand ist, hängt davon ab, was Sie damit machen und wie gut Sie die verschiedenen Faktoren steuern können.
Kannst du es 3 Fuß laufen lassen? Bestimmt. Solltest du? Nun, es gibt bessere Dinge zu verwenden. Wie andere bereits betont haben, gibt es RS-4xx, das gut funktionieren könnte. Sie können auch SPI ausführen, aber die Differenzsignalisierung wie RS-4xx über das Kabel verwenden. Dadurch werden mehr Drähte verbraucht, aber das sind die Unterbrechungen. Sie können auch normalen RS-485 mit einem UART und dergleichen ausführen.
Ich persönlich habe SPI über 1-Fuß-Kabel in einem Chassis mit Raten bis zu 32 MHz ohne Probleme verlegt. Ich habe I2C auch über 4 Fuß bei 100 KHz in einer Umgebung mit hoher EMI betrieben und SPI ist viel besser als I2C - also kann es gemacht werden. Wenn Sie jedoch nicht auf die Details achten, können Sie leicht auf Probleme stoßen. Aber ehrlich gesagt müssen Sie auf die Details achten, unabhängig davon, was Sie verwenden.
quelle
Überlegen Sie sorgfältig Ihr Erdungsschema. Schirmen Sie die Datenleitungen ab, wenn dies hilfreich ist, und erden Sie die Abschirmung ordnungsgemäß. Führen Sie Daten und Uhr nicht auf demselben Twisted Pair aus. Verwenden Sie bei Bedarf eine galvanische Trennung. Abgesehen davon gibt es keine Faustregeln, die mir bekannt sind.
SPI wurde für (1) Nahbereichskommunikation entwickelt, normalerweise innerhalb einer Leiterplatte und (2) in einer Umgebung mit wenig EMI. Möglicherweise sind die einzigen Busse, die bei Vorhandensein von EMI eine schlechtere Leistung als SPI erbringen, I 2 C und 1-Draht. Es gibt Busse, die für die Fernkommunikation bei Vorhandensein von EMI (RS-485, CAN, Ethernet) ausgelegt sind.
Es ist möglich, das SPI zu erweitern und zu robust zu machen. Hier ist ein Anwendungshinweis , der einen SPI-Bus mit Differenzleitungen zeigt.
quelle
Es gibt verschiedene Möglichkeiten, um die Auswirkungen von Rauschen auf Ihre Signalleitungen zu minimieren. Am einfachsten ist es, eine Kupferebene oder eine Kupferspur neben Ihren Signalspuren zu routen. Dies minimiert die Induktivität der Spuren und des Schleifenbereichs.
Bei hoher Frequenz laufen die Rückströme gerne einen Pfad mit der geringsten Impedanz neben den Signalleitungen selbst. Ich gehe davon aus, dass Sie eine gemeinsame Masse zwischen Ihren Stromkreisen haben, aber dies kann Probleme bei der Hochfrequenzsignalisierung verursachen, wenn Ihre gemeinsame Masse einfach eine "Strom" -Masseverbindung zwischen den Stromkreisen ist. Dies führt zu einer sehr großen Schleifenfläche für die Signalströme, die aufgrund der magnetischen Streukopplung eine starke Rauschinjektion ermöglichen kann.
Wenn Sie können, schließen Sie eine zusätzliche Erdungsverbindung zwischen den Erdungen an, die an die SPI-Signalleitungen angrenzen, und halten Sie eine Kupfererdungsebene oder -spur neben den Leitungen innerhalb der Platinen. Es kann einen großen Unterschied machen, wie anfällig Ihre Schaltung für Motoren ist.
quelle