การทำความเข้าใจผังวงจรสำหรับบอร์ดไมโครคอนโทรลเลอร์ WeMos ESP32#

บทความนี้นำเสนอตัวอย่างผังวงจรของบอร์ดไมโครคอนโทรลเลอร์ที่มีการใช้ชิป Espressif ESP32 SoC เป็นตัวประมวลผลหลัก และการศึกษาฟังก์ชันการทำงานของวงจรในส่วนต่าง ๆ ของบอร์ด


WeMos Lolin ESP32#

บริษัท WeMos.cc ซึ่งเป็นบริษัทในประเทศจีน ได้ผลิตบอร์ดไมโครคอนโทรลเลอร์ ESP32 ออกมาจำหน่าย โดยใช้ชื่อว่า LOLIN32 และมีหลายเวอร์ชัน ยกตัวอย่างเช่น บอร์ด "ESP32 LOLIN D32" และ "ESP32 LOLIN32 Lite" (ปัจจุบันทางบริษัทไม่ได้จำหน่ายแล้ว) ซึ่งมีความแตกต่างกันในรายละเอียด เช่น

  • ESP32 LOLIN D32
    • ใช้โมดูล ESP32 WROOM-32 ที่มีฝาครอบโลหะป้องกัน
    • มี Onboard LED (active-low) อยู่ที่ขา GPIO-5
  • ESP32 LOLIN32 Lite (v1.0.0)
    • ไม่ได้ใช้โมดูล ESP32 WROOM-32
    • มีชิป ESP32 SoC ชิปหน่วยความจำ SPI Flash และวงจรสร้างความถี่ 40MHz บนบอร์ด และไม่มีฝาครอบโลหะปิดไว้
    • มี Onboard LED (active-low) อยู่ที่ขา GPIO-22
    • ไม่มีขา USB (+5V)

สิ่งที่มีเหมือนกันทั้งสองบอร์ด

  • มีขา Pin Header สามารถเสียบขาลงบนเบรดบอร์ดได้
  • มีคอนเนกเตอร์ MicroUSB เป็นแหล่งจ่ายไฟเลี้ยง และเชื่อมต่อกับคอมพิวเตอร์ผู้ใช้
  • มีไอซี ME6211 แปลงและควบคุมระดับแรงดันไฟฟ้า +3.3V
  • ใช้ชิป CH340C USB-to-Serial Bridge
  • มีวงจรชาร์จประจุ TP4054 สำหรับแบตเตอรี่ LiPo (3.7V) และคอนเนกเตอร์ PH2.0 สำหรับแบตเตอรี่

รูป: บอร์ด WeMos Lolin D32 (ซ้าย) เปรียบเทียบกับ Lolin32 Lite (ขวา)

รูป: บอร์ด WeMos Lolin D32

จากรูปผังวงจรของบอร์ด WeMos Lolin D32 จะทำให้เห็นองค์ประกอบและวงจรส่วนต่าง ๆ และเป็นผังวงจรที่ค่อนข้างง่ายต่อการทำความเข้าใจ

รูป: ผังวงจรของบอร์ด WeMos Lolin D32

 


▷ วงจรบนบอร์ดไมโครคอนโทรลเลอร์ ESP32#

วงจรที่พบเห็นได้ทั่วไปสำหรับบอร์ด ESP32 นอกเหนือจากวงจรของ ESP32 Module ได้แก่

  1. วงจร USB-to-Serial Bridge: มีการใช้ไอซี เช่น CP210x หรือ CH340x บอร์ดในรุ่นแรกมีคอนเนกเตอร์ MicroUSB สำหรับการเชื่อมต่อกับคอมพิวเตอร์ผู้ใช้ แต่เริ่มมีการเปลี่ยนมาใช้ USB Type-C มากขึ้น ซึ่งมีความทนทานมากกว่า
  2. วงจร Auto-Reset & Upload: นิยมใช้ไอซีทรานซิสเตอร์แบบ NPN จำนวน 2 ตัว นำมาต่อไขว้กัน (Cross-coupled) เพื่อรับสัญญาณ RTS กับ DTR มาจากชิปดังกล่าวเป็นสัญญาณอินพุตให้วงจร แล้วสร้างสัญญาณเอาต์พุตสำหรับขา EN (Reset) และ GPIO0 (Boot Mode Selection) ของชิปหรือโมดูล ESP32 วงจรประเภทนี้ จะช่วยให้ผู้ใช้ไม่ต้องมาคอยกดปุ่ม Boot และปุ่ม Reset ก่อนการอัปโหลดไฟล์เฟิร์มแวร์ทุกครั้ง
  3. วงจรใช้ไอซีประเภท LDO (Low-Drop-Out) Voltage Regulator: ทำหน้าที่แปลงแรงดัน เช่น 5V จากพอร์ต USB ให้เป็น 3.3V เพื่อใช้สำหรับการทำงานของวงจร และชิป ESP32

 


