ฉันต้องการเริ่มต้นใช้งานระบบที่ประกอบด้วย N microcontrollers (N> = 2 MCUs) แต่ฉันต้องการทราบถึงความเป็นไปได้ที่จะให้พวกเขาสื่อสารกัน
โดยอุดมคติแล้วไมโครคอนโทรลเลอร์ (N-1) จะอยู่ภายในบ้านทำหน้าที่เป็นลูกค้าในขณะที่ตัวสุดท้าย ("เซิร์ฟเวอร์") หนึ่งตัวเชื่อมต่อกับพีซีผ่านทาง USB ปัญหาที่ฉันมีตอนนี้คือวิธีการเชื่อมต่อไมโครคอนโทรลเลอร์ (N-1) เหล่านี้เข้ากับ "เซิร์ฟเวอร์" ลูกค้า MCUs ดำเนินการง่ายมากดังนั้นมันอาจจะไม่เป็นทางออกที่ดีที่จะใช้อาวุธให้ทำงานง่ายๆเช่นเพียงเพราะพวกเขาให้ CAN / PHY-MAC
การสื่อสารจะไม่เกิดขึ้นมากกว่าหนึ่งครั้งทุกๆสองสามนาทีสำหรับอุปกรณ์ส่วนใหญ่และตามความต้องการของผู้อื่น ความเร็วไม่สำคัญมาก (ข้อความสั้น): 1 Mbit / s ฉันคิดว่าเป็นวิธีที่เกินราคาสำหรับวัตถุประสงค์ของฉัน
MCUs ที่ฉันวางแผนจะใช้มีดังต่อไปนี้
- Atmel AVR Tiny / Mega
- TI MSP430
- ARM Cortex M3 / M4
- (อาจเป็นไปได้ Atmel AVR UC3 - 32-bit)
ฉันต้องการหลีกเลี่ยงPICหากเป็นไปได้ (ตัวเลือกส่วนบุคคล) เพียงเพราะมีความเป็นไปได้น้อยในการเขียนโปรแกรม (ทั้งหมดข้างต้นมีเครื่องมือโอเพนซอร์ซมากขึ้นหรือน้อยลงรวมถึงเครื่องมือทางการบางอย่าง)
ฉันรู้ว่า ARM บางตัวมีฟังก์ชั่นCANและไม่แน่ใจเกี่ยวกับคนอื่น
ตอนนี้ฉันมากับความเป็นไปได้เหล่านี้:
- GPIO ง่าย ๆ ในการส่งข้อมูล (พูด> 16 บิตที่ HIGH เพื่อระบุจุดเริ่มต้นของข้อความ> 16 บิตที่ LOW เพื่อระบุจุดสิ้นสุดข้อความ) อย่างไรก็ตามจะต้องอยู่ที่ความถี่มาตรฐาน << (frequency_client, frequency_server) เพื่อให้สามารถตรวจจับบิตทั้งหมด ต้องการเพียงหนึ่งสายต่อ MCU ลูกค้า
- RS-232 : ฉันคิดว่านี่เป็นโปรโตคอลการสื่อสารที่ใช้กันมากที่สุด แต่ฉันก็ไม่รู้ว่ามันจะขยายขนาดได้ดีแค่ไหน ฉันกำลังพิจารณา MCU ลูกค้าสูงสุด 64 คนในขณะนี้ (อาจจะมากกว่านี้ในภายหลัง)
- USB: AFAIK ส่วนใหญ่เหมือนกับ RS-232 แต่ฉันไม่คิดว่ามันจะขยายได้ดีในกรณีนี้ (แม้ว่า USB รองรับอุปกรณ์จำนวนมาก - 255 ถ้าฉันจำได้อย่างถูกต้อง - มันอาจซับซ้อนเกินไปสำหรับแอปพลิเคชันนี้)
- RJ45 / Ethernet: นี่คือสิ่งที่ฉันชอบที่จะใช้เพราะช่วยให้สามารถส่งสัญญาณในระยะทางไกลโดยไม่มีปัญหา (อย่างน้อยก็มีสายเคเบิลCat 6ที่มีฉนวนหุ้ม) ปัญหาคือค่าใช้จ่าย (PHY, MAC, หม้อแปลง, ... ) ฉันไม่รู้ว่าคุณสามารถประสานกับบ้านได้ดีหรือไม่ วิธีนี้ฉันไม่ต้องการไคลเอนต์ MCU
- ไร้สาย / ZigBee : โมดูลมีราคาแพงมากแม้ว่ามันอาจเป็นวิธีที่จะไปเพื่อหลีกเลี่ยง "สปาเก็ตตี้" หลังโต๊ะ
- โมดูล RF / เครื่องส่งสัญญาณ: ฉันพูดถึงพวกมันในย่านความถี่ 300 MHz - 1 GHz ดังนั้นพวกเขาควรจะบัดกรีที่บ้านยาก โมดูลทั้งหมดมีในตัว แต่ก็ค่อนข้างแพงเท่า ZigBee (อย่างน้อยโมดูลของ RF ที่ บริษัท Mouser ที่ Sparkfun นั้นมีราคาถูกกว่า)
- สามารถ? ดูเหมือนว่าจะแข็งแกร่งมาก แม้ว่าฉันจะไม่ได้วางแผนที่จะใช้ในแอพพลิเคชั่นยานยนต์ แต่มันก็อาจเป็นทางเลือกที่ดี
- I²C / SPI / UART ? อีกครั้ง - หลีกเลี่ยง "สปาเก็ตตี้" ด้วยสายเคเบิลถ้าเป็นไปได้
- PLCไม่ใช่ตัวเลือกจริงๆ ประสิทธิภาพจะลดลงอย่างรวดเร็วเมื่อความยาวเพิ่มขึ้นและขึ้นอยู่กับโหลดความจุของเครือข่ายพลังงาน ฉันคิดว่าราคาที่ชาญฉลาดนั้นใกล้เคียงกับ Ethernet
นอกจากนี้โพรโทคอลใดที่จะ "ดีกว่า" ในกรณีที่มีการส่งสัญญาณพร้อมกัน (สมมติว่าเป็นกรณีที่หาได้ยากที่อุปกรณ์สองทันทีเริ่มส่งสัญญาณเดียวกัน: โปรโตคอลใดที่ให้ระบบการจัดการความขัดแย้งที่ดีที่สุด
เพื่อสรุป : ฉันต้องการฟังสิ่งที่อาจเป็นทางออกที่ดีที่สุดสำหรับระบบไคลเอนต์แบบกระจายที่ทำการสื่อสารข้อมูลที่เบามากโดยพิจารณาทั้งความยืดหยุ่น (จำนวนสูงสุดของอุปกรณ์ระบบการจัดการความขัดแย้ง / การชนกัน, ... ) ราคา ง่ายต่อการทำที่บ้าน (บัดกรี), ... ฉันต้องการหลีกเลี่ยงการใช้จ่าย $ 20 เพียงแค่โมดูลการสื่อสาร แต่ในเวลาเดียวกันการมี 30 สายหลังโต๊ะจะดูด
โซลูชันที่ฉันถ่ายภาพในขณะนี้คือการสื่อสารขั้นพื้นฐานระหว่าง MCU ใกล้โดย GPIO หรือ RS-232 ( ราคาถูก !) และใช้ Ethernet / ZigBee / Wi-Fi บนหนึ่ง MCU ต่อ "โซน" เพื่อสื่อสารกับเซิร์ฟเวอร์ ( แพง)แต่ยังคงราคาถูกกว่าโมดูลอีเธอร์เน็ตหนึ่งโมดูลต่อไคลเอนต์ MCU แต่ละตัว)
แทนที่จะใช้สายเคเบิลก็อาจเป็นไปได้ที่จะใช้ใยแก้วนำแสง / เส้นใยแสง แม้ว่าจะต้องมีการแปลงเพิ่ม แต่ฉันไม่แน่ใจว่าจะเป็นทางออกที่ดีที่สุดในกรณีนี้หรือไม่ ฉันต้องการฟังรายละเอียดเพิ่มเติมเกี่ยวกับพวกเขา