ESP32 ADC – อ่านค่าอนาล็อกด้วย Arduino IDE

Esp32 Adc Xan Kha Xnalxk Dwy Arduino Ide



ADC (ตัวแปลงแอนะล็อกเป็นดิจิทัล) เป็นวงจรอิเล็กทรอนิกส์ที่มาพร้อมกับบอร์ดไมโครคอนโทรลเลอร์ที่แตกต่างกันหรือรวมอยู่ในไมโครคอนโทรลเลอร์ ADC ใช้เพื่อแปลงแรงดันแอนะล็อกจากเซ็นเซอร์ต่างๆ ให้อยู่ในรูปแบบดิจิทัล เช่นเดียวกับ Arduino ESP32 ยังมี ADC ซึ่งสามารถอ่านข้อมูลแอนะล็อกได้ มาหาข้อมูลเพิ่มเติมเกี่ยวกับ ESP32 ADC

บทนำ ESP32 ADC

บอร์ด ESP32 มี ADC 12 บิตในตัวสองตัวหรือที่เรียกว่า ADC SAR (Successive Approximation Registers) ADC ของบอร์ด ESP32 รองรับช่องสัญญาณอินพุตแบบอะนาล็อก 18 ช่อง ซึ่งหมายความว่าเราสามารถเชื่อมต่อเซ็นเซอร์อะนาล็อก 18 ตัวเพื่อรับอินพุตจากช่องสัญญาณเหล่านั้น

แต่นี่ไม่ใช่กรณีที่นี่ ช่องสัญญาณแอนะล็อกเหล่านี้แบ่งออกเป็นสองประเภทคือช่อง 1 และช่อง 2 ช่องสัญญาณทั้งสองนี้มีพินบางตัวที่ไม่พร้อมใช้งานสำหรับอินพุต ADC เสมอไป เรามาดูกันว่าหมุด ADC เหล่านั้นมีอะไรบ้าง







หมุด ESP32 ADC

ดังที่ได้กล่าวไว้ก่อนหน้านี้บอร์ด ESP32 มีช่อง ADC 18 ช่อง จาก 18 รายการ มีเพียง 15 รายการในบอร์ด DEVKIT V1 DOIT ที่มี GPIO ทั้งหมด 30 รายการ



ดูบอร์ดของคุณและระบุพิน ADC ตามที่เราเน้นไว้ในภาพด้านล่าง:







ช่อง 1 ADC Pins

ต่อไปนี้เป็นการแมปพินที่กำหนดของบอร์ด ESP32 DEVKIT DOIT ADC1 ใน ESP32 มี 8 ช่อง แต่บอร์ด DOIT DEVKIT รองรับ 6 ช่องเท่านั้น แต่ฉันรับประกันว่าสิ่งเหล่านี้ยังเกินพอ

ADC1 GPIO PIN ESP32
CH0 36
CH1 NA ในเวอร์ชัน 30 Pin ESP32 (Devkit MUST)
CH2 นั่น
CH3 39
CH4 32
CH5 33
CH6 3. 4
CH7 35

ภาพต่อไปนี้แสดงช่อง ESP32 ADC1:



ช่อง 2 ADC Pins

บอร์ด DEVKIT DOIT มีช่องอนาล็อก 10 ช่องใน ADC2 แม้ว่า ADC2 จะมีช่องสัญญาณแอนะล็อก 10 ช่องเพื่ออ่านข้อมูลแอนะล็อก แต่ช่องสัญญาณเหล่านี้ไม่พร้อมใช้งานเสมอไป ADC2 ถูกแชร์กับไดรเวอร์ WiFi ออนบอร์ด ซึ่งหมายความว่าในขณะที่บอร์ดกำลังใช้ WIFI ADC2 เหล่านี้จะไม่สามารถใช้ได้ วิธีแก้ไขปัญหานี้คือการใช้ ADC2 เมื่อปิดไดรเวอร์ Wi-Fi เท่านั้น

ภาพด้านล่างแสดงการแมปพินของช่อง ADC2

วิธีใช้ ESP32 ADC

ESP32 ADC ทำงานในลักษณะเดียวกันเช่น Arduino ความแตกต่างเพียงอย่างเดียวคือมี ADC 12 บิต ดังนั้น บอร์ด ESP32 จะจับคู่ค่าแรงดันแอนะล็อกตั้งแต่ 0 ถึง 4095 ในค่าที่ไม่ต่อเนื่องแบบดิจิทัล

  • หากแรงดันไฟฟ้าที่จ่ายให้กับ ESP32 ADC เป็นศูนย์ ช่องสัญญาณ ADC ค่าดิจิตอลจะเป็นศูนย์
  • หากแรงดันไฟฟ้าที่จ่ายให้กับ ADC สูงสุดหมายถึง 3.3V ค่าดิจิตอลเอาต์พุตจะเท่ากับ 4095
  • ในการวัดแรงดันไฟฟ้าที่สูงขึ้น เราสามารถใช้วิธีแบ่งแรงดันไฟฟ้าได้

บันทึก: ESP32 ADC ถูกตั้งค่าเริ่มต้นที่ 12 บิต อย่างไรก็ตาม สามารถกำหนดค่าให้เป็น 0 บิต 10 บิต และ 11 บิตได้ ADC เริ่มต้น 12 บิตสามารถวัดค่าได้ 2^12=4096 และแรงดันอนาล็อกมีตั้งแต่ 0V ถึง 3.3V

ข้อจำกัด ADC บน ESP32

