Interface de computador de alta velocidade com um Arduino

10

Estou planejando um projeto com um Arduino que envolve lidar com muitas solicitações de um computador host, e o baud máximo máximo padrão de 115200 sobre serial não é suficiente. Eu gostaria de poder obter 1Mbps full duplex, se possível, mas 400Kbps + full duplex seria aceitável. Estou usando um Arduino Due, para que ele possa lidar com velocidades de comunicação significativamente mais altas.

Existe uma maneira de aumentar significativamente a taxa de transmissão em série ou existe uma segunda opção que eu possa escolher em termos de interface com um computador em velocidades mais altas?

Polinomial
fonte
Os dispositivos FTDI FT232 podem subir até 3 Mbps sem problemas; portanto, se você tiver um conversor USB-serial baseado em FTDI, seria uma opção fácil. Eu realmente gostaria que o pessoal do Arduino tivesse ficado com eles, e não com o ATmega16U2.
Connor Wolf
Talvez o UART suporte taxas de bits de 1Mbps, mas você também precisa do microcontrolador para alimentá-lo com dados. Isso pode ser feito, mas você atingirá o máximo facilmente.
Jippie
Se você estiver batendo um AVR com "muitas solicitações" a 400 kbps, eu ficaria surpreso se ele tiver muito tempo livre para fazer alguma coisa útil.
Nick T

Respostas:

8

Definitivamente, é possível subir na faixa de Mbps com um Arduino, especialmente com o Due. O monitor serial suporta apenas bauds de até 115200, mas você pode usar uma janela de terminal separada que permite definir o baud para o que quiser.

Para um pouco mais de informação, consulte Este tópico no fórum do Arduino.

Em termos de configuração, no Arduino é tão fácil quanto Serial.begin(1000000);ou nessa extensão. É tudo sobre a configuração do dispositivo com o qual você deseja se comunicar e com o que ele pode lidar.

Jay Greco
fonte
O driver serial via USB padrão suporta essas velocidades? Vou falar com ele por meio de um script, não pelo monitor serial no IDE.
Polinomial)
Eu acredito que sim. Se você estiver usando um script, deverá estar em boa forma. O hardware UART no Arduino Due é o mesmo que o UNO; ele usa o ATmega16U para fazer interface com serial, capaz de pelo menos 1 Mbps. O driver serial sobre USB também deve suportar essa taxa.
Jay Greco
Para testar, você sempre pode configurar um esboço de teste rápido. Defina o baud para algo mais alto que o padrão e use um terminal configurado no mesmo baud. Se os dados forem obtidos, você saberá que o Arduino está preparado para essa transmissão.
Jay Greco
Tecnicamente, não importa realmente o que o PC host solicita em termos de taxa de transmissão, mas apenas que o 16U e o processador Arduino principal concordam - o lado USB real roda muito mais rápido que a taxa de transmissão serial de qualquer maneira, e todo o PC faz é dizer aos 16U em que velocidade executar sua interface serial. Além disso, se observar imprecisões nos divisores de transmissão, lembre-se de que o que realmente importa é que elas correspondam entre as duas fichas no seu tabuleiro, não que correspondam a algum objetivo tradicional. Aproveitar totalmente isso ao máximo pode exigir firmware personalizado para a 16U.
Chris Stratton
1

Eu gostaria de escrever um firmware personalizado para o Atmega16u2 que faz a interface USB. Esse chip pode falar com velocidade máxima de USB (velocidade de sinal de até 12 Mbit) e a porta de saída SPI desse chip está convenientemente disponível no cabeçalho do ICSP. Conecte-o à entrada SPI do Arduino (também disponível no cabeçalho ICSP) e você poderá executá-lo a, penso, 4 Mbit / s (4 relógios de CPU por bit).

O Atmegas no mega (16u2 e 128) pode executar sua porta serial em até 2 Mbit / s. Se você escreve um firmware personalizado para o 16u2, também pode usar o USART serial assíncrono que já está lá.

Em ambos os casos, você provavelmente perderá a capacidade de programação da porta serial, portanto precisará usar um programador separado baseado em USB.

O projeto LUFA possui muitos programas de amostra e bibliotecas úteis para realmente falar USB em um chip Atmega. "libusb" é uma biblioteca conveniente para conversar diretamente com dispositivos USB, em vez de depender da emulação serial.

Jon Watte
fonte
0

Existem alguns resultados que podem ser úteis aqui .

Eric Gunnerson
fonte