▷ วงจร Auto-Reset & Download#

สัญญาณ EN (Reset) และ GPIO0 (Boot) มีความสำคัญสำหรับชิป ESP32 กล่าวคือ จะใช้สำหรับการอัปโหลดไฟล์เฟิร์มแวร์ (.bin) จากคอมพิวเตอร์ของผู้ใช้ไปยังชิป SPI Flash บนบอร์ด ESP32

สัญญาณ EN (Reset) มีการต่อตัวต้านทานแบบ Pullup ขนาด 10k ไว้แล้วบนบอร์ด วงจรภายในสำหรับขา GPIO0 มีตัวต้านทานแบบ Pull-up ขนาด 45k โอห์ม เมื่อมีการรีเซตการทำงานเพื่อทำให้ชิป ESP32 เข้าสู่โหมด Bootloader ก่อนการอัปโหลดเฟิร์มแวร์ ขา GPIO0 จะต้องมีค่าลอจิกเป็น LOW และขา GPIO2 จะต้องอยู่ในสถานะ Floating (ไม่ได้ต่อใช้งาน) หรือเป็น LOW

ในโหมด Bootloader โปรแกรม ROM Serial Bootloader ซึ่งอยู่ในหน่วยความจำภายใน On-chip ROM ของ ESP32 จะเริ่มทำงาน และรอการเชื่อมต่อกับโปรแกรม esptool.py ในเครื่องคอมพิวเตอร์ของผู้ใช้ ผ่านทาง USB-to-Serial แต่ถ้าขา GPIO0 เป็น HIGH หมายถึง Normal Boot Mode กล่าวคือ ชิป ESP32 จะเริ่มต้นทำคำสั่งตามโปรแกรมที่เก็บไว้ใน SPI Flash รายละเอียดเกี่ยวกับการทำงานของ Auto Bootloader สามารถศึกษาเพิ่มเติมได้จากเอกสาร "Espressif ESP32: Boot Mode Selection"

รูป: ตัวอย่างวงจร Auto-Reset & Download

รูป: ไอซี Dual NPN Transistor (UMH3N) และการใช้งาน

รูป: ตัวอย่างการวัดสัญญาณ RTS, DTR, EN (Reset) แและ GPIO0 (Boot) ด้วยออสซิลโลสโคป

รูป: ตัวอย่างโค้ดบางส่วนของ esptool.py ที่เกี่ยวข้องกับการสร้างสัญญาณควบคุม RTS และ DTR

การทำงานของสัญญาณ RTS และ DTR แบ่งออกเป็น 4 ช่วง ได้ดังนี้

รูป: สัญญาณ RTS และ DTR เมื่อเปลี่ยนจากสถานะ IDLE ไปสู่สถานะ Reset Device

รูป: สัญญาณ RTS และ DTR เมื่อเปลี่ยนจากสถานะ Reset Device ไปสู่ Enter Bootloader Mode

รูป: สัญญาณ RTS และ DTR เมื่อเปลี่ยนสู่สถานะ IDLE อีกครั้ง

ในการจำลองการทำงานของวงจร Auto Reset & Download มีลำดับขั้นตอนดังนี้

  1. เริ่มต้นด้วยสัญญาณ RTS และ DTR เป็น HIGH ซึ่งอยู่ในสถานะ IDLE ดังนั้นสัญญาณ EN (Reset) และ GPIO0 (Boot) จึงเป็น HIGH
  2. สัญญาณ RTS เปลี่ยนเป็น LOW ซึ่งจะทำให้สัญญาณ EN (Reset) เปลี่ยนเป็น LOW
  3. สัญญาณ DTR เปลี่ยนเป็น LOW จะทำให้ EN (Reset) เปลี่ยนเป็น HIGH แต่ระดับแรงดันไฟฟ้าของสัญญาณนี้จะค่อย ๆ เพิ่มขึ้น (ไม่ทันที) เนื่องจากมีตัวเก็บประจุไฟฟ้าต่ออยู่
  4. เมื่อสัญญาณ DTR เปลี่ยนเป็น LOW จะต้องรีบทำให้ RTS เปลี่ยนเป็น HIGH เพื่อทำให้สัญญาณ GPIO0 (Boot) เปลี่ยนเป็น LOW ซึ่งเป็นการทำให้ชิปเข้าสู่โหมด Bootloader
  5. เมื่อสัญญาณ EN (Reset) เปลี่ยนเป็น HIGH หลังจากเว้นช่วงเวลาระยะหนึ่งแล้ว (จบการรีเซต) จึงให้สัญญาณ DTR เปลี่ยนเป็น HIGH เพื่อทำให้สัญญาณ GPIO0 (Boot) เป็น HIGH อีกครั้ง

