Hochgeschwindigkeits-Computerschnittstelle mit einem Arduino

10

Ich plane ein Projekt mit einem Arduino, bei dem viele Anforderungen von einem Host-Computer verarbeitet werden, und der standardmäßige maximale Baud-Wert von 115200 gegenüber seriell reicht nicht aus. Ich möchte in der Lage sein, wenn möglich 1 Mbit / s Vollduplex zu erhalten, aber 400 Kbit / s + Vollduplex wären akzeptabel. Ich verwende ein Arduino Due, daher sollte es in der Lage sein, deutlich höhere Kommunikationsgeschwindigkeiten zu bewältigen.

Gibt es eine Möglichkeit, die Baudrate gegenüber der seriellen zu erhöhen, oder gibt es eine zweite Option, die ich für die Anbindung an einen Computer mit höheren Geschwindigkeiten wählen kann?

Polynom
quelle
FTDI FT232-Geräte können problemlos bis zu 3 Mbit / s erreichen. Wenn Sie also einen FTDI-basierten USB-Seriell-Konverter haben, ist dies eine einfache Option. Ich wünschte wirklich, die Arduino-Leute wären bei ihnen geblieben, eher als der ATmega16U2.
Connor Wolf
Möglicherweise unterstützt der UART 1-Mbit / s-Bitraten, aber Sie benötigen auch den Mikrocontroller, um ihn mit Daten zu versorgen. Es kann getan werden, aber Sie werden ziemlich leicht ein Maximum erreichen.
Jippie
Wenn Sie einen AVR mit "vielen Anfragen" bei 400 kbit / s zuschlagen, würde ich mich wundern, wenn er viel Zeit hat, um irgendetwas zu tun.
Nick T

Antworten:

8

Es ist definitiv möglich, mit einem Arduino im Mbit / s-Bereich aufzustehen, besonders mit Ihrem Due. Der serielle Monitor unterstützt nur Bauds bis 115200, Sie können jedoch ein separates Terminalfenster verwenden, in dem Sie Ihren Baud auf einen beliebigen Wert einstellen können.

Weitere Informationen finden Sie unter Dieser Thread im Arduino-Forum.

In Bezug auf das Setup ist es auf dem Arduino so einfach wie Serial.begin(1000000);oder in diesem Ausmaß. Es geht um die Einrichtung des Geräts, mit dem Sie kommunizieren möchten, und darum, wie es damit umgehen kann.

Jay Greco
quelle
Unterstützt der Standard-Seriell-über-USB-Treiber solche Geschwindigkeiten? Ich werde über ein Skript mit ihm sprechen, nicht über den seriellen Monitor in der IDE.
Polynom
Ich glaube schon. Wenn Sie ein Skript verwenden, sollten Sie in guter Verfassung sein. Die UART-Hardware auf dem Arduino Due ist dieselbe wie auf der UNO. Es verwendet den ATmega16U als Schnittstelle zur seriellen Schnittstelle, die mindestens 1 Mbit / s unterstützt. Der Serial-over-USB-Treiber sollte diese Rate ebenfalls unterstützen.
Jay Greco
Zum Testen können Sie jederzeit eine schnelle Testskizze erstellen. Stellen Sie den Baud auf einen höheren Wert als den Standard ein und verwenden Sie ein Terminal, das am selben Baud eingerichtet ist. Wenn die Daten eingehen, wissen Sie, dass der Arduino bis zu diesem Baud gut ist.
Jay Greco
Technisch gesehen spielt es keine Rolle, was der Host-PC in Bezug auf die Baudrate verlangt, sondern nur, dass der 16U- und der Haupt-Arduino-Prozessor übereinstimmen - die tatsächliche USB-Seite läuft ohnehin viel schneller als die serielle Baudrate und der gesamte PC teilt dem 16U mit, mit welcher Geschwindigkeit seine serielle Schnittstelle ausgeführt werden soll. Wenn Sie sich Ungenauigkeiten in den Baud-Teilern ansehen, denken Sie daran, dass es wirklich darauf ankommt, dass sie zwischen den beiden Chips auf Ihrem Board übereinstimmen und nicht, dass sie einem traditionellen Ziel entsprechen. Um dies maximal nutzen zu können, ist möglicherweise eine benutzerdefinierte Firmware für die 16U erforderlich.
Chris Stratton
1

Ich würde versuchen, eine benutzerdefinierte Firmware für den Atmega16u2 zu schreiben, der die USB-Schnittstelle übernimmt. Dieser Chip kann USB mit voller Geschwindigkeit (bis zu 12 Mbit Signalgeschwindigkeit) sprechen, und der SPI-Ausgangsanschluss dieses Chips ist bequem über den ICSP-Header verfügbar. Schließen Sie das an den SPI-Eingang des Arduino an (auch im ICSP-Header verfügbar), und Sie können SPI mit 4 Mbit / s (4 CPU-Takte pro Bit) ausführen.

Die Atmegas auf dem Mega (16u2 und 128) können ihre serielle Schnittstelle mit bis zu 2 Mbit / s betreiben. Wenn Sie eine benutzerdefinierte Firmware für den 16u2 schreiben, können Sie auch den bereits vorhandenen asynchronen seriellen USART verwenden.

In beiden Fällen verlieren Sie wahrscheinlich die Programmierbarkeit der seriellen Schnittstelle, sodass Sie einen USB-basierten separaten Programmierer verwenden müssen.

Das LUFA-Projekt enthält viele Beispielprogramme und hilfreiche Bibliotheken zum tatsächlichen Sprechen von USB auf einem Atmega-Chip. "libusb" ist eine praktische Bibliothek, mit der Sie direkt mit USB-Geräten kommunizieren können, anstatt sich auf die serielle Emulation verlassen zu müssen.

Jon Watte
quelle
0

Es gibt einige Ergebnisse , die von Nutzen sein können , hier .

Eric Gunnerson
quelle