Szybki interfejs komputerowy z Arduino


10

Planuję projekt z Arduino, który wymaga obsługi dużej liczby żądań z komputera hosta, a standardowa maksymalna prędkość transmisji w standardzie 115200 nie jest wystarczająca. Chciałbym mieć możliwość uzyskania pełnego dupleksu 1 Mb / s, jeśli to możliwe, ale 400 Kb / s + pełny dupleks byłoby dopuszczalne. Używam Arduino Due, więc powinien być w stanie obsłużyć znacznie wyższe prędkości komunikacji.

Czy istnieje sposób na znaczne zwiększenie szybkości transmisji w stosunku do szeregowego, czy też jest druga opcja, jeśli mogę skorzystać z połączenia z komputerem przy wyższych prędkościach?


Urządzenia FTDI FT232 mogą bez problemu zwiększać prędkość do 3 Mb / s, więc jeśli masz konwerter USB-szeregowy oparty na FTDI, byłaby to łatwa opcja. Naprawdę chciałbym, żeby ludzie Arduino utknęli z nimi, a nie ATmega16U2.
Connor Wolf

Być może UART będzie obsługiwał przepływności 1 Mb / s, ale potrzebny jest również mikrokontroler, który przesyła dane. Można to zrobić, ale dość łatwo osiągniesz maksimum.
jippie

Jeśli zatrzaskujesz AVR „dużą ilością żądań” przy prędkości 400 kb / s, byłbym zaskoczony, gdyby miał dużo wolnego czasu, aby cokolwiek zrobić.
Nick T

Odpowiedzi:


8

Zdecydowanie można się dostać w zakresie Mbps z Arduino, zwłaszcza z Due. Monitor szeregowy obsługuje tylko bity do 115200, ale możesz użyć osobnego okna terminala, które pozwala ustawić bod na dowolne.

Aby uzyskać więcej informacji, zobacz Ten wątek na forum Arduino.

Jeśli chodzi o konfigurację, na Arduino jest to tak proste, jak Serial.begin(1000000);i do tego stopnia. Chodzi o konfigurację urządzenia, z którym chcesz się komunikować, i jego obsługi.


Czy standardowy sterownik szeregowy przez USB obsługuje takie prędkości? Będę rozmawiać z nim za pomocą skryptu, a nie szeregowego monitora w IDE.
Wielomian

Wierzę, że tak. Jeśli używasz skryptu, powinieneś być w dobrej formie. Sprzęt UART w Arduino Due jest taki sam jak UNO; wykorzystuje ATmega16U do połączenia z portem szeregowym, który jest w stanie co najmniej 1 Mb / s. Sterownik szeregowy przez USB powinien również obsługiwać tę szybkość.
Jay Greco

Aby przetestować, zawsze można skonfigurować szybki szkic testowy. Ustaw prędkość transmisji na wartość wyższą niż domyślna i użyj terminala ustawionego na tę samą prędkość. Jeśli dane przejdą, wiesz, że Arduino jest dobry do tej prędkości.
Jay Greco

Technicznie rzecz biorąc, tak naprawdę nie ma znaczenia, o co komputer hosta prosi w zakresie szybkości transmisji, ale raczej tylko to, że 16U i główny procesor Arduino się zgadzają - rzeczywista strona USB działa znacznie szybciej niż prędkość transmisji szeregowej, i cały komputer mówi 16U, z jaką prędkością uruchomić interfejs szeregowy. Ponadto, patrząc na niedokładności w dzielnikach baud, pamiętaj, że tak naprawdę ważne jest to, że pasują do siebie dwa żetony na planszy, a nie, że pasują one do jakiegoś tradycyjnego celu. Pełne wykorzystanie tego do maksimum może wymagać niestandardowego oprogramowania układowego dla 16U.
Chris Stratton

1

Chciałbym napisać niestandardowe oprogramowanie dla Atmega16u2, które obsługuje interfejs USB. Ten układ może mówić z pełną prędkością USB (prędkość sygnału do 12 Mbit), a port wyjściowy SPI tego układu jest dogodnie dostępny w nagłówku ICSP. Podłącz to do wejścia SPI Arduino (dostępnego również w nagłówku ICSP) i możesz uruchomić SPI przy, jak sądzę, 4 Mbit / s (4 zegary procesora na bit).

Atmegas na mega (16u2 i 128) może obsługiwać port szeregowy z prędkością do 2 Mbit / s. Jeśli napiszesz niestandardowe oprogramowanie układowe dla 16u2, możesz również użyć asynchronicznego szeregowego USART, który już tam jest.

W obu przypadkach prawdopodobnie stracisz programowalność portu szeregowego, więc będziesz musiał użyć oddzielnego programatora opartego na USB.

Projekt LUFA ma wiele przykładowych programów i pomocnych bibliotek do mówienia USB na układzie Atmega. „libusb” to wygodna biblioteka do bezpośredniej rozmowy z urządzeniami USB, bez konieczności polegania na emulacji szeregowej.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.