ก่อนข้อมูลเซ็นเซอร์ตัวเดียวจะไปถึงหน้าจอ SCADA หรือ Dashboard บนคลาวด์ได้ มันต้องเดินทางผ่านสองบัสเล็กๆ ที่วิศวกรอิเล็กทรอนิกส์ทุกคนรู้จัก — I2C และ SPI ทั้งคู่เกิดในยุค 80s แต่ยังเป็นปากทางของเซ็นเซอร์อุตสาหกรรมส่วนใหญ่ที่ขายในท้องตลาดทุกวันนี้ บทความนี้สรุปวิธีเชื่อมสองบัสนี้เข้าสู่ระบบ IIoT อย่างเป็นขั้นตอน พร้อมกับดักที่เจอบ่อยในโรงงานจริง

เข้าใจสองบัสให้ชัดก่อนออกแบบ

I2C ใช้สายแค่ 2 เส้น (SDA, SCL) แบบ open-drain ต้องมีตัวต้านทาน pull-up เสมอ ระบุอุปกรณ์ด้วย address 7 หรือ 10 bit จึงต่อหลายเซ็นเซอร์บนบัสเดียวได้ แลกมาด้วยความเร็วที่ต่ำกว่า SPI และข้อจำกัดเรื่องความจุบัสรวมประมาณ 400 pF ซึ่งแปลว่าสายควรสั้นกว่า 1 เมตร ฝั่ง SPI ใช้ 4 เส้น (MOSI, MISO, SCLK, CS) สื่อสารแบบ full-duplex เร็วได้หลักสิบ MHz แต่ต้องมีสาย CS แยกทุกอุปกรณ์ ทำให้จำนวนขาโตตามจำนวนเซ็นเซอร์

ตารางเทียบ I2C กับ SPI แบบที่วิศวกรใช้ตัดสินใจก่อนลงมือออกแบบบอร์ด
ตารางเทียบ I2C กับ SPI แบบที่วิศวกรใช้ตัดสินใจก่อนลงมือออกแบบบอร์ด

6 ขั้นตอนจากบอร์ดต้นแบบสู่ระบบจริง

  1. เลือกเซ็นเซอร์และบัสให้ตรงงาน — ถ้าต้องการอ่านค่าถี่สูงเช่น ความสั่น 100 kHz ของ I2C อาจไม่พอ ให้ใช้ SPI หรือเซ็นเซอร์ที่มี ADC ในตัวแล้วส่งค่าสำเร็จรูป
  2. ออกแบบวงจรให้ถูกหลัก — คำนวณค่า pull-up ของ I2C จากความเร็วและความจุบัส (ยิ่งเร็วยิ่งต้องลดค่าตัวต้านทาน) จัดเส้นสัญญาณให้สั้นและห่างจากแหล่งสัญญาณรบกวนเช่นสายมอเตอร์
  3. ทดสอบ signal integrity ก่อนขยายระบบ — ใช้ oscilloscope ดู rise time ของ SDA/SCL และ noise margin ปัญหาที่เจอบ่อยคือ pull-up อ่อนเกินไปทำให้ waveform ไม่ถึง threshold ในเวลาที่กำหนด
  4. ต่อระยะไกลอย่างถูกวิธี — เมื่อเซ็นเซอร์อยู่ไกลกว่าที่บัสบอร์ดรับได้ อย่ายืดสาย I2C ตรงๆ ให้ใช้ตัวแปลงระดับบัสเป็นลิงก์ทนทานก่อน เช่น differential transceiver หรือย้ายฝั่ง controller ไปอยู่ใกล้เซ็นเซอร์แล้วส่งข้อมูลดิจิทัลแทน
  5. เขียนไดรเวอร์ตาม register map — ทุกเซ็นเซอร์มีตารางรีจิสเตอร์ของตัวเอง อ่าน datasheet ให้ครบทั้งโหมดการทำงาน calibration register และหน่วยวัด ก่อนเขียนโค้ดอ่านค่าบน Edge Gateway
  6. เผยแพร่ข้อมูลด้วยมาตรฐานเปิด — แปลงค่าดิบเป็นหน่วยวิศวกรรมจริง ใส่ timestamp แล้วส่งด้วย MQTT หรือ OPC UA เพื่อให้ระบบบนพื้นที่ทำงานร่วมกับของผู้ผลิตอื่นได้ทันที
