การขยายพอร์ต I2C (I2C Bus Expansion)
เมื่อโปรเจกต์หุ่นยนต์มีเซนเซอร์จำนวนมาก (เช่น ใน Ghost Micro V5 ที่มีทั้ง IMU, GPS Compass, OLED, และบอร์ดรอง) พอร์ต I2C บนไมโครคอนโทรลเลอร์อาจไม่เพียงพอ หรือมีปัญหาเรื่องระยะทางและการจัดการสายไฟ
1. I2C Bus Limit (ข้อจำกัดของ I2C)
I2C เป็นการสื่อสารแบบ Bus ที่ใช้อุปกรณ์หลายตัวแชร์สายสัญญาณ 2 เส้น (SDA, SCL) ร่วมกัน แต่มีข้อจำกัดทางเทคนิคคือ: - Address Conflict: อุปกรณ์ 2 ชิ้นที่มี Address (ที่อยู่) เดียวกันไม่สามารถอยู่บน Bus เดียวกันได้ (เช่น จอ OLED 2 จอที่มี Address 0x3C ทั้งคู่) - Capacitance: ยิ่งต่ออุปกรณ์เพิ่ม สายไฟยิ่งยาว สัญญาณจะยิ่ง "หนืด" และผิดพลาดได้ง่าย
2. วิธีการแก้ปัญหา
A. I2C Splitter / Hub (แบบ Passive)
- การทำงาน: เป็นเพียงการขนานสายสัญญาณเพิ่ม (เหมือนปลั๊กสามตา)
- ตัวอย่าง: Crius I2C Hub
- เหมาะสำหรับ: เพิ่มพอร์ตให้เสียบสะดวกขึ้น ในกรณีที่อุปกรณ์แต่ละตัวมี Address ต่างกัน
B. I2C Multiplexer (แบบ Active)
- การทำงาน: ใช้ชิป (เช่น TCA9548A) เพื่อ "สลับราง" สัญญาณไปยัง Channel ต่างๆ
- ประโยชน์: ช่วยให้เราใช้อุปกรณ์ที่มี Address ซ้ำกันได้ (เช่น ต่อจอ OLED ได้ถึง 8 จอในบอร์ดเดียว)
- การใช้งาน: ต้องส่งคำสั่งสลับ Channel ก่อนที่จะคุยกับอุปกรณ์ตัวนั้นๆ
3. ข้อแนะนำในการเดินสาย
- I2C Hub: ในระบบ Pixhawk เรามักใช้ I2C Hub เพื่อรวมสายจาก Compass และอุปกรณ์อื่นๆ เข้าด้วยกัน
- Termination: ตรวจสอบให้แน่ใจว่าบน Bus มีตัวต้านทาน Pull-up ที่เหมาะสม (ปกติโมดูลส่วนใหญ่มีมาให้แล้ว แต่อย่าต่อขนานกันมากเกินไป)
- Ground: สาย GND ของทุกโมดูลบน Hub ต้องเชื่อมต่อถึงกันเสมอ