Kommunikation zwischen Prozessoren für Roboterarm


13

Ich baue einen Hobby-6-DOF-Roboterarm und frage mich, wie ich am besten zwischen den Prozessoren kommunizieren kann (3-4 AVRs, maximal 18 Zoll Abstand). Ich möchte den Regelkreis auf dem Computer laufen lassen, der Befehle an die Mikroprozessoren über einen Atmega32u4 USB-to- sendet ??? Brücke.

Einige Ideen, über die ich nachdenke:

  1. RS485
    • Vorteile: Alle Prozessoren auf der gleichen Leitung, Differenzsignal robuster
    • Nachteile: Benötigt zusätzliche Chips, muss ein Protokoll schreiben (oder finden?), Um zu verhindern, dass Prozessoren gleichzeitig senden
  2. UART-Schleife (dh TX eines Prozessors ist mit RX des nächsten verbunden)
    • Vorteile: einfache Firmware, Prozessoren haben UART eingebaut
    • Nachteile: Die letzte Verbindung muss die Länge des Roboters zurücklegen, jeder Prozessor muss Zyklen damit verbringen, Nachrichten erneut zu übertragen
  3. CANbus (Ich weiß sehr wenig darüber)

Meine wichtigsten Überlegungen sind die Komplexität, Leistung und der Preis von Hardware und Firmware (ich kann kein teures Out-of-Box-System kaufen).

Antworten:


13

Sie möchten USB für die Kommunikation mit dem Computer verwenden. Wenn Sie über mehrere Mikrocontroller verfügen, schließen Sie wahrscheinlich nur einen der Mikrocontroller direkt an den Computer an. Die anderen Mikrocontroller müssen ihre Befehle vom Hauptmikrocontroller erhalten.

Die von Ihnen gewählte Kommunikation hängt von einer Reihe von Faktoren ab:

  • erforderliche Bandbreite (wir gehen davon aus, dass Sie sie mit 16 MHz betreiben)
  • Komplexität (Verkabelung und Codierung)
  • bidirektional oder Master-Slave

Fast alle Optionen unterstützen den AVR-Mikrocontroller. Es gibt keine Option, die Sie den eingebauten Optionen vorziehen könnten, die zusätzliche Hardware erfordern würden. Da sie über eine integrierte Unterstützung verfügen, ist die Softwarekomplexität ähnlich, da Sie lediglich den Port konfigurieren (mithilfe von Registern), die zu übertragenden Daten in ein anderes Register verschieben und die Übertragung durch Setzen eines Bits in einem anderen Register auslösen. Alle empfangenen Daten werden in einem anderen Register gefunden und ein Interrupt wird ausgelöst, damit Sie damit umgehen können. Welche Option Sie auch wählen, der einzige Unterschied besteht in der Änderung der Registerpositionen und einigen Änderungen an den Konfigurationsregistern.


Eine USART-Schleife weist die folgenden Merkmale auf:

  • Die maximale Baudrate von CLK / 16 = 1MHz (bei 16MHz Takt) entspricht einer Übertragungsrate von ca. 90KB / s
  • voll bidirektionale Kommunikation (keine Master- oder Slave-Bezeichnung)
  • Für jedes Mikrocontrollerpaar sind separate Kabel erforderlich. Der Atmega32u4 unterstützt nativ zwei USART-Ports, wodurch die Anzahl der Mikrocontroller begrenzt wird, die Sie in der Praxis in einem Netzwerk anschließen können (oder Sie haben eine lange Reihe von Mikrocontrollern - dh verbunden in einer verknüpften Liste) Weise)

Hinweis: Dies ist auch das, was Sie für die RS232-Kommunikation verwenden würden. Da RS232 10 V benötigt, ist ein Treiber erforderlich, um diese Spannungspegel zu erhalten. Für die Kommunikation zwischen Mikrocontrollern ist dies nicht sinnvoll (nur die Spannungspegel werden geändert).

RS485:

  • Im Grunde genommen verwenden Sie den USART-Port in einem anderen Modus - die Bandbreite hat keinen Vorteil und vereinfacht möglicherweise die Verdrahtung nur geringfügig, erschwert sie jedoch. Dies wird nicht empfohlen.

