Interface informatique haute vitesse avec un Arduino


10

Je prévois un projet avec un Arduino qui implique de traiter un grand nombre de demandes depuis un ordinateur hôte, et le baud maximum standard 115200 en série n'est pas suffisant. J'aimerais pouvoir obtenir un duplex intégral de 1 Mbps si possible, mais 400 Ko / s + duplex intégral seraient acceptables. J'utilise un Arduino Due, il devrait donc être capable de gérer des vitesses de communication nettement plus élevées.

Existe-t-il un moyen d'augmenter considérablement le débit en bauds par rapport à la série, ou y a-t-il une deuxième option que je peux choisir en termes d'interfaçage avec un ordinateur à des vitesses plus élevées?


Les appareils FTDI FT232 peuvent aller jusqu'à 3 Mbps sans problème, donc si vous avez un convertisseur série USB basé sur FTDI, ce serait une option facile. Je souhaite vraiment que les Arduino soient restés avec eux, plutôt que l'ATmega16U2.
Connor Wolf

Peut-être que l'UART prendra en charge les débits binaires de 1 Mbps, mais vous avez également besoin du microcontrôleur pour l'alimenter en données. Cela peut être fait, mais vous atteindrez un maximum assez facilement.
jippie

Si vous claquez un AVR avec "beaucoup de demandes" à 400 kbps, je serais étonné qu'il ait beaucoup de temps pour faire quoi que ce soit d'utilisation.
Nick T

Réponses:


8

Il est certainement possible de monter dans la gamme Mbps avec un Arduino, en particulier avec votre Due. Le moniteur série ne prend en charge que les bauds jusqu'à 115200, mais vous pouvez utiliser une fenêtre de terminal distincte qui vous permet de régler votre baud sur ce que vous voulez.

Pour un peu plus d'informations, voir Ce fil sur le forum Arduino.

En termes de configuration, sur l'Arduino, c'est aussi simple que Serial.begin(1000000);dans cette mesure. Il s'agit de la configuration de l'appareil avec lequel vous souhaitez communiquer et de ce qu'il peut gérer.


Le pilote série sur USB standard prend-il en charge ces vitesses? Je vais lui parler via un script, pas le moniteur série dans l'IDE.
Polynôme

Je crois que oui. Si vous utilisez un script, vous devriez être en bonne forme. Le matériel UART sur l'Arduino Due est le même que l'UNO; il utilise l'ATmega16U pour s'interfacer avec la série, qui est capable d'au moins 1 Mbps. Le pilote série sur USB devrait également prendre en charge ce taux.
Jay Greco

Pour tester, vous pouvez toujours configurer une esquisse de test rapide. Réglez le baud sur quelque chose de plus élevé que celui par défaut et utilisez un terminal configuré sur le même baud. Si les données transitent, vous savez que l'Arduino est à la hauteur de ce baud.
Jay Greco

Techniquement, peu importe ce que le PC hôte demande en termes de débit en bauds, mais seulement que le 16U et le processeur Arduino principal sont d'accord - le côté USB réel fonctionne de toute façon beaucoup plus rapidement que le débit en bauds série, et tout le PC est de dire au 16U à quelle vitesse exécuter son interface série. De plus, si vous regardez les inexactitudes dans les diviseurs en bauds, rappelez-vous que ce qui compte vraiment, c'est qu'elles correspondent entre les deux puces de votre carte, et non qu'elles correspondent à un objectif traditionnel. Tirer pleinement parti de ce maximum peut nécessiter un micrologiciel personnalisé pour le 16U.
Chris Stratton

1

J'examinerais la possibilité d'écrire un micrologiciel personnalisé pour l'Atmega16u2 qui fait l'interface USB. Cette puce peut parler USB pleine vitesse (jusqu'à 12 Mbit de vitesse de signal) et le port de sortie SPI de cette puce est facilement disponible sur l'en-tête ICSP. Accrochez-le à l'entrée SPI de l'Arduino (également disponible sur son en-tête ICSP) et vous pouvez exécuter SPI à, je pense, 4 Mbit / s (4 horloges CPU par bit.)

Les Atmegas sur le méga (16u2 et 128) peuvent exécuter leur port série jusqu'à 2 Mbit / s. Si vous écrivez un micrologiciel personnalisé pour le 16u2, vous pouvez également utiliser l'USART série asynchrone qui existe déjà.

Dans ces deux cas, vous perdrez probablement la programmabilité du port série, vous devrez donc utiliser un programmateur séparé basé sur USB.

Le projet LUFA propose de nombreux exemples de programmes et des bibliothèques utiles pour réellement parler USB sur une puce Atmega. "libusb" est une bibliothèque pratique pour parler directement aux périphériques USB, plutôt que d'avoir à s'appuyer sur l'émulation série.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.