Giao diện máy tính tốc độ cao với Arduino


10

Tôi đang lên kế hoạch cho một dự án với Arduino bao gồm xử lý rất nhiều yêu cầu từ máy tính chủ, và tốc độ tối đa 115200 tiêu chuẩn qua nối tiếp là không đủ. Tôi muốn có thể có được song công hoàn toàn 1Mbps nếu có thể, nhưng 400Kbps + song công hoàn toàn sẽ được chấp nhận. Tôi đang sử dụng Arduino Do, vì vậy nó có thể xử lý tốc độ liên lạc cao hơn đáng kể.

Có cách nào để tăng đáng kể tốc độ truyền qua nối tiếp, hoặc có tùy chọn thứ hai tôi có thể thực hiện về mặt giao tiếp với máy tính ở tốc độ cao hơn không?


Các thiết bị FTDI FT 232 có thể lên tới 3 Mb / giây mà không gặp sự cố, vì vậy nếu bạn có bộ chuyển đổi nối tiếp USB dựa trên FTDI, đó sẽ là một lựa chọn dễ dàng. Tôi thực sự mong muốn những người Arduino đã gắn bó với họ, thay vào đó là ATmega16U2.
Sói Connor

Có thể UART sẽ hỗ trợ bitrate 1Mbps, nhưng bạn cũng cần vi điều khiển cung cấp dữ liệu cho nó. Nó có thể được thực hiện, nhưng bạn sẽ đạt đến mức tối đa khá dễ dàng.
jippie

Nếu bạn đang đập một chiếc AVR với "rất nhiều yêu cầu" ở tốc độ 400 kbps, tôi sẽ ngạc nhiên nếu nó có nhiều thời gian rảnh rỗi để làm bất cứ điều gì sử dụng.
Nick T

Câu trả lời:


8

Bạn hoàn toàn có thể đạt được trong phạm vi Mbps với Arduino, đặc biệt là với Do của bạn. Màn hình nối tiếp chỉ hỗ trợ baud lên tới 115200, nhưng bạn có thể sử dụng một cửa sổ đầu cuối riêng biệt cho phép bạn đặt baud của mình thành bất cứ thứ gì bạn thích.

Để biết thêm một chút thông tin, hãy xem Chủ đề này trên diễn đàn Arduino.

Về mặt thiết lập, trên Arduino, nó dễ dàng Serial.begin(1000000);đến mức đó. Đó là tất cả về thiết lập của thiết bị mà bạn muốn liên lạc và những gì nó có thể xử lý.


Có nối tiếp tiêu chuẩn qua trình điều khiển USB hỗ trợ tốc độ như vậy? Tôi sẽ nói chuyện với nó thông qua một kịch bản, không phải màn hình nối tiếp trong IDE.
Đa thức

Tôi tin là có. Nếu bạn đang sử dụng một tập lệnh, bạn nên có hình dạng tốt. Phần cứng UART trên Arduino Do giống như UNO; nó sử dụng ATmega16U để giao tiếp với serial, có khả năng tối thiểu 1Mbps. Trình điều khiển nối tiếp qua USB cũng hỗ trợ tốc độ đó.
Jay Greco

Để kiểm tra, bạn luôn có thể thiết lập một bản phác thảo kiểm tra nhanh. Đặt baud thành một cái gì đó cao hơn mặc định và sử dụng một thiết bị đầu cuối được thiết lập tại cùng một baud. Nếu dữ liệu đi qua, bạn biết rằng Arduino phù hợp với tốc độ đó.
Jay Greco

Về mặt kỹ thuật, điều đó thực sự không quan trọng với những gì PC chủ yêu cầu về tốc độ baud, mà chỉ là bộ xử lý Arduino 16U và chính đồng ý - dù sao thì bên USB thực sự chạy nhanh hơn nhiều so với tốc độ truyền nối tiếp và tất cả PC không nói với 16U tốc độ nào để chạy giao diện nối tiếp của nó. Ngoài ra, nếu nhìn vào sự không chính xác trong các ước số baud, hãy nhớ rằng điều thực sự quan trọng là chúng khớp giữa hai chip trên bảng của bạn, chứ không phải chúng phù hợp với một số mục tiêu truyền thống. Tận dụng tối đa điều đó đến mức tối đa có thể yêu cầu phần sụn tùy chỉnh cho 16U.
Chris Stratton

1

Tôi sẽ xem xét việc viết firmware tùy chỉnh cho Atmega16u2 đang thực hiện giao tiếp USB. Con chip đó có thể nói USB tốc độ đầy đủ (tốc độ tín hiệu lên tới 12 Mbit) và cổng đầu ra SPI của chip đó có sẵn tiện lợi trên tiêu đề ICSP. Kết nối nó với đầu vào SPI của Arduino (cũng có sẵn trên tiêu đề ICSP của nó) và bạn có thể chạy SPI tại, tôi nghĩ, 4 Mbit / s (4 xung nhịp CPU mỗi bit.)

Atmegas trên mega (16u2 và 128) có thể chạy cổng nối tiếp của chúng với tốc độ lên tới 2 Mbit / s. Nếu bạn viết chương trình cơ sở tùy chỉnh cho 16u2, bạn cũng có thể sử dụng USART nối tiếp không đồng bộ đã có sẵn.

Trong cả hai trường hợp này, bạn có thể sẽ mất khả năng lập trình cổng nối tiếp, vì vậy bạn sẽ phải sử dụng một lập trình viên riêng biệt dựa trên USB.

Dự án LUFA có rất nhiều chương trình mẫu và thư viện hữu ích để thực sự nói USB trên chip Atmega. "Libusb" là một thư viện thuận tiện để nói chuyện trực tiếp với các thiết bị USB, thay vì phải dựa vào mô phỏng nối tiếp.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.