Zwei-Draht-Schnittstelle:

  • Dies wird auch als I2C bezeichnet. Dies bedeutet, dass sich alle Geräte die gleichen zwei Drähte teilen.

  • Sie benötigen einen Pull-Up-Widerstand an beiden Drähten

  • Es ist langsam (weil die Pull-up-Widerstände einen begrenzten Wert haben und die Kapazität mit zunehmender Anzahl der Geräte und zunehmender Kabellänge zunimmt). Bei diesem AVR-Mikrocontroller ist die Geschwindigkeit bis zu 400 kHz langsamer als bei USART (diese Geschwindigkeit hängt jedoch von der Begrenzung Ihrer Kapazität ab). Der Grund ist, dass, obwohl ein Gerät die Datenleitung niedrig treibt, der entgegengesetzte Übergang erreicht wird, indem die Leitung wieder hoch schweben gelassen wird (der Pull-up-Widerstand).

  • Es ist sogar noch langsamer, wenn Sie bedenken, dass ALLE Kommunikation dieselbe begrenzte Bandbreite hat. Da die gesamte Kommunikation dieselbe begrenzte Bandbreite hat, kann es zu Verzögerungen bei der Kommunikation kommen, bei denen Daten warten müssen, bis das Netzwerk inaktiv ist, bevor sie gesendet werden können. Wenn ständig andere Daten gesendet werden, wird möglicherweise auch das Senden der Daten blockiert.

  • Es basiert auf einem Master-Slave-Protokoll, bei dem ein Master einen Slave anspricht, dann einen Befehl / eine Anforderung sendet und der Slave anschließend antwortet. Es kann immer nur ein Gerät gleichzeitig kommunizieren, daher muss der Slave warten, bis der Master fertig ist.

  • Jedes Gerät kann sowohl als Master als auch als Slave fungieren, wodurch es sehr flexibel ist.

SPI

  • Dies würde ich für die allgemeine Kommunikation zwischen Mikrocontrollern empfehlen / verwenden.

  • Es ist eine hohe Geschwindigkeit - bis zu CLK / 2 = 8 MHz (für CLK bei 16 MHz), was es zur schnellsten Methode macht. Dies ist erreichbar, weil die Leitung nur für die Uhr bestimmt ist.

  • Die MOSI-, MISO-Daten- und SCK-Taktleitungen werden über das gesamte Netzwerk gemeinsam genutzt, wodurch die Verkabelung vereinfacht wird.

  • Es ist ein Master-Slave-Format, aber jedes Gerät kann Master und / oder Slave sein. Aufgrund der Komplikationen bei der Slave-Auswahl sollten Sie die gemeinsame Verkabelung (innerhalb des Netzwerks) jedoch nur hierarchisch verwenden (im Gegensatz zur Zweidraht-Schnittstelle). IE. Wenn Sie alle Geräte in einer Baumstruktur organisieren, sollte ein Gerät nur den untergeordneten Geräten als Master und dem übergeordneten Gerät als Slave zugeordnet sein. Das bedeutet, dass ein Gerät im Slave-Modus immer den gleichen Master hat. Um dies korrekt zu bewerkstelligen, müssen Sie außerdem Widerstände zu MISO / MOSI / SCK zum vorgelagerten Master hinzufügen, damit die Kommunikation in anderen Teilen von nicht beeinträchtigt wird, wenn das Gerät nachgelagert kommuniziert (wenn es nicht als Slave ausgewählt ist) das Netzwerk (beachten Sie, dass die Anzahl der Ebenen, die Sie mithilfe von Widerständen ausführen können, begrenzt ist. Eine bessere Lösung für die Verwendung beider SPI-Ports finden Sie weiter unten).

    Der AVR-Mikrocontroller kann das MOSI-Signal bei Auswahl des Slaves automatisch in den Tri-State-Zustand versetzen und in den Slave-Modus wechseln (wenn er sich im Master befindet).

    Obwohl möglicherweise ein hierarchisches Netzwerk erforderlich ist, können die meisten Netzwerke baumartig organisiert werden, sodass dies normalerweise keine wichtige Einschränkung darstellt

  • Dies kann leicht gelockert werden, da jeder AVR-Mikrocontroller zwei separate SPI-Ports unterstützt, sodass jedes Gerät in zwei verschiedenen Netzwerken unterschiedliche Positionen haben kann.

    Wenn Sie jedoch mehrere Ebenen in Ihrem Baum / Ihrer Hierarchie benötigen (mehr als 2), ist die oben beschriebene Lösung mit Widerständen zu umständlich, um zu funktionieren. In diesem Fall sollten Sie das SPI-Netzwerk zwischen den einzelnen Ebenen des Baums ändern. Dies bedeutet, dass jedes Gerät eine Verbindung zu seinen untergeordneten Geräten in einem SPI-Netzwerk und zu seinem übergeordneten Gerät in dem anderen SPI-Netzwerk herstellt. Obwohl dies bedeutet, dass Sie nur einen einzigen Baum von Verbindungen haben, besteht der Vorteil darin, dass ein Gerät gleichzeitig mit einem seiner Kinder und seinem Eltern kommunizieren kann und Sie keine fummeligen Widerstände haben (es ist immer schwierig, die richtigen Werte auszuwählen). .

  • Durch die getrennten MOSI- und MISO-Kabel können sowohl Master als auch Slave gleichzeitig kommunizieren, wodurch sich die Geschwindigkeit potenziell um den Faktor zwei erhöht. Für die Slave-Auswahl ist für jeden zusätzlichen Slave ein zusätzlicher Pin erforderlich, dies ist jedoch keine große Belastung. Selbst für 10 verschiedene Slaves sind nur 10 zusätzliche Pins erforderlich, die problemlos auf einem typischen AVR-Mikrocontroller untergebracht werden können.

