คุณต้องการใช้ USB สำหรับการสื่อสารกับคอมพิวเตอร์ หากคุณมีไมโครคอนโทรลเลอร์จำนวนหนึ่งคุณอาจจะเชื่อมต่อไมโครคอนโทรลเลอร์เพียงหนึ่งตัวเข้ากับคอมพิวเตอร์โดยตรง ไมโครคอนโทรลเลอร์อื่นจะต้องรับคำสั่งจากไมโครคอนโทรลเลอร์หลัก
การสื่อสารที่คุณเลือกจะขึ้นอยู่กับปัจจัยหลายประการ:
- แบนด์วิธที่ต้องการ (เราจะถือว่าคุณใช้งานด้วยความเร็ว 16MHz)
- ความซับซ้อน (การเดินสายและการเข้ารหัส)
- bi-directional หรือ master-slave
ตัวเลือกเกือบทั้งหมดมีการสนับสนุนในตัวไมโครคอนโทรลเลอร์ AVR ไม่มีตัวเลือกที่คุณอาจต้องการมากกว่าตัวเลือกในตัวซึ่งจะต้องใช้ฮาร์ดแวร์เพิ่มเติม เนื่องจากมีการสนับสนุนในตัวความซับซ้อนของซอฟแวร์จึงคล้ายกันในการที่คุณเพิ่งกำหนดค่าพอร์ต (ใช้รีจิสเตอร์) ใส่ข้อมูลเพื่อส่งในรีจิสเตอร์อื่นจากนั้นเรียกใช้การส่งบิต ข้อมูลใด ๆ ที่ได้รับจะพบในการลงทะเบียนอื่นและการขัดจังหวะจะถูกเรียกใช้เพื่อให้คุณสามารถจัดการกับมัน ไม่ว่าคุณจะเลือกตัวเลือกใดความแตกต่างเพียงอย่างเดียวก็คือการเปลี่ยนแปลงในสถานที่ลงทะเบียนและการเปลี่ยนแปลงการลงทะเบียนการกำหนดค่าบางอย่าง
USART loop มีคุณสมบัติดังต่อไปนี้:
- อัตรารับส่งข้อมูลสูงสุด CLK / 16 = 1MHz (ที่นาฬิกา 16MHz) ซึ่งเป็นอัตราการถ่ายโอนประมาณ 90KB / s
- การสื่อสารแบบสองทิศทางอย่างสมบูรณ์ (ไม่มีการกำหนดตำแหน่งของเจ้านายหรือทาส)
- ต้องใช้สายไฟแยกระหว่างไมโครคอนโทรลเลอร์แต่ละคู่ - Atmega32u4 รองรับพอร์ต USART สองพอร์ตโดย จำกัด จำนวนไมโครคอนโทรลเลอร์ที่คุณสามารถเชื่อมต่อในเครือข่ายในทางปฏิบัติ ลักษณะ)
หมายเหตุ: นี่คือสิ่งที่คุณจะใช้เพื่อรับการสื่อสารแบบ RS232 ยกเว้นว่าเนื่องจาก RS232 ต้องการ 10V จึงต้องใช้ไดรเวอร์เพื่อรับระดับแรงดันไฟฟ้าเหล่านั้น สำหรับการสื่อสารระหว่างไมโครคอนโทรลเลอร์สิ่งนี้ไม่มีประโยชน์ (มีเพียงระดับแรงดันไฟฟ้าที่เปลี่ยนไป)
RS485:
- โดยพื้นฐานแล้วคุณใช้พอร์ต USART ในโหมดที่แตกต่าง - ไม่มีประโยชน์ในแบนด์วิดท์และมันอาจทำให้การเดินสายง่ายขึ้นเล็กน้อยเท่านั้น แต่มันก็ซับซ้อน ไม่แนะนำ
อินเตอร์เฟซสองสาย:
สิ่งนี้เรียกว่า I2C ซึ่งหมายความว่าอุปกรณ์ทั้งหมดใช้สายเดียวกันสองเส้นร่วมกัน
คุณต้องมีตัวต้านทานแบบดึงขึ้นบนสายทั้งสอง
มันช้า (เนื่องจากตัวต้านทานแบบดึงขึ้นมีจำนวน จำกัด และมีความจุเพิ่มขึ้นเมื่อจำนวนอุปกรณ์เพิ่มขึ้นและความยาวสายไฟเพิ่มขึ้น) สำหรับไมโครคอนโทรลเลอร์ AVR นี้ความเร็วสูงถึง 400 kHz - ช้ากว่า USART (แต่ความเร็วนี้ขึ้นอยู่กับการจำกัดความจุของคุณ) เหตุผลก็คือแม้ว่าอุปกรณ์จะขับเคลื่อนสายข้อมูลต่ำ แต่การเปลี่ยนตรงข้ามก็ทำได้โดยให้ลวดลอยสูงอีกครั้ง (ตัวต้านทานแบบดึงขึ้น)
มันจะยิ่งช้าลงเมื่อคุณพิจารณาว่าการสื่อสารทั้งหมดแชร์แบนด์วิดท์ จำกัด ที่เท่ากัน เนื่องจากการสื่อสารทั้งหมดแชร์แบนด์วิดท์ที่ จำกัด เหมือนกันอาจมีความล่าช้าในการสื่อสารซึ่งข้อมูลจะต้องรอจนกว่าเครือข่ายจะไม่ได้ใช้งานก่อนจึงจะสามารถส่งได้ หากมีการส่งข้อมูลอื่น ๆ อย่างต่อเนื่องข้อมูลอาจถูกบล็อกไม่ให้ส่ง
มันขึ้นอยู่กับโปรโตคอลทาสต้นแบบที่ต้นแบบที่อยู่ทาสจากนั้นส่งคำสั่ง / คำขอและทาสตอบกลับในภายหลัง อุปกรณ์เดียวเท่านั้นที่สามารถสื่อสารได้ในแต่ละครั้งดังนั้นทาสจะต้องรอให้ต้นแบบเสร็จสิ้น
อุปกรณ์ใด ๆ สามารถทำหน้าที่เป็นทั้งมาสเตอร์และ / หรือทาสทำให้มันค่อนข้างยืดหยุ่น
SPI
นี่คือสิ่งที่ฉันอยากจะแนะนำ / ใช้สำหรับการสื่อสารทั่วไประหว่างไมโครคอนโทรลเลอร์
มันเป็นความเร็วสูง - สูงสุด CLK / 2 = 8MHz (สำหรับ CLK ที่ 16MHz) ทำให้เป็นวิธีที่เร็วที่สุด สามารถทำได้เนื่องจากมีสายแยกต่างหากสำหรับนาฬิกา
สายข้อมูล MOSI, MISO และ SCK นั้นถูกแชร์ผ่านเครือข่ายทั้งหมดซึ่งหมายความว่ามีการเดินสายที่ง่ายกว่า
มันเป็นรูปแบบ master-slave แต่อุปกรณ์ใด ๆ สามารถเป็น master และ / หรือ slave อย่างไรก็ตามเนื่องจากภาวะแทรกซ้อนของการเลือกทาสสำหรับการเดินสายที่ใช้ร่วมกัน (ภายในเครือข่าย) คุณควรใช้ในลักษณะแบบลำดับชั้นเท่านั้น (ต่างจากอินเตอร์เฟสแบบสองสาย) IE หากคุณจัดระเบียบอุปกรณ์ทั้งหมดไว้ในทรีอุปกรณ์ควรเป็นอุปกรณ์หลักกับลูกของมันเท่านั้นและจะเป็นทาสของอุปกรณ์แม่เท่านั้น นั่นหมายความว่าในโหมดทาสอุปกรณ์จะมีต้นแบบเดียวกันเสมอ นอกจากนี้ในการทำอย่างถูกต้องคุณต้องเพิ่มตัวต้านทานไปยัง MISO / MOSI / SCK ไปยังต้นแบบต้นน้ำเพื่อที่ว่าหากอุปกรณ์กำลังสื่อสารดาวน์สตรีม (เมื่อไม่ได้เลือกเป็นทาส) การสื่อสารจะไม่ส่งผลต่อการสื่อสารในส่วนอื่น ๆ ของ เครือข่าย (หมายเหตุจำนวนระดับที่คุณสามารถทำได้โดยใช้ตัวต้านทานมี จำกัด ดูด้านล่างสำหรับวิธีแก้ปัญหาที่ดีกว่าโดยใช้พอร์ต SPI ทั้งสอง)
ไมโครคอนโทรลเลอร์ AVR สามารถปรับสัญญาณ MOSI สามสถานะโดยอัตโนมัติเมื่อมีการเลือกสลาฟและเปลี่ยนเป็นโหมดสลาฟ (หากอยู่ในโหมด Master)
แม้ว่ามันอาจต้องใช้เครือข่ายแบบลำดับชั้น แต่เครือข่ายส่วนใหญ่สามารถจัดระเบียบในลักษณะที่เหมือนต้นไม้ดังนั้นจึงมักจะไม่ได้เป็นข้อ จำกัด ที่สำคัญ
ด้านบนสามารถผ่อนคลายได้เล็กน้อยเนื่องจากไมโครคอนโทรลเลอร์ AVR แต่ละตัวรองรับพอร์ต SPI แยกกันสองพอร์ตดังนั้นอุปกรณ์แต่ละตัวสามารถมีตำแหน่งที่แตกต่างกันในสองเครือข่ายที่แตกต่างกัน
ถ้าคุณต้องการหลาย ๆ ระดับในต้นไม้ / ลำดับชั้น (มากกว่า 2) วิธีการแก้ปัญหาข้างต้นที่ใช้ตัวต้านทานจะทำให้การทำงานมีประสิทธิภาพเกินไป ในกรณีนี้คุณควรเปลี่ยนเครือข่าย SPI ระหว่างแต่ละชั้นของต้นไม้ ซึ่งหมายความว่าอุปกรณ์แต่ละเครื่องจะเชื่อมต่อกับลูก ๆ ของมันบนเครือข่าย SPI หนึ่งเครือข่ายและผู้ปกครองในเครือข่าย SPI อื่น แม้ว่ามันจะหมายความว่าคุณมีเพียงต้นไม้เดียวของการเชื่อมต่อข้อดีคืออุปกรณ์สามารถสื่อสารกับทั้งลูกและผู้ปกครองในเวลาเดียวกันและคุณไม่ได้มีตัวต้านทานเที่ยวยุ่งยิ่ง (ยากที่จะเลือกค่าที่เหมาะสมเสมอ) .
เนื่องจากมันมีสาย MOSI และ MISO ที่แยกจากกันทั้งมาสเตอร์และทาสสามารถสื่อสารได้ในเวลาเดียวกันทำให้มันมีความเป็นไปได้ที่จะมีความเร็วเพิ่มขึ้นสองเท่า จำเป็นต้องใช้พินพิเศษสำหรับตัวเลือกทาสสำหรับสลาฟเพิ่มเติมแต่ละตัว แต่นี่ไม่ใช่ภาระใหญ่แม้แต่ทาสที่แตกต่างกัน 10 ตัวก็ต้องใช้พินพิเศษ 10 ตัวเท่านั้นซึ่งสามารถรองรับได้ง่ายบนไมโครคอนโทรลเลอร์ AVR ทั่วไป
CANไม่รองรับโดยไมโครคอนโทรลเลอร์ AVR ที่คุณระบุ เนื่องจากมีตัวเลือกที่ดีอื่น ๆ จึงอาจไม่สำคัญในกรณีนี้อย่างไรก็ตาม
คำแนะนำคือSPIเนื่องจากมันเร็วการเดินสายไม่ซับซ้อนเกินไปและไม่ต้องการตัวต้านทานแบบดึงขึ้นเที่ยว ในกรณีที่ไม่ค่อยเกิดขึ้นที่ SPI ไม่ตอบสนองความต้องการของคุณอย่างเต็มที่ (อาจเป็นเครือข่ายที่ซับซ้อนกว่า) คุณสามารถใช้ตัวเลือกได้หลายตัวเลือก (เช่นใช้พอร์ต SPI ทั้งสองพร้อมกับอินเทอร์เฟซแบบสายสองเส้น ใช้ลูป USART!)
ในกรณีของคุณการใช้ SPI หมายความว่าโดยปกติแล้วไมโครคอนโทรลเลอร์ที่มีการเชื่อมต่อ USB กับคอมพิวเตอร์สามารถเป็นอุปกรณ์หลักและสามารถส่งคำสั่งที่เกี่ยวข้องจากคอมพิวเตอร์ไปยังอุปกรณ์สลาฟแต่ละเครื่องได้ นอกจากนี้ยังสามารถอ่านการอัปเดต / การวัดจากทาสแต่ละคนและส่งไปยังคอมพิวเตอร์
ที่ 8MHz และความยาวสาย 0.5 ม. ฉันไม่คิดว่ามันจะเป็นปัญหา แต่ถ้าเป็นเช่นนั้นให้ลองระมัดระวังความจุมากขึ้น (เก็บสายดินและสายสัญญาณไว้ใกล้เกินไปและระวังการเชื่อมต่อระหว่างตัวนำที่แตกต่างกัน) และสัญญาณการสิ้นสุด ในกรณีที่ไม่น่าเป็นไปได้ที่จะยังคงมีปัญหาอยู่คุณสามารถลดอัตรานาฬิกา แต่ฉันไม่คิดว่าจำเป็น