บทความประกอบการเรียนรู้ => IOT : Internet of Thing (ESP32) => ข้อความที่เริ่มโดย: admin ที่ กุมภาพันธ์ 06, 2019, 09:23:43 AM

หัวข้อ: การเรียนรู้ครั้งที่ 7 [Basic ESP32] การใช้งาน DAC
เริ่มหัวข้อโดย: admin ที่ กุมภาพันธ์ 06, 2019, 09:23:43 AM
การเรียนรู้ครั้งที่ 7 [Basic ESP32] การใช้งาน DAC
    DAC (Digital to Analog Converter) เป็นวงจรที่มีหน้าที่แปลงสัญญาณดิจิทัลให้เป็นสัญญาณแอนะล็อก สัญญาณดิจิทัลจะมีเพียงแค่ 2 ระดับคือ 1 กับ 0 โดยที่ 1 ใช้แทนระดับของการมีแรงดัน(ใกล้เคียงแหล่งจ่าย) และ 0 ใช้แทนระดับแรงดัน 0 โวลต์(หรือใกล้เคียงกราวด์) ส่วนสัญญาณแอนะล็อกเป็นสัญญาณที่มีแรงดันที่มีค่าการเปลี่ยนแปลงแบบต่อเนื่องได้
    ESP32 มีวงจรแปลงสัญญาณอยู่ภายใน 2 วงจรโดยส่งออกภายนอกทางขา 25 และ 26 วงจร DAC ของ ESP32 เป็นขนาด 8 บิตทำให้การแปลงให้เป็นสัญญาณแอนะล็อกได้ทั้งหมด 256 ระดับตั้งแต่แรงดัน 0V จนถึงแรงดัน 3.3V (หรือใกล้เคียง)
หมายเหตุ
   ESP32 เป็นไมโครคอนโทรลเลอร์การแปลงค่าและส่งของขาพอร์ตแต่ละครั้งต้องใช้เวลาดำเนินการดังนั้นจึงต้องแลกมาระหว่างรูปคลื่นที่ต่อเนื่องหรือรูปคลื่นที่เป็นขั้นบันได ดังนี้
   -ถ้าต้องการรูปคลื่นต่อเนื่องต้องส่งค่าในทุก ๆ มุมที่ทำได้ส่งผลให้ได้ความถี่ต่ำ
   -ถ้าต้องการความถี่สูงต้องส่งค่าของรูปคลื่นในมุมที่ห่าง ๆ กันเพื่อให้ได้ครบ 1 ลูกคลื่นในเวลาอันสั้น
