อินเตอร์เฟซคอมพิวเตอร์ความเร็วสูงพร้อม Arduino


10

ฉันกำลังวางแผนโครงการกับ Arduino ที่เกี่ยวข้องกับการจัดการคำขอจำนวนมากจากโฮสต์คอมพิวเตอร์และมาตรฐานการรับส่งข้อมูลสูงสุด 115200 ผ่านอนุกรมไม่เพียงพอ ฉันต้องการรับเพล็กซ์เต็มรูปแบบ 1Mbps ถ้าเป็นไปได้ แต่ 400Kbps + เพล็กซ์เต็มรูปแบบจะเป็นที่ยอมรับได้ ฉันใช้ Arduino Due ดังนั้นมันควรจะสามารถรับมือกับความเร็วในการสื่อสารที่สูงขึ้นได้อย่างมาก

มีวิธีใดที่จะเพิ่มอัตรา baud ผ่านทางอนุกรมอย่างมีนัยสำคัญหรือมีตัวเลือกที่สองที่ฉันสามารถทำได้ในแง่ของการเชื่อมต่อกับคอมพิวเตอร์ด้วยความเร็วสูงขึ้นหรือไม่?


อุปกรณ์ FTDI FT232 สามารถไปได้ถึง 3 Mbps โดยไม่มีปัญหาดังนั้นหากคุณมีตัวแปลงอนุกรม USB ที่ใช้ FTDI นั่นจะเป็นตัวเลือกที่ง่าย ฉันอยากให้คน Arduino ติดอยู่กับพวกเขาจริง ๆ แล้วก็เป็น ATmega16U2
Connor Wolf

บางที UART จะรองรับบิตเรต 1Mbps แต่คุณต้องไมโครคอนโทรลเลอร์ส่งข้อมูลด้วย สามารถทำได้ แต่คุณจะถึงจุดสูงสุดได้อย่างง่ายดาย
jippie

หากคุณกระแทก AVR ด้วย "คำขอจำนวนมาก" ที่ความเร็ว 400 kbps ฉันจะประหลาดใจหากมีเวลาเหลือเฟือที่จะทำสิ่งใด
Nick T

คำตอบ:


8

เป็นไปได้แน่นอนที่จะได้รับช่วง Mbps ด้วย Arduino โดยเฉพาะกับ Due ของคุณ มอนิเตอร์แบบอนุกรมรองรับ baud สูงสุดถึง 115200 แต่คุณสามารถใช้หน้าต่างเทอร์มินัลแยกต่างหากซึ่งช่วยให้คุณสามารถตั้งค่า baud ของคุณเป็นอะไรก็ได้ที่คุณชอบ

สำหรับข้อมูลเพิ่มเติมเล็กน้อยดูหัวข้อนี้ในฟอรัม Arduino

ในแง่ของการตั้งค่าบน Arduino มันง่ายเหมือนSerial.begin(1000000);หรือเท่านั้น ทุกอย่างเกี่ยวกับการตั้งค่าอุปกรณ์ที่คุณต้องการสื่อสารด้วยและสิ่งที่สามารถจัดการได้


อนุกรมมาตรฐานผ่านไดรเวอร์ USB รองรับความเร็วเช่นนี้หรือไม่? ฉันจะพูดกับมันผ่านสคริปต์ไม่ใช่จอแสดงผลแบบอนุกรมใน IDE
พหุนาม

ฉันเชื่อว่ามันเป็นเช่นนั้น หากคุณใช้สคริปต์คุณควรมีรูปร่างที่ดี ฮาร์ดแวร์ UART บน Arduino Due เหมือนกับ UNO มันใช้ ATmega16U เพื่อเชื่อมต่อกับซีเรียลซึ่งมีความสามารถอย่างน้อย 1Mbps ไดรเวอร์อนุกรมผ่าน USB ควรรองรับอัตราดังกล่าวด้วย
Jay Greco

ในการทดสอบคุณสามารถตั้งค่าแบบร่างการทดสอบอย่างรวดเร็วได้เสมอ ตั้งค่า baud ให้อยู่ในระดับที่สูงกว่าค่าเริ่มต้นและใช้เทอร์มินัลตั้งค่าที่ baud เดียวกัน หากข้อมูลผ่านเข้ามาคุณจะรู้ว่า Arduino นั้นดีสำหรับ baud นั้น
Jay Greco

ในทางเทคนิคแล้วมันไม่สำคัญว่าพีซีโฮสต์จะถามในเรื่องอัตรารับส่งข้อมูล แต่เพียงว่าโปรเซสเซอร์ 16U และ Arduino หลักเห็นด้วย - ด้าน USB จริงทำงานเร็วกว่าอัตรารับส่งข้อมูลแบบอนุกรมและพีซีทั้งหมด ไม่บอก 16U ว่าความเร็วในการรันอินเตอร์เฟสแบบอนุกรมที่ นอกจากนี้หากดูที่ความไม่ถูกต้องในตัวหาร baud โปรดจำไว้ว่าสิ่งที่สำคัญจริงๆคือพวกเขาจับคู่ระหว่างชิปทั้งสองบนกระดานของคุณไม่ใช่ว่าพวกเขาตรงกับเป้าหมายดั้งเดิม ใช้ประโยชน์อย่างเต็มที่จนสูงสุดอาจต้องใช้เฟิร์มแวร์ที่กำหนดเองสำหรับ 16U
Chris Stratton

1

ฉันจะพิจารณาเขียนเฟิร์มแวร์ที่กำหนดเองสำหรับ Atmega16u2 ที่กำลังทำการเชื่อมต่อ USB ชิปนั้นสามารถพูด USB ความเร็วเต็ม (สูงสุด 12 Mbit สัญญาณ) และพอร์ตเอาต์พุต SPI ของชิปนั้นมีอยู่ในส่วนหัวของ ICSP ขอให้ใส่อินพุต SPI ของ Arduino (มีให้ที่หัว ICSP ด้วย) และคุณสามารถเรียกใช้ SPI ได้ที่ฉันคิดว่า 4 Mbit / s (4 นาฬิกา CPU ต่อบิต)

Atmegas บน mega (16u2 และ 128) สามารถเรียกใช้พอร์ตอนุกรมได้สูงสุด 2 Mbit / s หากคุณเขียนเฟิร์มแวร์ที่กำหนดเองสำหรับ 16u2 คุณสามารถใช้ซีเรียล USART แบบอะซิงโครนัสที่มีอยู่แล้วได้

ในทั้งสองกรณีนี้คุณอาจสูญเสียความสามารถในการโปรแกรมพอร์ตอนุกรมดังนั้นคุณจะต้องใช้โปรแกรมเมอร์แยกต่างหากที่ใช้ USB

โครงการ LUFA มีโปรแกรมตัวอย่างจำนวนมากและห้องสมุดที่เป็นประโยชน์สำหรับการพูด USB จริงบนชิป Atmega "libusb" เป็นไลบรารีที่สะดวกในการพูดคุยกับอุปกรณ์ USB โดยตรงแทนที่จะต้องพึ่งพาการจำลองแบบอนุกรม


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.