รูป: ตัวอย่างการจำลองการทำงานของวงจรด้วยซอฟต์แวร์ EasyEDA

รูป: ตัวอย่างคลื่นสัญญาณที่ได้จากการจำลองการทำงาน

บางกรณีอาจพบว่า โปรแกรม Arduino IDE หรือ esptool.py (โปรแกรม ESP32 Bootloader Utility ที่เขียนด้วยภาษา Python และใช้สำหรับการอัปโหลดเฟิร์มแวร์ผ่านพอร์ต USB-to-Serial) ไม่สามารถอัปโหลดไฟล์ได้สำเร็จ ทั้งนี้ก็เป็นเพราะว่า ไม่สามารถทำให้ ESP32 เข้าสู่โหมด Serial Bootloader ได้สำเร็จ และอาจมาจากสาเหตุหนึ่งคือ Timing ของสัญญาณทั้งสองไม่ถูกต้องตามข้อกำหนดของชิป

วิธีการหนึ่งสำหรับแก้ไขปัญหาดังกล่าวคือ การต่อตัวเก็บประจุเพิ่ม เช่น ขนาดความุ 1uF ระหว่างขา EN กับ GND ของบอร์ด จึงจะใช้งานได้และเป็นการแก้ปัญหาในเชิงฮาร์ดแวร์ การต่อตัวเก็บประจุเพิ่ม ก็เป็นการเพิ่มค่า Time Constant ของวงจร RC ดังนั้นสัญญาณ RESET/EN จะถูกหน่วงเวลาในการเปลี่ยนจาก LOW เป็น HIGH หลังสัญญาณรีเซตแอคทีฟ

ปัญหาเหล่านี้ ไม่ได้เกิดจากฮาร์ดแวร์เพียงอย่างเดียว แต่อาจเกิดจากการทำงานของชิป USB-to-Serial และการสร้างสัญญาณ DTR/RTS ด้วย การใช้เครื่องออสซิลโลสโคปวัดสัญญาณเพื่อดูการเปลี่ยนแปลงและพารามิเตอร์ที่เกี่ยวข้อง ก็เป็นวิธีหนึ่งที่ช่วยเห็นสาเหตุของปัญหาได้

 


▷ วงจรแรงดันไฟเลี้ยง#

ในส่วนของวงจรหรือไอซีควบคุมแรงดัน LDO 3.3V ซึ่งเป็นแรงดันไฟเลี้ยงสำหรับ ESP32 นักออกแบบก็อาจเลือกใช้ไอซีที่แตกต่างกันไป เช่น ความสามารถในการจ่ายกระแสสูงให้เอาต์พุต โดยยังคงรักษาระดับแรงดันให้คงที่ไว้ได้ ตัวถังของไอซีที่เลือกใช้ (IC package) เป็นต้น

หากมีการเขียนโค้ดและใช้ ESP32 โดยตั้งค่ากำลังส่งสัญญาณ WiFi ให้มีกำลังไฟฟ้าสูงสุด และส่งต่อเนื่อง ปริมาณกระแสในระดับ Peak Current ก็อาจมากกว่า 300mA และถ้าหากต่อขา 3.3V จากบอร์ด ESP32 ไปใช้กับอุปกรณ์อื่นสำหรับการต่อวงจรเพิ่ม ก็จะเพิ่มภาระโหลดให้แก่ไอซีควบคุมแรงดันซึ่งเป็นอีกหนึ่งประเด็นหรือข้อควรระวังที่สำคัญในการใช้งาน

อีกประเด็นหนึ่งคือ การป้องกันกระแสเกินหรือแรงดันเกินในส่วนที่เชื่อมต่อกับ USB หรือ การต่อแรงดันไฟเลี้ยง +5V จากภายนอกแทนการจ่ายไฟผ่านพอร์ต USB วงจรเลือกแรงดันไฟเลี้ยงหากมีตัวเลือกมากกว่าหนึ่งที่ไม่ใช่แค่ VUSB +5V ที่มาจากพอร์ต USB และบางบอร์ดก็มีวงจรชาร์จแบตเตอรี่สำหรับ Rechargeable LiPo (3.7V single-cell) เป็นต้น ไอซี ME6211C33 เป็น LDO Voltage Regulator สามารถใช้แรงดันอินพุตในช่วง 2V~6.0V ได้