นี่คือข้อจำกัดบางประการของ ESP32 ADC:

  • ESP32 ADC ไม่สามารถวัดแรงดันไฟฟ้าที่มากกว่า 3.3V ได้โดยตรง
  • เมื่อเปิดใช้งานไดรเวอร์ Wi-Fi จะไม่สามารถใช้งาน ADC2 ได้ ใช้ ADC1 ได้เพียง 8 ช่องเท่านั้น
  • ESP32 ADC ไม่ได้เป็นเส้นตรงมาก มันแสดงให้เห็น ความไม่เชิงเส้น พฤติกรรมและไม่สามารถแยกความแตกต่างระหว่าง 3.2V และ 3.3V อย่างไรก็ตาม สามารถปรับเทียบ ESP32 ADC ได้ ที่นี่ เป็นบทความที่จะแนะนำคุณในการปรับเทียบพฤติกรรมไม่เชิงเส้นของ ESP32 ADC

พฤติกรรมที่ไม่เป็นเชิงเส้นของ ESP32 สามารถเห็นได้บนจอภาพแบบอนุกรมของ Arduino IDE

โปรแกรม ESP32 ADC โดยใช้ Arduino IDE

วิธีที่ดีที่สุดในการทำความเข้าใจการทำงานของ ESP32 ADC คือการใช้โพเทนชิออมิเตอร์และอ่านค่าจากค่าความต้านทานศูนย์ถึงค่าสูงสุด ต่อไปนี้เป็นภาพวงจรที่กำหนดของ ESP32 พร้อมโพเทนชิออมิเตอร์

เชื่อมต่อพินกลางของโพเทนชิออมิเตอร์กับพินดิจิตอล 25 ของ ESP32 และพินเทอร์มินัล 2 พินที่มีพิน 3.3V และ GND ตามลำดับ

ฮาร์ดแวร์

รูปภาพต่อไปนี้แสดงฮาร์ดแวร์ของ ESP32 พร้อมโพเทนชิออมิเตอร์ ต่อไปนี้เป็นรายการส่วนประกอบที่จำเป็น:

  • บอร์ด ESP32 DEVKIT DOIT
  • โพเทนชิออมิเตอร์
  • เขียงหั่นขนม
  • สายจัมเปอร์

รหัส

เปิด Arduino IDE และอัปโหลดโค้ดด้านล่างในบอร์ด ESP32 ตรวจสอบวิธีการติดตั้งและกำหนดค่า ESP32 ด้วย Arduino IDE คลิก ที่นี่ .

const int Pin_Potentiometer = 25 ; /*โพเทนชิออมิเตอร์เชื่อมต่อที่ GPIO 25 (ADC2_CH8)*/
int Val_Potentiometer = 0 ; /*ค่าที่อ่านโพเทนชิออมิเตอร์จะถูกเก็บไว้ที่นี่*/
โมฆะ ติดตั้ง ( ) {
ซีเรียล เริ่ม ( 115200 ) ; /*การสื่อสารแบบอนุกรมเริ่มต้นขึ้น*/
}
โมฆะ ห่วง ( ) {
Val_Potentiometer = อนาล็อกอ่าน ( Pin_Potentiometer ) ; /*การอ่านค่าโพเทนชิออมิเตอร์*/
ซีเรียล println ( Val_Potentiometer ) ; /*พิมพ์ค่าโพเทนชิออมิเตอร์*/
ล่าช้า ( 2000 ) ; /*ล่าช้า 2 วินาที*/
}

ในโค้ดด้านบนนี้ เราเริ่มต้นพินดิจิทัล 25 สำหรับโพเทนชิออมิเตอร์บนบอร์ด ESP32 ถัดไปเพื่อรับอินพุต ตัวแปร Val_Potentiometer จะถูกเตรียมใช้งาน ถัดไป การสื่อสารแบบอนุกรมเริ่มต้นโดยการกำหนดอัตราบอด

ใน ห่วง ส่วนหนึ่งของโค้ดที่ใช้ฟังก์ชัน analogRead() ค่า ADC จะถูกอ่านบนพิน 25 ของ ESP32 ถัดไปโดยใช้ Serial.print() ค่าทั้งหมดจะถูกพิมพ์บนจอภาพอนุกรม

เอาท์พุต

เอาต์พุตแสดงค่าแอนะล็อกที่แมปกับค่าที่ไม่ต่อเนื่องแบบดิจิทัล เมื่อแรงดันไฟอ่านสูงสุดที่เอาต์พุตดิจิตอล 3.3V เท่ากับ 4095 และเมื่อแรงดันอ่านเป็น 0V เอาต์พุตดิจิตอลจะกลายเป็น 0

บทสรุป

ตัวแปลงแอนะล็อกเป็นดิจิทัลใช้ได้ทุกที่ โดยเฉพาะเมื่อเราต้องเชื่อมต่อบอร์ดไมโครคอนโทรลเลอร์กับเซ็นเซอร์และฮาร์ดแวร์แอนะล็อก ESP32 มีสองช่องสัญญาณสำหรับ ADC คือ ADC1 และ ADC2 สองช่องสัญญาณเหล่านี้รวมกันเพื่อให้มี 18 พินสำหรับเชื่อมต่อเซ็นเซอร์แอนะล็อก อย่างไรก็ตาม มี 3 รุ่นที่ไม่มีในรุ่น ESP32 30 พิน หากต้องการดูเพิ่มเติมเกี่ยวกับการอ่านค่าแอนะล็อก โปรดอ่านบทความ