6 ขั้นตอนตั้งแต่เลือกเซ็นเซอร์จนข้อมูลปรากฏบน SCADA พร้อม Timestamp และหน่วยวัดที่ถูกต้อง
6 ขั้นตอนตั้งแต่เลือกเซ็นเซอร์จนข้อมูลปรากฏบน SCADA พร้อม Timestamp และหน่วยวัดที่ถูกต้อง
อาการที่พบบ่อย สาเหตุ วิธีแก้
อ่านค่าได้ 0xFF ตลอด Address ผิด หรือ pull-up ขาด สแกน bus หา address จริง วัดแรงดัน SDA/SCL ตอน idle
ข้อมูลเพี้ยนเป็นช่วงๆ Noise จากสายพาวเวอร์/มอเตอร์ แยกกราวด์ เพิ่มตัวกรอง ลดความยาวสาย
บัสค้าง (clock stretching นานผิดปกติ) เซ็นเซอร์บางรุ่นดึง SCL ค้าง ตั้ง timeout ใน controller และรีเซ็ตบัสเมื่อจำเป็น
SPI ส่งเร็วแล้วข้อมูลเสีย โหมด CPOL/CPHA ผิด หรือสายยาวเกิน ทดสอบ 4 โหมดให้ครบ ลดความเร็วลงครึ่งหนึ่ง

จากประสบการณ์ติดตั้งระบบ IoT ในโรงงานของ Honey Corporation ปัญหา I2C/SPI แทบไม่เคยอยู่ที่ตัวโปรโตคอล แต่อยู่ที่ระยะสายและสภาพแวดล้อม EMI ของโรงงานเสมอ — ยิ่งวางแผนขั้นตอนที่ 3 กับ 4 ให้ดีเท่าไหร่ ระบบยิ่งเสถียรหลังส่งมอบ

Key Takeaways

  • I2C = 2 สาย หลายอุปกรณ์ เหมาะข้อมูลอุณหภูมิ/ความชื้นที่อัปเดตช้าๆ, SPI = 4 สาย เร็วกว่า เหมาะข้อมูลความถี่สูง
  • ความจุบัส 400 pF คือเส้นตาย ของ I2C — เกินกว่านี้ต้องมี buffer หรือเปลี่ยนไปทางอื่น
  • อย่ายืดสายบอร์ดออกไปไกล — ใช้ตัวแปลงลิงก์หรือย้าย controller ไปใกล้เซ็นเซอร์แทน
  • วัด rise time ด้วย scope ก่อนขยายระบบ ประหยัดเวลาแก้ปัญหาภาคสนามได้มหาศาล
  • ปิดท้ายด้วย MQTT/OPC UA + timestamp เพื่อให้ข้อมูลใช้งานร่วมกับระบบอื่นได้ทันที
  • อ่าน register map ของเซ็นเซอร์ทุกครั้ง — ค่า default หลายตัวไม่ได้แคลิเบรตมาให้โรงงาน

Honey Corporation พร้อมให้คำปรึกษา

ทีมงานของเรามีความเชี่ยวชาญด้านการออกแบบและติดตั้งระบบเซ็นเซอร์เชื่อมต่อ Edge Gateway สำหรับโรงงาน พร้อมออกแบบและติดตั้งระบบให้เหมาะกับธุรกิจของคุณ

📞 โทร: 09-23242995 | อีเมล: support@honey.co.th
เว็บไซต์: www.honey.co.th