กลับไปบทความทั้งหมด
EP.8 อิเล็กทรอนิกส์ที่คนทำ IoT ต้องรู้ (2): Pull-up, Decoupling, กราวด์ร่วม และ I2C SPI UART ใช้ตอนไหน
IoT

EP.8 อิเล็กทรอนิกส์ที่คนทำ IoT ต้องรู้ (2): Pull-up, Decoupling, กราวด์ร่วม และ I2C SPI UART ใช้ตอนไหน

SPV Tech Solutions3 พฤศจิกายน 25692 min
#iot-product-design#electronics#interfaces#circuits

📘 ซีรีส์ออกแบบ IoT Product · EP.8/70 · บทที่ 2: พื้นฐานฮาร์ดแวร์และการเลือกชิ้นส่วน

ตอนนี้ตอบคำถามว่า ทำไมบอร์ดที่ต่อถูกทุกเส้นยังทำงานแปลก ๆ และสัญญาณแต่ละแบบควรใช้อินเทอร์เฟซไหน ต่อจาก EP.7 ที่คิดเรื่องแรงดันและกระแสไปแล้ว

Pull-up และ Pull-down: ขาที่ปล่อยลอยคือขาที่โกหก

ขา GPIO ที่ตั้งเป็นอินพุตแต่ไม่ได้ต่ออะไรแน่นอน จะ "ลอย" (floating) อ่านได้ทั้ง 0 และ 1 สลับไปมาตามสัญญาณรบกวน อาการที่เจอคือ ปุ่มกดเองทั้งที่ไม่มีใครแตะ

  • Pull-up = ตัวต้านทานดึงขาขึ้นไฟเลี้ยง ปกติอ่านได้ 1 กดปุ่มลงกราวด์แล้วเป็น 0
  • Pull-down = ดึงลงกราวด์ ปกติอ่านได้ 0

MCU ส่วนใหญ่มี pull-up ในตัวชิป (ค่าราวหลายสิบกิโลโอห์ม ดูใน datasheet) พอสำหรับปุ่มบนบอร์ด แต่ ไม่พอสำหรับบัส I2C ที่ต้องใช้ pull-up ภายนอก เพราะ I2C ขับสัญญาณได้แค่ทางลง ขาขึ้นต้องพึ่งตัวต้านทานล้วน ๆ

ปุ่มกดทางกลมีอาการ "เด้ง" (bounce) ส่งสัญญาณกระพริบหลายครั้งในเสี้ยววินาที ให้เฟิร์มแวร์รอให้ค่านิ่งราว 20–50 มิลลิวินาทีก่อนนับว่ากด

Decoupling: ถังน้ำเล็ก ๆ ข้างขาไฟ

ชิปดึงกระแสเป็นห้วง ๆ เร็วมาก สายไฟบนบอร์ดส่งให้ไม่ทัน แรงดันจึงกระตุกสั้น ๆ ตัวเก็บประจุ decoupling คือถังน้ำเล็ก ๆ ที่วางชิดขาไฟของชิปเพื่อจ่ายกระแสช่วงนั้นแทน

  • แนวทางทั่วไปตามเอกสารผู้ผลิตชิปส่วนใหญ่: 100nF ชิดขาไฟทุกขา ยิ่งใกล้ยิ่งดี
  • บวก ตัวเก็บประจุค่าใหญ่ (หลายไมโครฟารัด) ใกล้โมดูล Wi-Fi รับกระแสพุ่งช่วงส่งข้อมูล ค่าจริงให้ยึดตาม datasheet ของโมดูลที่เลือก

ขาด decoupling ตัวเดียว อาการคือรีเซ็ตสุ่ม ๆ ซึ่งหาสาเหตุยากที่สุด เพราะต่อออสซิลโลสโคปดูแล้วบางทีก็ไม่เห็น การออกแบบวงจรไฟทั้งชุดลงลึกใน EP.17

กราวด์ร่วม: ไม่มีกราวด์เดียวกัน ก็ไม่มีภาษาเดียวกัน

แรงดันคือ ความต่าง ระหว่างสองจุด ถ้าเซนเซอร์ใช้ไฟคนละแหล่งกับ MCU แล้วไม่ต่อกราวด์ถึงกัน คำว่า "3.3V" ของสองฝั่งไม่ได้วัดจากจุดเดียวกัน สัญญาณจึงอ่านเพี้ยนหรือไม่ได้เลย

กฎง่าย ๆ: ทุกอุปกรณ์ที่คุยกันด้วยสายสัญญาณ ต้องต่อกราวด์ถึงกัน (ยกเว้นวงจรที่ตั้งใจแยกด้วยตัวแยกสัญญาณ เช่น ฝั่งไฟบ้าน) และสายกราวด์ของโหลดกระแสสูงอย่างมอเตอร์ ไม่ควรวิ่งผ่านเส้นทางเดียวกับกราวด์ของเซนเซอร์

อินเทอร์เฟซที่เจอบ่อย: ใช้ตอนไหน

