หลักการทำงานของ 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