เรียนรู้การใช้งาน ADC (Analog to Digital Converter)

เรียนรู้การใช้งาน ADC (Analog to Digital Converter)

หลักการทำงานของ ADC (Analog-to-Digital Converter)

ADC เป็นวงจรที่ใช้แปลงสัญญาณ Analog ให้เป็น Digital เพื่อให้ไมโครคอนโทรลเลอร์ประมวลผลได้

ขั้นตอนการทำงานของ ADC
1.Sampling → อ่านค่าสัญญาณเป็นช่วง ๆ (ค่าต่อเนื่อง → จุดตัวอย่าง)
2.Quantization → แปลงค่าตัวอย่างเป็นระดับดิจิทัล (Bit Resolution)
3.Encoding → ส่งออกเป็นค่าดิจิทัล เช่น 8 บิต (0-255) หรือ 12 บิต (0-4095)

ตัวอย่าง: ADC 12 บิต ของ ESP32 อ่านค่าแรงดัน 0-3.3V ได้เป็นค่า 0-4095

  • ถ้าแรงดัน 1.65V → ค่า ADC ≈ 2048
  • ถ้าแรงดัน 3.3V → ค่า ADC ≈ 4095

 


 

การเปลี่ยนค่าความละเอียดของ ADC บน ESP32

โดยค่าเริ่มต้น analogRead() ของ ESP32 จะใช้ความละเอียด 12 บิต (0-4095) แต่เราสามารถกำหนดความละเอียดได้ด้วยคำสั่ง

analogReadResolution(10); // กำหนดให้ ADC ใช้ 10 บิต (ค่า 0-1023)

ตัวอย่างค่าที่ได้ตามความละเอียดบิตที่ตั้งค่า

ความละเอียด (Bits) ค่าที่อ่านได้ (Range)
12-bit (ค่าเริ่มต้น) 0 – 4095
10-bit 0 – 1023
8-bit 0 – 255

หากไม่มีการกำหนดความละเอียดของ ADC (analogReadResolution(bits)) ESP32 จะใช้ค่าเริ่มต้นที่ 12 บิต ซึ่งหมายความว่าค่าที่ได้จาก analogRead() จะอยู่ในช่วง 0 – 4095 (2¹² ระดับ)


 

ตัวอย่างการใช้งาน ADC (Analog to Digital Converter) โดยไม่ต้องต่อเซ็นเซอร์

อ่านค่า Noise หรือสัญญาณรบกวนของ ADC

  • สามารถอ่านค่าจากขา ADC ที่ไม่มีการเชื่อมต่ออะไรเลย (Floating Input) ซึ่งจะได้ค่าแบบสุ่มจากสัญญาณรบกวน
  • เหมาะสำหรับการทดสอบฟังก์ชันการอ่านค่า ADC

ตัวอย่างโค้ด (Arduino IDE)

const int adcPin = 4; // ใช้ขา ADC ที่ไม่มีการเชื่อมต่อ (GPIO4)

void setup() {
    Serial.begin(115200);
}

void loop() {
    int adcValue = analogRead(adcPin);
    Serial.println(adcValue);
    delay(500);
}

ผลลัพธ์ที่ได้: ค่า ADC จะเปลี่ยนไปแบบสุ่มเนื่องจากไม่มีสัญญาณอินพุตที่แน่นอน

 

 


 

 

ตัวอย่างการเชื่อมต่อภายนอก Analog / ADC with MQ-02 Sensor


int analogPin = 4; //ประกาศตัวแปร analog ขาที่4
int val = 0;
void setup() {
pinMode(ledPin, OUTPUT); // sets the pin as output
Serial.begin(9600);
}
void loop() {
val = analogRead(analogPin); //อ่านค่าสัญญาณ analog
Serial.print("val = "); // พิมพ์ข้อมความ "val = "
Serial.println(val); // พิมพ์ค่าของตัวแปร val
delay(100);
}

 

หมายเหตุ: ADC บน ESP32 C3 Super Mini
เลี่ยงการใช้ GPIO5 เนื่องจากเป็น ADC2 อาจใช้งาน ADC ได้ไม่ราบรื่น หากมีการใช้พินนี้เป็น ADC จะส่งผล WiFi ถูกบล๊อกการทำงานและไม่สามารถเชื่อมต่อ WiFi ได้ Restrictions for GPIOs

 

BESTเรียนรู้การใช้งาน ADC (Analog to Digital Converter)

Related Posts