CAN wird von dem von Ihnen angegebenen AVR-Mikrocontroller nicht unterstützt. Da es andere gute Optionen gibt, ist es in diesem Fall wahrscheinlich sowieso nicht wichtig.


Die Empfehlung lautet SPI , da es schnell ist, die Verkabelung nicht zu komplex ist und keine umständlichen Pull-up-Widerstände erforderlich sind. In dem seltenen Fall, dass SPI Ihre Anforderungen nicht vollständig erfüllt (wahrscheinlich in komplizierteren Netzwerken), können Sie mehrere Optionen verwenden (z. B. beide SPI-Ports zusammen mit der Zweidrahtschnittstelle verwenden sowie einige der Mikrocontroller koppeln) mit einer USART-Schleife!)

In Ihrem Fall bedeutet SPI, dass der Mikrocontroller mit der USB-Verbindung zum Computer natürlich der Master sein kann und die entsprechenden Befehle vom Computer an jedes Slave-Gerät weiterleiten kann. Es kann auch die Aktualisierungen / Messungen von jedem Slave lesen und diese an den Computer senden.

Bei 8 MHz und einer Kabellänge von 0,5 m glaube ich nicht, dass dies zu einem Problem wird. Wenn dies jedoch der Fall ist, achten Sie besser auf die Kapazität (achten Sie darauf, dass die Masse- und Signalkabel zu nahe kommen und achten Sie auch auf die Verbindungen zwischen den verschiedenen Leitern) und auf die Signalanschlüsse. In dem unwahrscheinlichen Fall, dass dies weiterhin ein Problem darstellt, können Sie die Taktrate verringern, aber ich halte dies nicht für erforderlich.


Daumen hoch für SPI von mir
Georgebrindeiro

2
Ich bin auch ein Fan von SPI, obwohl I2C vielleicht auch eine Überlegung wert ist (vermeidet die Notwendigkeit separater CS-Leitungen für jedes Gerät). Aber CAN sollte nicht so einfach zu verwerfen sein - schließlich ist es der Autobus der Wahl, also würde ich es für die Hobby-Robotik nicht ausschließen!
Andrew

Benötigt der SPI-Bus wirklich separate CS-Leitungen vom Master zu jedem Slave? Wenn ja, wie würden Sie diesen anderen Bus nennen, der genau 4 Verbindungen zum Master benötigt, egal wie viele Slaves angeschlossen sind, der in dem Wikipedia-Artikel über SPI-Bus erwähnt wird ?
David Cary

1
+1 Für die große Resonanz bin ich altmodisch und ich liebe die 485 und im Allgemeinen Busse mit Softwareadresse, aber in diesem Fall würde ich die SPI wählen. Obwohl Sie Abstand und elektrisches Rauschen viel Aufmerksamkeit schenken würden, insbesondere wenn Ihr Bus anderen ICs mit unterschiedlicher Übertragungsgeschwindigkeit gegenübersteht: Speicher, Netzwerkkarte usw., die
Spannungsabfälle

3
Ihre Kommentare zu CAN sind nicht korrekt. CAN ist nicht irgendein 2-Draht-Bus. Ich denke, Sie verwechseln es mit I2C, das eine Höchstgeschwindigkeit von 400kbps hat. Die Höchstgeschwindigkeit von CAN beträgt 1 Mbit / s.
Rocketmagnet

5

Ich kann CAN für die Kommunikation zwischen Prozessoren nur empfehlen. Wir verwenden es in unseren Robotern mit bis zu 22 Prozessoren im selben Bus. Mit einem guten Protokolldesign können Sie ungefähr 90% der verfügbaren Bandbreite nutzen (ungefähr 640 kbit / s, wenn Sie alle Fehlerprüfungen und den Abstand zwischen Frames berücksichtigen). Wir können 10 Motoren mit 1000 Hz an einem CAN-Bus betreiben. Dies nähert sich dem Limit. Sie könnten es wahrscheinlich auf 20 Motoren drücken, wenn Sie die Daten sehr sorgfältig verpacken.