อินเทอร์เฟซใช้กับจำนวนสาย (ไม่รวมไฟ)ข้อควรรู้
GPIOปุ่ม LED สวิตช์ประตู1 ต่ออุปกรณ์ขาอินพุตต้องมี pull-up/down
ADCเซนเซอร์แอนะล็อก วัดแรงดันแบต1แม่นยำแค่ไหนดูที่ datasheet ของ MCU
PWMหรี่ไฟ คุมความเร็วพัดลม buzzer1โหลดกระแสสูงต้องผ่านทรานซิสเตอร์
I2Cเซนเซอร์หลายตัวบนบัสเดียว2 (SDA, SCL)ออกแบบมาสำหรับระยะสั้นบนบอร์ด
SPIจอ หน่วยความจำ งานเร็ว4 ขึ้นไปเร็วกว่า I2C แต่ใช้ขาเยอะ
UARTโมดูลซิม GPS ดีบัก2 (TX, RX)ไขว้สาย TX ไป RX และตั้งความเร็วตรงกัน
1-Wireเซนเซอร์อุณหภูมิแบบสายเดียว1ต้องมี pull-up ภายนอกเช่นกัน

ลองใช้กับโปรเจกต์ตัวอย่าง: ตัวเฝ้าโรงเห็ด

วงจรพื้นฐานมี 4 ส่วน: เซนเซอร์อุณหภูมิ-ความชื้นบน I2C, LED สถานะ, ปุ่มตั้งค่า (ต่อ GPIO ใช้ pull-up ในตัวชิป) และ buzzer (ขับผ่านทรานซิสเตอร์ เพราะอาจกินกระแสเกินขา GPIO)

เรื่องที่ต้องตัดสินใจจริงคือ pull-up ของ I2C เพราะเซนเซอร์อยู่ในโรงเรือน ส่วนกล่องหลักอยู่ใต้ชายคา สายยาวเพิ่ม ค่าความจุ (capacitance) ของบัส ขอบสัญญาณขาขึ้นจึงช้าลง ตามเอกสารคำนวณ pull-up ของ Texas Instruments (SLVA689) ซึ่งอิงสเปก I2C

R_max = t_r / (0.8473 × C_bus)      t_r โหมด 100kHz ไม่เกิน 1000ns
R_min = (VDD − 0.4V) / 3mA          = (3.3 − 0.4) / 0.003 ≈ 970Ω

สมมติสาย 3 เมตร ความจุรวมทั้งบัสราว 250pF (ตัวเลขห้องเรียน วัดจริงหรือดูสเปกสายที่ใช้)

  • pull-up 10kΩ: ขอบขาขึ้นราว 0.8473 × 10k × 250p ≈ 2.1µs เกินสเปก ข้อมูลเพี้ยนเป็นพัก ๆ
  • pull-up 2.2kΩ: ราว 0.47µs ผ่านโหมด 100kHz และยังมากกว่า R_min

การตัดสินใจ: pull-up 2.2kΩ ฝั่งบอร์ดหลัก + ความเร็วบัส 100kHz (เซนเซอร์อ่านทุกไม่กี่นาที ไม่ต้องเร็ว) ใช้สายคู่บิดเกลียว และวาง 100nF ชิดเซนเซอร์ปลายสายด้วย ถ้าฟาร์มไหนต้องลากสายไกลกว่านี้มาก ให้เปลี่ยนแนวทาง เช่นใช้ชิปขยายบัส แทนการลดค่า pull-up ไปเรื่อย ๆ การเลือกตัวเซนเซอร์จริงลงลึกใน EP.14

กับดักที่เจอบ่อย: ใช้โมดูลเซนเซอร์สำเร็จที่ใส่ pull-up มาให้บนบอร์ดแล้ว และใส่ซ้ำที่บอร์ดหลักอีก ตัวต้านทานขนานกันจนค่ารวมต่ำกว่า R_min ขา SDA ดึงลงไม่ถึง 0 ให้ไล่ดูทุกโมดูลบนบัสว่ามี pull-up ติดมาหรือไม่

เช็กลิสต์ก่อนไปตอนถัดไป

  • ไล่ทุกขาอินพุตว่ามี pull-up/pull-down แล้ว ไม่มีขาไหนลอย
  • ใส่ 100nF ชิดขาไฟของทุกชิปในแบบวงจร และเช็กตัวเก็บประจุค่าใหญ่ข้างโมดูล Wi-Fi ตาม datasheet
  • ยืนยันว่าทุกอุปกรณ์ที่ต่อสายสัญญาณถึงกันมีกราวด์ร่วม
  • วัดหรือประเมินความจุของสาย I2C แล้วคำนวณช่วง pull-up ด้วยสูตรข้างบน
สรุปสำคัญ

บอร์ดที่ "ทำงานแปลก ๆ" ส่วนใหญ่ไม่ได้พังที่ชิป แต่พลาดที่ตัวต้านทานกับตัวเก็บประจุราคาไม่กี่สตางค์ และเลือกอินเทอร์เฟซโดยไม่คิดถึงความยาวสาย

ตอนต่อไป — EP.9: อ่าน Datasheet ให้เป็น: หาค่าที่สำคัญได้ใน 10 นาที

อยากให้ช่วยตรวจแบบวงจรและการต่อเซนเซอร์ของอุปกรณ์คุณก่อนทำต้นแบบ ดูบริการออกแบบอุปกรณ์ IoT เฉพาะงานได้ที่ /iot หรือ ปรึกษาฟรี และทัก LINE @spvtech ได้เลย

ถ้าบทความนี้มีประโยชน์ แชร์ให้เพื่อนๆ ด้วยนะ

ยังไม่แน่ใจว่าธุรกิจคุณควรเริ่มใช้ AI ตรงไหน?

เช็กฟรีใน 2 นาที → รู้คะแนนโอกาสใช้ AI + 3 ขั้นแรกที่ควรทำ ไม่ต้องสมัคร

เช็กสุขภาพธุรกิจฟรี