(https://www.praphas.com/PhotoForum/ESP32/Lab-07-DAC/1.png)

ตัวอย่างผลที่ได้จากการแปลงสัญญาณให้ได้รูปคลื่นซายน์โดยเปลี่ยนแปลงค่าทุก ๆ 5 องศา
(https://www.praphas.com/PhotoForum/ESP32/Lab-07-DAC/2.png)

ตัวอย่างผลที่ได้จากการแปลงสัญญาณให้ได้รูปคลื่นซายน์โดยเปลี่ยนแปลงค่าทุก ๆ 10 องศา
(https://www.praphas.com/PhotoForum/ESP32/Lab-07-DAC/3.png)

ตัวอย่างผลที่ได้จากการแปลงสัญญาณให้ได้รูปคลื่นซายน์โดยเปลี่ยนแปลงค่าทุก ๆ 15 องศา
(https://www.praphas.com/PhotoForum/ESP32/Lab-07-DAC/4.png)

ตัวอย่างผลที่ได้จากการแปลงสัญญาณให้ได้รูปคลื่นซายน์โดยเปลี่ยนแปลงค่าทุก ๆ 20 องศา
(https://www.praphas.com/PhotoForum/ESP32/Lab-07-DAC/5.png)

ตัวอย่างผลที่ได้จากการแปลงสัญญาณให้ได้รูปคลื่นซายน์โดยเปลี่ยนแปลงค่าทุก ๆ 30 องศา
(https://www.praphas.com/PhotoForum/ESP32/Lab-07-DAC/6.png)

ตำแหน่งขาของ ESP32 ที่ใช้งาน
(https://www.praphas.com/PhotoForum/ESP32/Lab-07-DAC/7.png)

วงจรที่ใช้ทดลอง
(https://www.praphas.com/PhotoForum/ESP32/Lab-07-DAC/8.png)
หัวข้อ: Re: การเรียนรู้ครั้งที่ 7 [Basic ESP32] การใช้งาน DAC
เริ่มหัวข้อโดย: admin ที่ กุมภาพันธ์ 06, 2019, 09:28:33 AM

ฟังก์ชั่นที่ใช้งานในการทดลองนี้

รูปแบบ คำอธิบาย
dacWrite(pin, value); ฟังก์ชั่นส่งค่าแอนะล็อกที่เป็นแรงดันระหว่าง 0-3.3V
pin: หมายเลขขาที่ต้องการส่งค่าแอนะล็อกออก(25,26)
value: ค่าที่ต้องการส่งออก (0-255)
sin(value); ฟังก์ชั่นตรีโกณมิติที่คืนค่า sine จากมุมที่กำหนด
value:ค่ามุมเป็นเรเดียน
หัวข้อ: Re: การเรียนรู้ครั้งที่ 7 [Basic ESP32] การใช้งาน DAC
เริ่มหัวข้อโดย: admin ที่ กุมภาพันธ์ 06, 2019, 09:34:35 AM
ตัวอย่างโปรแกรมสร้างสัญญาณ
1. โปรแกรมสร้างสัญญาณรูปคลื่นซายน์ โดยสร้างรูปคลื่นจากการเปลี่ยนแปลงค่าทุก ๆ 1 องศา ส่งสัญญาณออกทางขา 25 (DAC1)
(https://www.praphas.com/PhotoForum/ESP32/Lab-07-DAC/9.png)
โค้ด
โค๊ด: [Select]
#define DAC1 25
int sine[360];
void setup() {
  for (int deg = 0 ; deg < 360 ; deg++ ) {
    sine[deg] = int(128 + 127  * sin(deg * PI / 180));
  }
}
void loop() {
  for (int deg = 0 ; deg < 360 ; deg ++ ) {
    dacWrite(DAC1, sine[deg]);
  }
}

ผลการรันที่ได้
(https://www.praphas.com/PhotoForum/ESP32/Lab-07-DAC/9a.png)

2. โปรแกรมสร้างสัญญาณรูปคลื่นซายน์ โดยสร้างรูปคลื่นจากการเปลี่ยนแปลงค่าทุก ๆ 5 องศา ส่งสัญญาณออกทางขา 25 (DAC1)
(https://www.praphas.com/PhotoForum/ESP32/Lab-07-DAC/10.png)
โค้ด
โค๊ด: [Select]
#define DAC1 25
int sine[360];
void setup() {
  for (int deg = 0 ; deg < 360 ; deg++ ) {
    sine[deg] = int(128 + 127  * sin(deg * PI / 180));
  }
}
void loop() {
  for (int deg = 0 ; deg < 360 ; deg +=5 ) {
    dacWrite(DAC1, sine[deg]);
  }
}

ผลการรันที่ได้
(https://www.praphas.com/PhotoForum/ESP32/Lab-07-DAC/10a.png)

3. โปรแกรมสร้างสัญญาณรูปคลื่นซายน์ โดยสร้างรูปคลื่นจากการเปลี่ยนแปลงค่าทุก ๆ 10 องศา ส่งสัญญาณออกทางขา 25 (DAC1)
(https://www.praphas.com/PhotoForum/ESP32/Lab-07-DAC/11.png)
โค้ด
โค๊ด: [Select]
#define DAC1 25
int sine[360];
void setup() {
  for (int deg = 0 ; deg < 360 ; deg++ ) {
    sine[deg] = int(128 + 127  * sin(deg * PI / 180));
  }
}
void loop() {
  for (int deg = 0 ; deg < 360 ; deg +=10 ) {
    dacWrite(DAC1, sine[deg]);
  }
}

ผลการรันที่ได้
(https://www.praphas.com/PhotoForum/ESP32/Lab-07-DAC/11a.png)

3. โปรแกรมสร้างสัญญาณรูปคลื่นซายน์และรูปคลื่นฟันเลื่อยโดยสร้างรูปคลื่นจากการเปลี่ยนแปลงค่าทุก ๆ 1 องศา ส่งสัญญาณออกทางขา 25 (DAC1) และขา 26 (DAC2)
(https://www.praphas.com/PhotoForum/ESP32/Lab-07-DAC/12.png)
โค้ด
โค๊ด: [Select]
#define DAC1 25
#define DAC2 26
int sine[360];
int sawtooth[360];
void setup() {
  for (int deg = 0 ; deg < 360 ; deg++ ) {
    //----------------------------Sine wave----------------
    sine[deg] = int(128 + 127  * sin(deg * PI / 180));
    //------------------Sawtooth---------------------------
    sawtooth[deg] = map(deg, 0, 360, 0, 255);
  }
}
void loop() {
  for (int deg = 0 ; deg < 360 ; deg ++ ) {
    dacWrite(DAC1, sine[deg]);
    dacWrite(DAC2, sawtooth[deg]);   
  }
}

ผลการรันที่ได้
(https://www.praphas.com/PhotoForum/ESP32/Lab-07-DAC/12a.png)

หัวข้อ: Re: การเรียนรู้ครั้งที่ 7 [Basic ESP32] การใช้งาน DAC
เริ่มหัวข้อโดย: admin ที่ กุมภาพันธ์ 06, 2019, 10:01:51 AM
...
หัวข้อ: Re: การเรียนรู้ครั้งที่ 7 [Basic ESP32] การใช้งาน DAC
เริ่มหัวข้อโดย: admin ที่ กุมภาพันธ์ 06, 2019, 10:02:03 AM
...