Im Allgemeinen benötigt CAN einen Transceiver-Chip für jeden Prozessor (es ist nur ein kleines 8-Pin-Gerät). Der Transceiver gibt Ihnen ein angenehmes Differenzsignal, das sehr wenig Interferenzen ausgibt, und macht es auch immun gegen Interferenzen, wenn Sie in einer Umgebung mit elektrischen Störungen arbeiten (Motoren, Magnetspulen und Funksender).

CAN-Bus-Verbindungen

Unter bestimmten Umständen ist es jedoch tatsächlich möglich, CAN ohne Transceiver zu verwenden .


EtherCAT

Wenn Sie jemals Lust haben, einen Bus mit hoher Bandbreite zu implementieren, empfehlen wir Ihnen, EtherCAT zu verwenden . Es handelt sich um einen 100-MB-Bus, der an den Ethernet-Port Ihres PCs angeschlossen werden kann. Der Bus besteht aus zwei wichtigen Teilen:

  • Die Brücke. Dadurch wird die physikalische Ethernet-Schicht in eine einfachere, kostengünstigere physikalische LVDS-Schicht umgewandelt, für die keine großen Anschlüsse, kein Phy-Chip und viele Komponenten erforderlich sind, die Ethernet selbst bietet.
  • Die Knoten. Jeder Knoten benötigt nur einen ET1200-Chip und einen Mikrocontroller.

Der PC kann große Datenmengen mit 1 kHz oder schneller zu und von den Knoten senden und empfangen. Sie können eine ganze Menge Dinge an einem einzigen EtherCAT-Bus steuern .

Hinzugefügt:

Shadow Robot Company verkauft jetzt ein nützliches EtherCAT-Bus-System namens Ronex . Damit können Sie eine ganze Reihe von E / A-Vorgängen hinzufügen, und bald werden viele andere Board-Typen eingeführt, z. B. Motorsteuerungen und hochwertige ADCs.


Was ist die Quelle für dieses Bild? Es hat CAN Highfür rote und blaue Drähte.
Ian

1

Ich weiß, dass ich einen alten Thread ausgrabe und das ist ein Thema, aber ich glaube nicht, dass Sie nur ET1200-Chips von Beckhoff bekommen können. Ich habe ihnen vor einiger Zeit eine E-Mail geschickt und wurde darauf hingewiesen, dass ich der Ethercat-Gruppe beitreten muss. Dazu musste ich nachweisen, dass ich einen Beitrag zur Gruppe leisten würde - dh indem ich Geräte baue und verkaufe, die das Ethercat-Zeug verwenden. Zu diesem (und jenem) Zeitpunkt entwickle ich noch einen Prototyp für mein Gerät (eine bürstenlose Motorsteuerung für Roboteranwendungen - derzeit wird CAN verwendet), sodass ich nichts anbieten kann (ich kann keine feste Zeit für die Fertigstellung angeben - ich arbeite noch an meinem undergrad). Ich drückte ihnen meine Enttäuschung aus. Sie sagten, nicht enttäuscht zu sein !! Ziemlich witziges Zeug! Würde ich wirklichIch würde gerne in Ethercat einsteigen, aber die ASICs scheinen für Hobbyisten oder solche ohne Unternehmen unantastbar zu sein. Dies ist auch mein erster Beitrag. Ich entschuldige mich, wenn ich die Götter verärgert habe, indem ich einen alten Beitrag ausgrabe!


Herzlich willkommen. Das Wiederbeleben eines alten Beitrags ist in Ordnung, wenn die Antwort relevant ist. Und Ihr Kommentar scheint für mich relevant zu sein ...
Andrew

Danke Kumpel. Das ist ein tolles Forum! Haben Sie aus Interesse bereits Erfahrung mit Ethercat? Kennen Sie andere Methoden, um ein Slave-Gerät zu erhalten, das für das Prototyping auf Leiterplatten geeignet ist? Ich bin bereit zu zahlen, aber im Moment erfülle ich einfach nicht die Voraussetzungen, der Gruppe beizutreten, um die Bechoff ASICs zu kaufen. Frustrierend!
Gesetz

Nicht EtherCat, nein. Ich benutze CAN (eine gute Option), LIN (meiner Meinung nach nicht so gut) und kann SPI oder I2C auf jeden Fall empfehlen
Andrew

Haben Sie es geschafft, den ET1100- oder ET1200-Chip in den Griff zu bekommen? Wenn Sie es nicht getan haben, ist jetzt eine andere Option verfügbar: der Mikrochip LAN9252, der mit dem ET1100 kompatibel ist und ziemlich gut funktioniert. Mit
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.