ตาราง: ข้อมูลเกี่ยวกับไอซี MicroOne ME6211C33

ลองมาดูผังวงจรที่ตัดมาบางส่วนสำหรับ บอร์ด WeMos Lolin D32 จะเห็นได้ว่า แรงดันไฟเลี้ยงสำหรับบอร์ด มีทางเลือกจากพอร์ตยูเอสบีและจากแบตเตอรี่

รูป: ผังวงจรของบอร์ด WeMos Lolin D32 ในส่วนที่เกี่ยวข้องกับแรงดันไฟเลี้ยง

ในผังวงจร VUSB เป็นแรงดันไฟเลี้ยงจากพอร์ตยูเอสบี เชื่อมต่อผ่านไอซีทรานซิสเตอร์แบบ P-Channel Power MOSFET (CJ2301) ซึ่งทำหน้าที่เป็นสวิตช์ไฟฟ้า ทำให้เปิดแรงดันไฟเลี้ยง +5V ของบอร์ด ทรานซิสเตอร์มีการควบคุมที่ขาเกต (Gate: G) ด้วยไอซีทรานซิสเตอร์ (BCM8578C) แบบ BJT (PNP) หนึ่งคู่

แรงดันไฟเลี้ยง +5V เชื่อมต่อผ่านตัวไดโอด B5819 หนึ่งตัว (ป้องกันกระแสย้อนกลับทิศทาง) และได้เป็น VIN (Voltage Input) ซึ่งแรงดันจะลดลงเล็กน้อยประมาณ 0.1V แล้วนำไปป้อนให้กับไอซี ME6211 และได้แรงดันไฟฟ้าเอาต์พุต +3.3V

ถ้าไม่เสียบสาย USB แต่มีการใช้แบตเตอรี่ต่อใช้งานอยู่ ก็จะได้แรงดันไฟเลี้ยงจากแบตเตอรี่แทน (VBATT) โดยต่อผ่าน P-Channel Power MOSFET (CJ2301) นำไปใช้งานเป็น VIN ในกรณีนี้ จะไม่มีแรงดัน +5V และตัวต้านทาน 10k ทำหน้าที่เป็น Pulldown ดึงลงไปยัง GND ทำให้แรงดันที่ขาเกตของมอสเฟต (ชนิดพี) เป็น 0V และเนื่องจากแรงดัน จึงทำให้มอสเฟต (ชนิดพี) นำไฟฟ้าได้ดี เป็นสวิตช์ที่ยอมให้กระแสไฟฟ้าจาก VBATT ไหลผ่านไปยังไอซี ME6211

การศึกษาการทำงานของวงจรที่ใช้ทรานซิสเตอร์เป็นสวิตช์ไฟฟ้าสำหรับการจ่ายแรงดันไฟเลี้ยงให้วงจร สามารถทำได้โดยการจำลองการทำงานของวงจรโดยใช้ซอฟต์แวร์ เช่น EasyEDA

รูป: วงจร Current Mirror Controlled P-MOSFET Switch เป็นสวิตช์สำหรับแรงดันไฟเลี้ยง VIN

รูป: การจำลองการทำงานของวงจรด้วย EasyEDA ซึ่งแสดงระดับแรงดันไฟฟ้าสำหรับ VB, VG และ VOUT เมื่อ VIN มีการเปลี่ยนแปลงระดับระหว่าง 0V และ 5V

รูป: วงจรเลือกแหล่งจ่ายสำหรับแรงดันไฟเลี้ยง ระหว่าง +5V (USB) และ VBATT

รูป: การจำลองการทำงานของวงจรด้วย EasyEDA เมื่อ VIN มีการเปลี่ยนแปลงระดับระหว่าง 0V และ 5V

 


กล่าวสรุป#

บทความนี้ได้นำเสนอตัวอย่างผังวงจรของบอร์ด Wemos Lolin D32 โดยแบ่งวงจรออกเป็นวงจรย่อย เช่น วงจรสำหรับการรีเซตและเข้าสู่โหมด Bootloader วงจรจ่ายแรงดันไฟเลี้ยงและควบคุมแรงดันไฟฟ้า 3.3V บนบอร์ด โดยเลือกใช้แหล่งจ่ายจากพอร์ต USB และแบตเตอรี่ที่ชาร์จประจุได้

 


This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Created: 2023-12-24 | Last Updated: 2023-12-25